1use dactor::node::NodeId;
2use dactor::system_actors::{CancelManager, NodeDirectory, PeerStatus, SpawnManager, WatchManager};
3use dactor::test_support::test_runtime::TestRuntime;
4use dactor::type_registry::TypeRegistry;
5
6pub struct MockNode {
11 pub node_id: NodeId,
12 pub runtime: TestRuntime,
13 pub spawn_manager: SpawnManager,
15 pub watch_manager: WatchManager,
17 pub cancel_manager: CancelManager,
19 pub node_directory: NodeDirectory,
21}
22
23impl MockNode {
24 pub fn new(node_id: NodeId) -> Self {
25 let runtime = TestRuntime::with_node_id(node_id.clone());
26 Self {
27 node_id,
28 runtime,
29 spawn_manager: SpawnManager::new(TypeRegistry::new()),
30 watch_manager: WatchManager::new(),
31 cancel_manager: CancelManager::new(),
32 node_directory: NodeDirectory::new(),
33 }
34 }
35
36 pub fn register_factory(
38 &mut self,
39 type_name: impl Into<String>,
40 factory: impl Fn(&[u8]) -> Result<Box<dyn std::any::Any + Send>, dactor::remote::SerializationError>
41 + Send
42 + Sync
43 + 'static,
44 ) {
45 self.spawn_manager
46 .type_registry_mut()
47 .register_factory(type_name, factory);
48 }
49
50 pub fn connect_peer(&mut self, peer: &NodeId) {
52 self.node_directory.add_peer(peer.clone(), None);
53 self.node_directory.set_status(peer, PeerStatus::Connected);
54 }
55
56 pub fn disconnect_peer(&mut self, peer: &NodeId) {
58 self.node_directory
59 .set_status(peer, PeerStatus::Disconnected);
60 }
61}