lib

Core libraries for Radroots
git clone https://radroots.dev/git/lib.git
Log | Files | Refs | README

commit 15f157e6d7bb2e848d75c0efffa3bb4c9166d70f
parent e17c55cbed11a0742cbb880781441952d56ed0fa
Author: triesap <tyson@radroots.org>
Date:   Sat, 18 Jul 2026 09:59:11 +0000

transport_reticulum: close semantic contract coverage

- Exercise endpoint, agent, profile, and fetch validation boundaries.
- Verify direct and core transport facades for both preview behaviors.
- Cover target guards and error translations without adding runtime hooks.
- Preserve strict no-std linting while reaching full policy coverage.

Diffstat:
Mcrates/transport_reticulum/src/lib.rs | 225+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 225 insertions(+), 0 deletions(-)

diff --git a/crates/transport_reticulum/src/lib.rs b/crates/transport_reticulum/src/lib.rs @@ -1,5 +1,6 @@ #![no_std] #![forbid(unsafe_code)] +#![cfg_attr(coverage_nightly, feature(coverage_attribute))] extern crate alloc; @@ -460,3 +461,227 @@ fn reticulum_outcome(behavior: RadrootsReticulumBehavior) -> RadrootsTransportOu ); outcome } + +#[cfg(test)] +#[cfg_attr(coverage_nightly, coverage(off))] +mod tests { + use super::*; + use alloc::format; + use alloc::string::ToString; + use alloc::vec; + use futures::executor::block_on; + use radroots_transport::{ + RadrootsTransportPayload, RadrootsTransportSatisfactionPolicy, RadrootsTransportTargetSet, + }; + + fn reticulum_target() -> RadrootsTransportTarget { + RadrootsTransportTarget::reticulum().expect("Reticulum target") + } + + fn delivery_request(targets: Vec<RadrootsTransportTarget>) -> RadrootsTransportDeliveryRequest { + RadrootsTransportDeliveryRequest::new( + "delivery", + RadrootsTransportPayload::mesh_frame_cbor("message", [1_u8, 2, 3]) + .expect("mesh payload"), + RadrootsTransportTargetSet::new(targets).expect("target set"), + RadrootsTransportSatisfactionPolicy::any_accepted(), + ) + } + + #[test] + #[allow(clippy::unnecessary_to_owned)] + fn endpoint_profile_and_fetch_models_cover_owned_and_borrowed_boundaries() { + let endpoint = + RadrootsReticulumEndpoint::parse(RADROOTS_RETICULUM_ENDPOINT_URI).expect("endpoint"); + assert_eq!(endpoint.as_str(), RADROOTS_RETICULUM_ENDPOINT_URI); + assert_eq!(format!("{endpoint}"), RADROOTS_RETICULUM_ENDPOINT_URI); + assert_eq!( + endpoint.clone().into_string(), + RADROOTS_RETICULUM_ENDPOINT_URI + ); + assert_eq!( + RadrootsReticulumEndpoint::default(), + RadrootsReticulumEndpoint::parse(RADROOTS_RETICULUM_ENDPOINT_URI.to_string()) + .expect("owned endpoint") + ); + assert!(RadrootsReticulumEndpoint::parse("reticulum:other").is_err()); + + for invalid in [ + "", + " reticulum-agent:local", + "reticulum-agent:local ", + "reticulum-agent:\tlocal", + "other:local", + RETICULUM_AGENT_ENDPOINT_PREFIX, + ] { + assert!(RadrootsReticulumAgentEndpoint::parse(invalid).is_err()); + } + let agent = + RadrootsReticulumAgentEndpoint::parse("reticulum-agent:local").expect("agent endpoint"); + assert_eq!(agent.as_str(), "reticulum-agent:local"); + assert_eq!(format!("{agent}"), "reticulum-agent:local"); + assert_eq!(agent.clone().into_string(), "reticulum-agent:local"); + assert_eq!( + RadrootsReticulumAgentEndpoint::parse("reticulum-agent:owned".to_string()) + .expect("owned agent") + .as_str(), + "reticulum-agent:owned" + ); + + let scope = RadrootsTransportMeshScopeId::parse("farm.mesh").expect("scope"); + for invalid in ["", " ", "profile id"] { + assert!( + RadrootsReticulumProfile::new( + invalid, + endpoint.clone(), + scope.clone(), + None, + RadrootsReticulumBehavior::RejectDeliveryAttempts, + ) + .is_err() + ); + } + let profile = RadrootsReticulumProfile::new( + "transport.reticulum.farm".to_string(), + endpoint.clone(), + scope.clone(), + Some(agent.clone()), + RadrootsReticulumBehavior::RejectDeliveryAttempts, + ) + .expect("profile") + .with_behavior(RadrootsReticulumBehavior::DeferDeliveryPlans) + .with_agent_endpoint(agent.clone()); + assert_eq!(profile.profile_id(), "transport.reticulum.farm"); + assert_eq!(profile.endpoint(), &endpoint); + assert_eq!(profile.scope(), &scope); + assert_eq!(profile.agent_endpoint(), Some(&agent)); + assert_eq!( + profile.behavior(), + RadrootsReticulumBehavior::DeferDeliveryPlans + ); + assert_eq!( + profile.destination(), + &profile.capability_report().destination + ); + assert_eq!(profile.status().behavior, profile.behavior()); + + let default_profile = RadrootsReticulumProfile::deferred_until_implemented(); + assert_eq!(default_profile, RadrootsReticulumProfile::default()); + assert!(default_profile.agent_endpoint().is_none()); + + assert!(RadrootsReticulumFetchRequest::new("invalid", 0).is_err()); + let fetch = + RadrootsReticulumFetchRequest::new("fetch".to_string(), 1).expect("fetch request"); + assert_eq!(fetch.request_id, "fetch"); + } + + #[test] + fn transport_facades_and_private_guards_cover_all_contract_outcomes() { + let rejecting = RadrootsReticulumTransport::default(); + assert_eq!( + rejecting.profile().behavior(), + RadrootsReticulumBehavior::RejectDeliveryAttempts + ); + assert_eq!(rejecting.status(), rejecting.profile().status()); + let receipt = rejecting + .deliver(delivery_request(vec![reticulum_target()])) + .expect("direct delivery"); + assert_eq!(receipt.target_receipts.len(), 1); + assert_eq!( + rejecting + .fetch(RadrootsReticulumFetchRequest::new("direct-fetch", 1).expect("fetch")) + .expect("direct fetch") + .observed_event_count, + 0 + ); + assert!( + rejecting + .fetch(RadrootsReticulumFetchRequest { + request_id: "invalid-fetch".to_owned(), + max_events: 0, + }) + .is_err() + ); + + assert_eq!( + RadrootsTransport::transport_kind(&rejecting), + RadrootsTransportKind::Reticulum + ); + assert!(block_on(RadrootsTransport::status(&rejecting)).is_ok()); + assert!( + block_on(RadrootsTransport::deliver( + &rejecting, + delivery_request(vec![reticulum_target()]), + )) + .is_ok() + ); + let core_fetch = RadrootsTransportFetchRequest::new( + "core-fetch", + RadrootsTransportTargetSet::new(vec![reticulum_target()]).expect("target set"), + ); + assert!(block_on(RadrootsTransport::fetch(&rejecting, core_fetch)).is_ok()); + + let deferring = RadrootsReticulumTransport::new( + RadrootsReticulumProfile::default() + .with_behavior(RadrootsReticulumBehavior::DeferDeliveryPlans), + ); + assert_eq!( + deferring + .deliver(delivery_request(vec![reticulum_target()])) + .expect("deferred delivery") + .target_receipts[0] + .outcome + .kind, + RadrootsTransportOutcomeKind::DeferredUntilImplemented + ); + + assert_eq!( + reticulum_error_to_transport_error(RadrootsReticulumError::InvalidEndpoint), + RadrootsTransportError::InvalidTargetUri + ); + assert_eq!( + reticulum_error_to_transport_error(RadrootsReticulumError::NonReticulumTarget), + RadrootsTransportError::InvalidTargetUri + ); + for error in [ + RadrootsReticulumError::InvalidAgentEndpoint, + RadrootsReticulumError::InvalidProfileId, + RadrootsReticulumError::InvalidFetchLimit, + ] { + assert_eq!( + reticulum_error_to_transport_error(error), + RadrootsTransportError::InvalidTransportKind + ); + } + + assert!(ensure_reticulum_targets(&[]).is_ok()); + let mut wrong_kind = reticulum_target(); + wrong_kind.kind = RadrootsTransportKind::Local; + assert_eq!( + ensure_reticulum_targets(&[wrong_kind]), + Err(RadrootsReticulumError::NonReticulumTarget) + ); + let mut wrong_uri = reticulum_target(); + wrong_uri.uri = radroots_transport::RadrootsTransportTargetUri::parse("reticulum:other") + .expect("syntactically valid wrong URI"); + assert_eq!( + ensure_reticulum_targets(&[wrong_uri]), + Err(RadrootsReticulumError::InvalidEndpoint) + ); + let mut missing_scope = reticulum_target(); + missing_scope.scope = None; + assert_eq!( + ensure_reticulum_targets(&[missing_scope]), + Err(RadrootsReticulumError::InvalidEndpoint) + ); + + for behavior in [ + RadrootsReticulumBehavior::RejectDeliveryAttempts, + RadrootsReticulumBehavior::DeferDeliveryPlans, + ] { + let outcome = reticulum_outcome(behavior); + assert!(outcome.code.is_some()); + assert!(outcome.message.is_some()); + } + } +}