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}