Phase B: identifier+key on the wire, JCS envelope signing (FRX/0.5), registry binding

This commit is contained in:
George Coles
2026-09-15 05:54:52 -04:00
parent 559c260639
commit d30e612be8
12 changed files with 159 additions and 89 deletions
+11 -11
View File
@@ -3,11 +3,11 @@ mod common;
use std::collections::BTreeSet;
use std::fs;
use common::{client, collection, config_for, poll, publish, spawn_relay, unicast};
use common::{client, collection, config_for, poll, publish, spawn_relay, test_envelope, unicast};
use frxd::crypto::Keypair;
use frxd::index::LocalIndex;
use frxd::message::{
AggregateBody, Envelope, QueryBody, ResponseItem, TYPE_AGGREGATE, TYPE_QUERY, TYPE_RESPONSE,
AggregateBody, QueryBody, ResponseItem, TYPE_AGGREGATE, TYPE_QUERY, TYPE_RESPONSE,
build_response,
};
use frxd::node::{self, Node};
@@ -39,7 +39,7 @@ fn no_bounty_winner_selection_or_slashing() {
let query = serde_json::to_value(QueryBody::new("rust", 5)).unwrap();
assert_exact_keys(&query, &["qid", "text", "entities", "budget"]);
assert_exact_keys(query.get("budget").unwrap(), &["max_results"]);
let envelope = Envelope::new(&Keypair::generate(), TYPE_QUERY, query.clone());
let envelope = test_envelope(&Keypair::generate(), TYPE_QUERY, query.clone());
let envelope = serde_json::to_value(&envelope).unwrap();
for value in [&query, &envelope] {
assert_absent_fields(
@@ -64,7 +64,7 @@ async fn no_in_protocol_citation_accounting_or_settlement() {
let key = Keypair::generate();
for msg_type in ["receipt", "settlement", "citation", "invoice"] {
let envelope = Envelope::new(&key, msg_type, serde_json::json!({}));
let envelope = test_envelope(&key, msg_type, serde_json::json!({}));
assert_eq!(
publish(&http, &relay_url, &envelope).await.status(),
reqwest::StatusCode::BAD_REQUEST,
@@ -126,7 +126,7 @@ async fn no_protocol_query_dedup() {
let relay_url = spawn_relay().await;
let http = client();
let key = Keypair::generate();
let envelope = Envelope::new(
let envelope = test_envelope(
&key,
TYPE_QUERY,
serde_json::json!({"qid": "q1", "text": "rust"}),
@@ -225,7 +225,7 @@ async fn no_aggregate_appeals() {
let sender = Keypair::generate();
let member = Keypair::generate();
let dispute = Envelope::new(
let dispute = test_envelope(
&sender,
"dispute",
serde_json::json!({"about": "counter", "reason": "unfair"}),
@@ -245,7 +245,7 @@ async fn no_aggregate_appeals() {
poll(&http, &relay_url, &member, 30).await.status(),
reqwest::StatusCode::NO_CONTENT
);
let aggregate = Envelope::new(
let aggregate = test_envelope(
&sender,
TYPE_AGGREGATE,
serde_json::to_value(AggregateBody {
@@ -304,7 +304,7 @@ async fn no_topic_channels() {
poll(&http, &relay_url, &bob, 30).await.status(),
reqwest::StatusCode::NO_CONTENT
);
let envelope = Envelope::new(
let envelope = test_envelope(
&alice,
TYPE_QUERY,
serde_json::json!({"qid": "q1", "text": "rust"}),
@@ -335,7 +335,7 @@ async fn no_broadcast_responses() {
let http = client();
let key = Keypair::generate();
for msg_type in [TYPE_RESPONSE, "evidence", "commons", "broadcast_response"] {
let envelope = Envelope::new(&key, msg_type, serde_json::json!({}));
let envelope = test_envelope(&key, msg_type, serde_json::json!({}));
assert_eq!(
publish(&http, &relay_url, &envelope).await.status(),
reqwest::StatusCode::BAD_REQUEST,
@@ -382,7 +382,7 @@ async fn no_supply_announce_firehose() {
let http = client();
let key = Keypair::generate();
for msg_type in ["announce", "supply", "documents", "publish"] {
let envelope = Envelope::new(&key, msg_type, serde_json::json!({}));
let envelope = test_envelope(&key, msg_type, serde_json::json!({}));
assert_eq!(
publish(&http, &relay_url, &envelope).await.status(),
reqwest::StatusCode::BAD_REQUEST,
@@ -404,7 +404,7 @@ async fn no_durable_replayable_broadcast_stream() {
let relay_url = spawn_relay().await;
let http = client();
let key = Keypair::generate();
let envelope = Envelope::new(
let envelope = test_envelope(
&key,
TYPE_QUERY,
serde_json::json!({"qid": "q1", "text": "rust"}),