atm0s_sdn_dht_discovery/lib.rs
1pub static DISCOVERY_SERVICE_ID: u8 = 0;
2
3mod behavior;
4mod connection_group;
5mod find_key_request;
6mod handler;
7pub(crate) mod kbucket;
8mod logic;
9mod msg;
10
11pub use behavior::{DiscoveryNetworkBehavior, DiscoveryNetworkBehaviorOpts};
12pub use msg::*;
13
14#[cfg(test)]
15mod tests {
16 // use crate::behavior::{DiscoveryNetworkBehavior, DiscoveryNetworkBehaviorOpts};
17 // use crate::msg::{DiscoveryBehaviorEvent, DiscoveryHandlerEvent, DiscoveryMsg};
18 // use crate::DISCOVERY_SERVICE_ID;
19 // use atm0s_sdn_identity::{ConnId, NodeAddr, Protocol};
20 // use atm0s_sdn_router::{ForceNodeRouter, RouteRule};
21 // use atm0s_sdn_network::convert_enum;
22 // use atm0s_sdn_network::mock::{MockInput, MockOutput, MockTransport};
23 // use atm0s_sdn_network::msg::TransportMsg;
24 // use atm0s_sdn_network::plane::{NetworkPlane, NetworkPlaneConfig};
25 // use std::sync::Arc;
26 // use std::time::Duration;
27 // use atm0s_sdn_utils::option_handle::OptionUtils;
28 // use atm0s_sdn_utils::SystemTimer;
29
30 // #[derive(convert_enum::From, convert_enum::TryInto, PartialEq, Debug)]
31 // enum ImplNetworkMsg {
32 // Discovery(DiscoveryMsg),
33 // }
34
35 // #[derive(convert_enum::From, convert_enum::TryInto)]
36 // enum ImplBehaviorEvent {
37 // Discovery(DiscoveryBehaviorEvent),
38 // }
39
40 // #[derive(convert_enum::From, convert_enum::TryInto)]
41 // enum ImplHandlerEvent {
42 // Discovery(DiscoveryHandlerEvent),
43 // }
44 // #[async_std::test]
45 // async fn bootstrap() {
46 // let neighbour1 = 1000;
47 // let neighbour1_addr = NodeAddr::from(Protocol::Memory(1000));
48
49 // let (mock, faker, output) = MockTransport::new();
50 // let transport = Box::new(mock);
51 // let timer = Arc::new(SystemTimer());
52
53 // let behavior = Box::new(DiscoveryNetworkBehavior::new(DiscoveryNetworkBehaviorOpts {
54 // local_node_id: 0,
55 // bootstrap_addrs: Some(vec![(neighbour1, neighbour1_addr.clone())]),
56 // timer: timer.clone(),
57 // }));
58
59 // let mut plane = NetworkPlane::<ImplBehaviorEvent, ImplHandlerEvent>::new(NetworkPlaneConfig {
60 // local_node_id: 0,
61 // tick_ms: 100,
62 // behavior: vec![behavior],
63 // transport,
64 // timer,
65 // router: Arc::new(ForceNodeRouter(ConnId::from_out(0, 0), neighbour1)),
66 // });
67
68 // let join = async_std::task::spawn(async move {
69 // plane.started();
70 // while let Ok(_) = plane.recv().await {}
71 // plane.stopped();
72 // });
73
74 // async_std::task::sleep(Duration::from_millis(1000)).await;
75 // assert_eq!(output.lock().pop_front(), Some(MockOutput::ConnectTo(neighbour1, neighbour1_addr.clone())));
76 // faker
77 // .send_blocking(MockInput::FakeOutgoingConnection(neighbour1, ConnId::from_out(0, 0), neighbour1_addr.clone()))
78 // .unwrap();
79 // async_std::task::sleep(Duration::from_millis(100)).await;
80 // assert_eq!(
81 // output.lock().pop_front(),
82 // Some(MockOutput::SendTo(
83 // neighbour1,
84 // ConnId::from_out(0, 0),
85 // TransportMsg::build(DISCOVERY_SERVICE_ID, RouteRule::ToNode(neighbour1), 0, &bincode::serialize(&DiscoveryMsg::FindKey(0, 0)).unwrap())
86 // ))
87 // );
88 // join.cancel().await.print_none("Should cancel join");
89 // }
90
91 // #[async_std::test]
92 // async fn auto_refresh() {
93 // let neighbour1 = 1000;
94 // let neighbour1_addr = NodeAddr::from(Protocol::Memory(1000));
95
96 // let (mock, faker, output) = MockTransport::new();
97 // let transport = Box::new(mock);
98 // let timer = Arc::new(SystemTimer());
99
100 // let behavior = Box::new(DiscoveryNetworkBehavior::new(DiscoveryNetworkBehaviorOpts {
101 // local_node_id: 0,
102 // bootstrap_addrs: None,
103 // timer: timer.clone(),
104 // }));
105
106 // let mut plane = NetworkPlane::<ImplBehaviorEvent, ImplHandlerEvent>::new(NetworkPlaneConfig {
107 // local_node_id: 0,
108 // tick_ms: 100,
109 // behavior: vec![behavior],
110 // transport,
111 // timer,
112 // router: Arc::new(ForceNodeRouter(ConnId::from_in(0, 0), neighbour1)),
113 // });
114
115 // let join = async_std::task::spawn(async move {
116 // plane.started();
117 // while let Ok(_) = plane.recv().await {}
118 // plane.stopped();
119 // });
120
121 // faker
122 // .send_blocking(MockInput::FakeIncomingConnection(neighbour1, ConnId::from_in(0, 0), neighbour1_addr.clone()))
123 // .unwrap();
124 // async_std::task::sleep(Duration::from_millis(200)).await;
125 // assert_eq!(
126 // output.lock().pop_front(),
127 // Some(MockOutput::SendTo(
128 // neighbour1,
129 // ConnId::from_in(0, 0),
130 // TransportMsg::build(DISCOVERY_SERVICE_ID, RouteRule::ToNode(neighbour1), 0, &bincode::serialize(&DiscoveryMsg::FindKey(0, 0)).unwrap())
131 // ))
132 // );
133 // join.cancel().await.print_none("Should cancel join");
134 // }
135}