diff --git a/src/ethernet.rs b/src/ethernet.rs index 809c01e..be11906 100644 --- a/src/ethernet.rs +++ b/src/ethernet.rs @@ -12,7 +12,7 @@ use std::marker::PhantomData; use fnv::FnvHasher; use super::types::{Error, Table, Protocol, Address}; -use super::util::{TimeSource, Time, Duration, MockTimeSource}; +use super::util::{TimeSource, Time, Duration}; /// An ethernet frame dissector /// @@ -165,6 +165,7 @@ impl Table for SwitchTable { #[cfg(test)] use std::str::FromStr; #[cfg(test)] use std::net::ToSocketAddrs; +#[cfg(test)] use super::util::MockTimeSource; #[test] fn decode_frame_without_vlan() { diff --git a/src/tests/mod.rs b/src/tests/mod.rs index 2c1b01c..2d851b7 100644 --- a/src/tests/mod.rs +++ b/src/tests/mod.rs @@ -3,10 +3,11 @@ // This software is licensed under GPL-3 or newer (see LICENSE.md) #[macro_use] mod helper; -mod connect; +mod peers; mod payload; pub use std::net::SocketAddr; +use std::sync::atomic::{Ordering, AtomicUsize}; pub use super::ethernet::{self, SwitchTable}; pub use super::util::MockTimeSource; @@ -26,9 +27,13 @@ type TapTestNode = TestNode>; type TunTestNode = TestNode; +thread_local! { + static NEXT_PORT: AtomicUsize = AtomicUsize::new(1); +} + fn create_tap_node() -> TapTestNode { TestNode::new( - &Config::default(), + &Config { port: NEXT_PORT.with(|p| p.fetch_add(1, Ordering::Relaxed)) as u16, ..Config::default() }, MockDevice::new(), SwitchTable::new(1800, 10), true, true, vec![], Crypto::None, None @@ -37,7 +42,7 @@ fn create_tap_node() -> TapTestNode { fn create_tun_node(addresses: Vec) -> TunTestNode { TestNode::new( - &Config::default(), + &Config { port: NEXT_PORT.with(|p| p.fetch_add(1, Ordering::Relaxed)) as u16, ..Config::default() }, MockDevice::new(), RoutingTable::new(), false, false, addresses, Crypto::None, None diff --git a/src/tests/payload.rs b/src/tests/payload.rs index 41bda24..ce748a0 100644 --- a/src/tests/payload.rs +++ b/src/tests/payload.rs @@ -5,7 +5,7 @@ use super::*; #[test] -fn ethernet_send() { +fn ethernet_delivers() { let mut node1 = create_tap_node(); let node1_addr = addr!("1.2.3.4:5678"); let mut node2 = create_tap_node(); @@ -27,7 +27,7 @@ fn ethernet_send() { } #[test] -fn learning_switch() { +fn switch_learns() { let mut node1 = create_tap_node(); let node1_addr = addr!("1.2.3.4:5678"); let mut node2 = create_tap_node(); @@ -42,6 +42,8 @@ fn learning_switch() { let payload = vec![2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5]; + // Nothing learnt so far, node1 broadcasts + node1.device().put_inbound(payload.clone()); simulate!(node1 => node1_addr, node2 => node2_addr, node3 => node3_addr); @@ -51,6 +53,8 @@ fn learning_switch() { let payload = vec![1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 5, 4, 3, 2, 1]; + // Node 2 learned the address by receiving it, does not broadcast + node2.device().put_inbound(payload.clone()); simulate!(node1 => node1_addr, node2 => node2_addr, node3 => node3_addr); @@ -59,4 +63,24 @@ fn learning_switch() { assert_clean!(node3); assert_clean!(node1, node2, node3); +} + +#[test] +fn switch_honours_vlans() { + //TODO +} + +#[test] +fn switch_forgets() { + //TODO +} + +#[test] +fn router_delivers() { + //TODO +} + +#[test] +fn router_drops_unknown_dest() { + //TODO } \ No newline at end of file diff --git a/src/tests/connect.rs b/src/tests/peers.rs similarity index 88% rename from src/tests/connect.rs rename to src/tests/peers.rs index 49f3b48..d85b69b 100644 --- a/src/tests/connect.rs +++ b/src/tests/peers.rs @@ -90,5 +90,46 @@ fn cross_connect() { assert_connected!(node3, node2); // transient connections 2nd degree - assert_connected!(node1, node4); + assert_connected!(node2, node4); } + +#[test] +fn connect_via_beacons() { + //TODO +} + +#[test] +fn reconnect_after_timeout() { + //TODO +} + +#[test] +fn lost_init1() { + //TODO +} + +#[test] +fn wrong_magic() { + //TODO +} + +#[test] +fn peer_exchange() { + //TODO +} + +#[test] +fn lost_peer_exchange() { + //TODO +} + +#[test] +fn remove_dead_peers() { + //TODO +} + +#[test] +fn update_primary_address() { + //TODO +} + diff --git a/src/util.rs b/src/util.rs index 1d9face..927289c 100644 --- a/src/util.rs +++ b/src/util.rs @@ -129,6 +129,7 @@ pub fn resolve(addr: Addr) -> Result { {