1pub mod utils;
2pub mod messages;
3pub mod routing;
4pub mod kad;
5pub mod kademlia;
6pub mod refresh;
7pub mod rpc;
8pub extern crate rlibbencode;
9
10#[cfg(test)]
19mod tests {
20
21 use std::net::{IpAddr, SocketAddr, ToSocketAddrs};
22 use std::thread::sleep;
23 use std::time::Duration;
24 use crate::kad::kademlia_base::KademliaBase;
25 use crate::kademlia::Kademlia;
26
27 #[test]
28 fn test() {
29 let kad = Kademlia::try_from("Kademlia").unwrap();
30 kad.get_routing_table().lock().unwrap().set_secure_only(false);
31 kad.get_server().lock().unwrap().set_allow_bogon(true);
32 kad.join(8080, SocketAddr::new(IpAddr::from([127, 0, 0, 1]), 8070)).unwrap();
34 loop {
39 sleep(Duration::from_secs(10));
40 let routing_table = kad.get_routing_table().lock().unwrap();
41 println!("CONSENSUS: {} {} {}",
42 routing_table.get_derived_uid().to_string(),
43 routing_table.get_consensus_external_address().to_string(),
44 routing_table.all_nodes().len());
45 }
46 }
47
48 fn resolve_hostname(hostname: &str) -> Result<IpAddr, std::io::Error> {
49 let addresses: Vec<SocketAddr> = (hostname, 0).to_socket_addrs()?.collect();
50 let ip_addresses: Vec<IpAddr> = addresses.into_iter().map(|addr| addr.ip()).collect();
51 Ok(*ip_addresses.get(0).unwrap())
52 }
53}