#![allow(dead_code)]
use std::sync::atomic::{AtomicU64, Ordering};
use std::time::Duration;
pub const SETTLE: Duration = Duration::from_secs(20);
pub fn endpoint() -> String {
let held = std::net::TcpListener::bind("127.0.0.1:0").expect("bind an ephemeral port");
let port = held.local_addr().expect("local addr").port();
drop(held);
format!("tcp/127.0.0.1:{port}")
}
pub async fn peer_pair() -> (zenoh::Session, zenoh::Session) {
let endpoint = endpoint();
let listen = zenkey_fleet::bus::session::open(&[], std::slice::from_ref(&endpoint), false)
.await
.expect("listener session");
let connect = zenkey_fleet::bus::session::open(std::slice::from_ref(&endpoint), &[], false)
.await
.expect("connector session");
(listen, connect)
}
pub async fn timestamping_pair() -> (zenoh::Session, zenoh::Session) {
let endpoint = endpoint();
let mut cfg = zenoh::Config::default();
cfg.insert_json5("scouting/multicast/enabled", "false").ok();
cfg.insert_json5("timestamping/enabled", "true").ok();
cfg.insert_json5("listen/endpoints", &format!("[\"{endpoint}\"]"))
.ok();
let listen = zenoh::open(cfg).await.expect("timestamping session");
let connect = zenkey_fleet::bus::session::open(std::slice::from_ref(&endpoint), &[], false)
.await
.expect("connector session");
(listen, connect)
}
pub fn admin_config() -> std::path::PathBuf {
static NTH: AtomicU64 = AtomicU64::new(0);
let path = std::env::temp_dir().join(format!(
"zenkey-fleet-admin-{}-{}.json5",
std::process::id(),
NTH.fetch_add(1, Ordering::Relaxed)
));
std::fs::write(&path, r#"{ adminspace: { enabled: true } }"#).expect("write admin config");
path
}