use std::time::Duration;
const TIMEOUT: Duration = Duration::from_secs(2);
async fn peer_pair(port: u16) -> (zenoh::Session, zenoh::Session) {
let listen = zenkey_fleet::session::open(&[], &[format!("tcp/127.0.0.1:{port}")], false)
.await
.expect("listener session");
let connect = zenkey_fleet::session::open(&[format!("tcp/127.0.0.1:{port}")], &[], false)
.await
.expect("connector session");
(listen, connect)
}
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
async fn an_admin_less_mesh_answers_empty_never_an_error() {
let (_serving, asking) = peer_pair(7513).await;
let routers = zenkey_fleet::routers(&asking, TIMEOUT)
.await
.expect("zero routers is a reading, not an error");
for r in &routers {
assert!(!r.zid.is_empty(), "a router row always names its node");
}
let storages = zenkey_fleet::storages(&asking, TIMEOUT)
.await
.expect("zero storages is a reading, not an error");
assert!(
storages.is_empty(),
"an in-process peer cannot host a storage manager: {storages:?}"
);
let declared = zenkey_fleet::declared_entities(&asking, TIMEOUT)
.await
.expect("an unreachable admin space is a reading, not an error");
match declared {
None => { }
Some(e) => {
for entity in &e.entities {
assert!(!entity.keyexpr.is_empty());
}
}
}
}
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
async fn coverage_with_no_storages_judges_rather_than_abstains() {
let (_serving, asking) = peer_pair(7514).await;
let storages = zenkey_fleet::storages(&asking, TIMEOUT).await.unwrap();
let slice = zenkey::parse_slice(
r#"
[registry]
version = "1.0"
app = "t"
convention = 1
[producer]
name = "tc"
[[subject]]
path = "health"
class = "state"
type = "Health"
ttl_s = 60
[[subject]]
path = "cpu"
class = "telemetry"
type = "Point"
"#,
)
.expect("fixture slice");
let slices = zenkey_fleet::SliceSet::from_slices(vec![slice]);
let rows = zenkey_fleet::state_coverage(&slices, "", &storages);
assert_eq!(rows.len(), 1, "state subjects only, never telemetry");
assert_eq!(rows[0].path, "health");
assert!(matches!(
rows[0].coverage,
zenkey_fleet::Coverage::Uncovered
));
assert_eq!(
rows[0].ttl_s,
Some(60),
"the ttl is what makes the RFC 04 §3.5 note readable"
);
}