commit 5fa8b5e962ce3c7f6a601b14383f5c94792e4e4f
parent 06b32347e6e2ce583fa9d00e64756f181d913013
Author: triesap <tyson@radroots.org>
Date: Mon, 3 Aug 2026 07:14:29 +0000
transport-nostr: complete package conformance coverage
- assert the concrete adapter implements both split transport interfaces
- freeze the trait-free feature-free curated public package boundary
- keep every mocked authentication network and cancellation matrix reachable
- qualify default no-default all-feature documentation and architecture lanes
Diffstat:
1 file changed, 87 insertions(+), 0 deletions(-)
diff --git a/crates/transport_nostr/tests/conformance.rs b/crates/transport_nostr/tests/conformance.rs
@@ -0,0 +1,87 @@
+use core::fmt::Debug;
+use radroots_transport::{EventSink, EventSource};
+use radroots_transport_nostr::{Config, Error, NostrTransport, RelayUrl, RelayUrlPolicy};
+
+const MANIFEST: &str = include_str!("../Cargo.toml");
+const ROOT: &str = include_str!("../src/lib.rs");
+const AUTH: &str = include_str!("../src/auth.rs");
+const RELAY: &str = include_str!("../src/relay.rs");
+const SINK: &str = include_str!("../src/sink.rs");
+const SOURCE: &str = include_str!("../src/source.rs");
+const STATUS: &str = include_str!("../src/status.rs");
+
+fn assert_adapter_contract<T>()
+where
+ T: EventSource + EventSink + Clone + Debug + Send + Sync,
+{
+}
+
+fn assert_public_value<T>()
+where
+ T: Clone + Debug + Send + Sync,
+{
+}
+
+#[test]
+fn public_types_and_split_spis_satisfy_the_adapter_contract() {
+ assert_adapter_contract::<NostrTransport>();
+ assert_public_value::<Config>();
+ assert_public_value::<RelayUrl>();
+ assert_public_value::<RelayUrlPolicy>();
+ assert_public_value::<Error>();
+}
+
+#[test]
+fn root_and_manifest_expose_no_traits_features_or_ambient_runtime() {
+ assert!(!MANIFEST.contains("[features]"));
+ assert!(MANIFEST.contains("publish = false"));
+ for forbidden in [
+ "pub trait ",
+ "pub mod ",
+ "tokio::runtime",
+ "tracing_subscriber",
+ "radroots_event_store",
+ "radroots_outbox",
+ "radroots_storage",
+ "radroots_sync",
+ ] {
+ assert!(
+ !ROOT.contains(forbidden),
+ "forbidden root witness `{forbidden}`"
+ );
+ assert!(
+ !MANIFEST.contains(forbidden),
+ "forbidden manifest witness `{forbidden}`"
+ );
+ }
+}
+
+#[test]
+fn complete_mocked_conformance_matrix_remains_reachable() {
+ let witnesses = [
+ (AUTH, "challenge_response_is_exact_bounded_and_single_use"),
+ (
+ AUTH,
+ "wrong_relay_timeout_rejection_and_no_signer_fail_closed",
+ ),
+ (RELAY, "address_policies_fail_closed_for_special_use_ranges"),
+ (SINK, "sink_returns_normalized_per_relay_partial_success"),
+ (SINK, "expired_delivery_deadline_performs_no_relay_work"),
+ (SINK, "dropping_an_unpolled_delivery_performs_no_relay_work"),
+ (
+ SOURCE,
+ "source_deduplicates_relays_reports_malformed_and_paginates",
+ ),
+ (SOURCE, "dropping_an_unpolled_fetch_performs_no_relay_work"),
+ (
+ STATUS,
+ "every_upstream_class_maps_to_stable_secret_safe_output",
+ ),
+ ];
+ for (source, witness) in witnesses {
+ assert!(
+ source.contains(witness),
+ "missing conformance witness `{witness}`"
+ );
+ }
+}