2019-02-26 17:36:54 +00:00
|
|
|
// VpnCloud - Peer-to-Peer VPN
|
2020-05-28 07:03:48 +00:00
|
|
|
// Copyright (C) 2015-2020 Dennis Schwerdel
|
2019-02-26 17:36:54 +00:00
|
|
|
// This software is licensed under GPL-3 or newer (see LICENSE.md)
|
|
|
|
|
|
|
|
use super::*;
|
|
|
|
|
|
|
|
#[test]
|
2019-03-01 15:36:18 +00:00
|
|
|
fn ethernet_delivers() {
|
2019-12-04 12:09:20 +00:00
|
|
|
let mut node1 = create_tap_node(false);
|
2019-02-26 17:36:54 +00:00
|
|
|
let node1_addr = addr!("1.2.3.4:5678");
|
2019-12-04 12:09:20 +00:00
|
|
|
let mut node2 = create_tap_node(false);
|
2019-02-26 17:36:54 +00:00
|
|
|
let node2_addr = addr!("2.3.4.5:6789");
|
|
|
|
|
|
|
|
node1.connect("2.3.4.5:6789").unwrap();
|
|
|
|
simulate!(node1 => node1_addr, node2 => node2_addr);
|
|
|
|
assert_connected!(node1, node2);
|
|
|
|
|
|
|
|
let payload = vec![2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5];
|
|
|
|
|
|
|
|
node1.device().put_inbound(payload.clone());
|
|
|
|
|
|
|
|
simulate!(node1 => node1_addr, node2 => node2_addr);
|
|
|
|
|
|
|
|
assert_eq!(Some(payload), node2.device().pop_outbound());
|
|
|
|
|
|
|
|
assert_clean!(node1, node2);
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
2019-03-01 15:36:18 +00:00
|
|
|
fn switch_learns() {
|
2019-12-04 12:09:20 +00:00
|
|
|
let mut node1 = create_tap_node(false);
|
2019-02-26 17:36:54 +00:00
|
|
|
let node1_addr = addr!("1.2.3.4:5678");
|
2019-12-04 12:09:20 +00:00
|
|
|
let mut node2 = create_tap_node(false);
|
2019-02-26 17:36:54 +00:00
|
|
|
let node2_addr = addr!("2.3.4.5:6789");
|
2019-12-04 12:09:20 +00:00
|
|
|
let mut node3 = create_tap_node(false);
|
2019-02-26 17:36:54 +00:00
|
|
|
let node3_addr = addr!("3.4.5.6:7890");
|
|
|
|
|
|
|
|
node1.connect("2.3.4.5:6789").unwrap();
|
|
|
|
node1.connect("3.4.5.6:7890").unwrap();
|
|
|
|
simulate!(node1 => node1_addr, node2 => node2_addr, node3 => node3_addr);
|
|
|
|
assert_connected!(node1, node2, node3);
|
|
|
|
|
|
|
|
let payload = vec![2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5];
|
|
|
|
|
2019-03-01 15:36:18 +00:00
|
|
|
// Nothing learnt so far, node1 broadcasts
|
|
|
|
|
2019-02-26 17:36:54 +00:00
|
|
|
node1.device().put_inbound(payload.clone());
|
|
|
|
|
|
|
|
simulate!(node1 => node1_addr, node2 => node2_addr, node3 => node3_addr);
|
|
|
|
|
|
|
|
assert_eq!(Some(&payload), node2.device().pop_outbound().as_ref());
|
|
|
|
assert_eq!(Some(&payload), node3.device().pop_outbound().as_ref());
|
|
|
|
|
|
|
|
let payload = vec![1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 5, 4, 3, 2, 1];
|
|
|
|
|
2019-03-01 15:36:18 +00:00
|
|
|
// Node 2 learned the address by receiving it, does not broadcast
|
|
|
|
|
2019-02-26 17:36:54 +00:00
|
|
|
node2.device().put_inbound(payload.clone());
|
|
|
|
|
|
|
|
simulate!(node1 => node1_addr, node2 => node2_addr, node3 => node3_addr);
|
|
|
|
|
|
|
|
assert_eq!(Some(&payload), node1.device().pop_outbound().as_ref());
|
|
|
|
assert_clean!(node3);
|
|
|
|
|
|
|
|
assert_clean!(node1, node2, node3);
|
2019-03-01 15:36:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn switch_honours_vlans() {
|
2019-12-04 08:32:35 +00:00
|
|
|
// TODO
|
2019-03-01 15:36:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn switch_forgets() {
|
2019-12-04 08:32:35 +00:00
|
|
|
// TODO
|
2019-03-01 15:36:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn router_delivers() {
|
2019-12-04 08:32:35 +00:00
|
|
|
// TODO
|
2019-03-01 15:36:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn router_drops_unknown_dest() {
|
2019-12-04 08:32:35 +00:00
|
|
|
// TODO
|
|
|
|
}
|