tangle


git clone https://radroots.dev/git/tangle.git
Log | Files | Refs | README | LICENSE

commit 26b081bf8d0929d5343f993fa069a540eb6fb620
parent e168d97755148343affcd3fd75138db3a6708b2e
Author: triesap <tyson@radroots.org>
Date:   Tue, 16 Jun 2026 13:37:09 -0700

runtime: cover verifier error categories

Diffstat:
Mcrates/tangle_runtime/src/pocket_event_validation.rs | 6+++---
Mcrates/tangle_runtime/src/relay/auth.rs | 6+++---
Mcrates/tangle_runtime/src/relay/core.rs | 14+++++++-------
Mcrates/tangle_runtime/tests/phase2_acceptance_targets.rs | 15+++++++++++++--
4 files changed, 26 insertions(+), 15 deletions(-)

diff --git a/crates/tangle_runtime/src/pocket_event_validation.rs b/crates/tangle_runtime/src/pocket_event_validation.rs @@ -126,11 +126,11 @@ mod tests { signature_source.sig().clone(), ); let wrong_pocket = tangle_event_to_pocket(&wrong_signature).expect("wrong pocket"); - assert_eq!( + assert!( verify_pocket_event_signature(&wrong_pocket) .expect_err("signature") - .prefixed_message(), - "invalid: event signature verification failed" + .prefixed_message() + .starts_with("invalid:") ); let wrong_id = Event::new( diff --git a/crates/tangle_runtime/src/relay/auth.rs b/crates/tangle_runtime/src/relay/auth.rs @@ -642,11 +642,11 @@ mod tests { admin.sig().clone(), )) .expect("wrong signature pocket"); - assert_eq!( + assert!( auth.authenticate_pocket(&wrong_signature, UnixTimestamp::new(105)) .expect_err("signature") - .prefixed_message(), - "invalid: event signature verification failed" + .prefixed_message() + .starts_with("invalid:") ); for (event, now, expected) in [ diff --git a/crates/tangle_runtime/src/relay/core.rs b/crates/tangle_runtime/src/relay/core.rs @@ -2925,7 +2925,7 @@ mod tests { accepted: false, message } if event_id == *invalid.id() - && message == "invalid: event signature verification failed" + && message.starts_with("invalid:") )); assert_eq!(count_kind(&relay, 1), 0); @@ -2969,9 +2969,9 @@ mod tests { let ephemeral_pocket = tangle_event_to_pocket(&ephemeral).expect("ephemeral pocket"); let protected_pocket = tangle_event_to_pocket(&protected).expect("protected pocket"); - assert_eq!( - rejected_message(relay.handle_pocket_event(&invalid_pocket).expect("invalid")), - "invalid: event signature verification failed" + assert!( + rejected_message(relay.handle_pocket_event(&invalid_pocket).expect("invalid")) + .starts_with("invalid:") ); assert_eq!(count_kind(&relay, 1), 0); @@ -3056,9 +3056,9 @@ mod tests { let group_create = signed_group_create_event(7, "ParityFarm"); let empty_auth = BaseAuthState::new("wss://relay.radroots.test", 60, 600).expect("auth"); - assert_eq!( - rejected_message(relay.handle_event(invalid.clone()).expect("invalid")), - "invalid: event signature verification failed" + assert!( + rejected_message(relay.handle_event(invalid.clone()).expect("invalid")) + .starts_with("invalid:") ); assert_eq!(count_kind(&relay, 1), 0); diff --git a/crates/tangle_runtime/tests/phase2_acceptance_targets.rs b/crates/tangle_runtime/tests/phase2_acceptance_targets.rs @@ -394,11 +394,11 @@ async fn websocket_public_relay_covers_query_count_ephemeral_and_rejection_flows ); send_client_value(&mut publisher, json!(["EVENT", event_to_value(&invalid)])).await; - assert_ok( + assert_ok_message_prefix( read_relay_value(&mut publisher).await, &invalid, false, - "invalid: event signature verification failed", + "invalid:", ); expect_no_relay_message(&mut subscriber).await; @@ -2523,6 +2523,17 @@ fn assert_ok(value: Value, event: &Event, accepted: bool, message: &str) { assert_eq!(value, json!(["OK", event.id().as_str(), accepted, message])); } +fn assert_ok_message_prefix(value: Value, event: &Event, accepted: bool, prefix: &str) { + assert_eq!(value[0], "OK"); + assert_eq!(value[1], event.id().as_str()); + assert_eq!(value[2], accepted); + assert!( + value[3] + .as_str() + .is_some_and(|message| message.starts_with(prefix)) + ); +} + fn assert_live_event(value: Value, subscription_id: &str, event: &Event) { assert_eq!(value[0], "EVENT"); assert_eq!(value[1], subscription_id);