use std::sync::Arc;
use std::time::Duration;
use net_sdk::dataforts::MeshBlobAdapter;
use net_sdk::deck::{AdminVerifier, DeckClient, OperatorIdentity, OperatorRegistry};
use net_sdk::meshos::{EntityKeypair, MeshOsConfig, MeshOsDaemonSdk, NodeId};
pub struct Harness {
_sdk: MeshOsDaemonSdk,
deck: Arc<DeckClient>,
blob_adapters: Vec<Arc<MeshBlobAdapter>>,
this_node: NodeId,
}
impl Harness {
pub fn deck(&self) -> Arc<DeckClient> {
Arc::clone(&self.deck)
}
pub fn blob_adapters(&self) -> Vec<Arc<MeshBlobAdapter>> {
self.blob_adapters.clone()
}
pub fn this_node(&self) -> NodeId {
self.this_node
}
}
pub async fn spawn() -> color_eyre::Result<Harness> {
let mut cfg = MeshOsConfig::default();
cfg.this_node = 0x0001;
cfg.tick_interval = Duration::from_millis(250);
let this_node = cfg.this_node;
let dispatcher = Arc::new(net_sdk::meshos::LoggingDispatcher::new());
let operator_keypair = EntityKeypair::generate();
let mut registry = OperatorRegistry::new();
registry.register(&operator_keypair);
let verifier = Arc::new(AdminVerifier::new(Arc::new(registry), 1));
let sdk = MeshOsDaemonSdk::start_with_verifier_and_migration_source(
cfg,
dispatcher,
Some(verifier),
None,
);
let identity = OperatorIdentity::from_keypair(operator_keypair);
let deck = Arc::new(DeckClient::from_runtime(sdk.runtime(), identity));
Ok(Harness {
_sdk: sdk,
deck,
blob_adapters: Vec::new(),
this_node,
})
}