From 43382bbe3305cfef2e18f96292f2b19ba16bad69 Mon Sep 17 00:00:00 2001 From: Dennis Schwerdel Date: Tue, 20 Oct 2020 00:19:38 +0200 Subject: [PATCH] More tests --- src/table.rs | 4 +- src/tests/payload.rs | 107 +++++++++++++++++++++++++++++++++++++++++-- src/tests/peers.rs | 10 ++++ 3 files changed, 116 insertions(+), 5 deletions(-) diff --git a/src/table.rs b/src/table.rs index caefa1e..8cd3d6a 100644 --- a/src/table.rs +++ b/src/table.rs @@ -9,7 +9,7 @@ use std::{ use crate::{ types::{Address, Range, RangeList}, - util::{Duration, Time, TimeSource, addr_nice} + util::{addr_nice, Duration, Time, TimeSource} }; @@ -132,3 +132,5 @@ impl ClaimTable { Ok(()) } } + +// TODO: test diff --git a/src/tests/payload.rs b/src/tests/payload.rs index 41c582b..355ef87 100644 --- a/src/tests/payload.rs +++ b/src/tests/payload.rs @@ -5,7 +5,7 @@ use super::*; #[test] -fn ethernet_delivers() { +fn switch_delivers() { let config = Config { device_type: Type::Tap, ..Config::default() }; let mut sim = TapSimulator::new(); let node1 = sim.add_node(false, &config); @@ -66,20 +66,119 @@ fn switch_learns() { #[test] fn switch_honours_vlans() { - // TODO Test + let config = Config { device_type: Type::Tap, ..Config::default() }; + let mut sim = TapSimulator::new(); + let node1 = sim.add_node(false, &config); + let node2 = sim.add_node(false, &config); + let node3 = sim.add_node(false, &config); + + sim.connect(node1, node2); + sim.connect(node1, node3); + sim.connect(node2, node3); + sim.simulate_all_messages(); + assert!(sim.is_connected(node1, node2)); + assert!(sim.is_connected(node2, node1)); + assert!(sim.is_connected(node1, node3)); + assert!(sim.is_connected(node3, node1)); + assert!(sim.is_connected(node2, node3)); + assert!(sim.is_connected(node3, node2)); + + let payload = vec![2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 0x81, 0, 0, 0x67, 1, 2, 3, 4, 5]; + + // Nothing learnt so far, node1 broadcasts + + sim.put_payload(node1, payload.clone()); + sim.simulate_all_messages(); + + assert_eq!(Some(payload.clone()), sim.pop_payload(node2)); + assert_eq!(Some(payload), sim.pop_payload(node3)); + + let payload = vec![1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 0x81, 0, 0, 0x67, 5, 4, 3, 2, 1]; + + // Node 2 learned the address by receiving it, does not broadcast + + sim.put_payload(node2, payload.clone()); + sim.simulate_all_messages(); + + assert_eq!(Some(payload), sim.pop_payload(node1)); + assert_eq!(None, sim.pop_payload(node3)); + + let payload = vec![1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 0x81, 0, 0, 0x68, 5, 4, 3, 2, 1]; + + // Different VLANs, node 2 does not learn, still broadcasts + + sim.put_payload(node2, payload.clone()); + sim.simulate_all_messages(); + + assert_eq!(Some(payload.clone()), sim.pop_payload(node1)); + assert_eq!(Some(payload), sim.pop_payload(node3)); } #[test] +#[ignore] fn switch_forgets() { // TODO Test + unimplemented!() } #[test] fn router_delivers() { - // TODO Test + let config1 = Config { + device_type: Type::Tun, + auto_claim: false, + claims: vec!["1.1.1.1/32".to_string()], + ..Config::default() + }; + let config2 = Config { + device_type: Type::Tun, + auto_claim: false, + claims: vec!["2.2.2.2/32".to_string()], + ..Config::default() + }; + let mut sim = TunSimulator::new(); + let node1 = sim.add_node(false, &config1); + let node2 = sim.add_node(false, &config2); + + sim.connect(node1, node2); + sim.simulate_all_messages(); + assert!(sim.is_connected(node1, node2)); + assert!(sim.is_connected(node2, node1)); + + let payload = vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2]; + + sim.put_payload(node1, payload.clone()); + sim.simulate_all_messages(); + + assert_eq!(Some(payload), sim.pop_payload(node2)); } #[test] fn router_drops_unknown_dest() { - // TODO Test + let config1 = Config { + device_type: Type::Tun, + auto_claim: false, + claims: vec!["1.1.1.1/32".to_string()], + ..Config::default() + }; + let config2 = Config { + device_type: Type::Tun, + auto_claim: false, + claims: vec!["2.2.2.2/32".to_string()], + ..Config::default() + }; + let mut sim = TunSimulator::new(); + let node1 = sim.add_node(false, &config1); + let node2 = sim.add_node(false, &config2); + + sim.connect(node1, node2); + sim.simulate_all_messages(); + assert!(sim.is_connected(node1, node2)); + assert!(sim.is_connected(node2, node1)); + + let payload = vec![0x40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 3, 3, 3, 3]; + + sim.put_payload(node1, payload); + sim.simulate_all_messages(); + + assert_eq!(None, sim.pop_payload(node2)); } diff --git a/src/tests/peers.rs b/src/tests/peers.rs index 265ee94..a073580 100644 --- a/src/tests/peers.rs +++ b/src/tests/peers.rs @@ -144,26 +144,36 @@ fn lost_init_peng() { } #[test] +#[ignore] fn peer_exchange() { // TODO Test + unimplemented!() } #[test] +#[ignore] fn lost_peer_exchange() { // TODO Test + unimplemented!() } #[test] +#[ignore] fn remove_dead_peers() { // TODO Test + unimplemented!() } #[test] +#[ignore] fn update_primary_address() { // TODO Test + unimplemented!() } #[test] +#[ignore] fn automatic_peer_timeout() { // TODO Test + unimplemented!() }