2019-02-26 17:36:54 +00:00
|
|
|
// VpnCloud - Peer-to-Peer VPN
|
2021-02-08 09:11:20 +00:00
|
|
|
// Copyright (C) 2015-2021 Dennis Schwerdel
|
2019-02-26 17:36:54 +00:00
|
|
|
// This software is licensed under GPL-3 or newer (see LICENSE.md)
|
|
|
|
|
2021-02-08 16:30:58 +00:00
|
|
|
use super::common::*;
|
2019-02-26 17:36:54 +00:00
|
|
|
|
|
|
|
#[test]
|
2021-03-02 15:31:40 +00:00
|
|
|
async fn direct_connect() {
|
2020-09-24 17:48:13 +00:00
|
|
|
let config = Config::default();
|
|
|
|
let mut sim = TapSimulator::new();
|
2021-03-02 15:31:40 +00:00
|
|
|
let node1 = sim.add_node(false, &config).await;
|
|
|
|
let node2 = sim.add_node(false, &config).await;
|
2020-09-24 17:48:13 +00:00
|
|
|
|
|
|
|
sim.connect(node1, node2);
|
2021-03-02 15:31:40 +00:00
|
|
|
sim.simulate_all_messages().await;
|
2020-09-24 17:48:13 +00:00
|
|
|
assert!(sim.is_connected(node1, node2));
|
|
|
|
assert!(sim.is_connected(node2, node1));
|
2019-02-26 17:36:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
2021-03-02 15:31:40 +00:00
|
|
|
async fn direct_connect_unencrypted() {
|
2020-09-24 17:48:13 +00:00
|
|
|
let config = Config {
|
|
|
|
crypto: CryptoConfig { algorithms: vec!["plain".to_string()], ..CryptoConfig::default() },
|
|
|
|
..Config::default()
|
|
|
|
};
|
|
|
|
let mut sim = TapSimulator::new();
|
2021-03-02 15:31:40 +00:00
|
|
|
let node1 = sim.add_node(false, &config).await;
|
|
|
|
let node2 = sim.add_node(false, &config).await;
|
2020-09-24 17:48:13 +00:00
|
|
|
|
|
|
|
sim.connect(node1, node2);
|
2021-03-02 15:31:40 +00:00
|
|
|
sim.simulate_all_messages().await;
|
2020-09-24 17:48:13 +00:00
|
|
|
assert!(sim.is_connected(node1, node2));
|
|
|
|
assert!(sim.is_connected(node2, node1));
|
2019-02-26 17:36:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
2021-03-02 15:31:40 +00:00
|
|
|
async fn cross_connect() {
|
2020-09-24 17:48:13 +00:00
|
|
|
let config = Config::default();
|
|
|
|
let mut sim = TapSimulator::new();
|
2021-03-02 15:31:40 +00:00
|
|
|
let node1 = sim.add_node(false, &config).await;
|
|
|
|
let node2 = sim.add_node(false, &config).await;
|
|
|
|
let node3 = sim.add_node(false, &config).await;
|
2020-09-24 17:48:13 +00:00
|
|
|
|
|
|
|
sim.connect(node1, node2);
|
|
|
|
sim.connect(node1, node3);
|
2021-03-02 15:31:40 +00:00
|
|
|
sim.simulate_all_messages().await;
|
2020-09-24 17:48:13 +00:00
|
|
|
|
2021-03-02 15:31:40 +00:00
|
|
|
sim.simulate_time(120).await;
|
2020-09-24 17:48:13 +00:00
|
|
|
|
|
|
|
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));
|
2019-03-01 15:36:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
2021-03-02 15:31:40 +00:00
|
|
|
async fn connect_via_beacons() {
|
2020-09-24 17:48:13 +00:00
|
|
|
let mut sim = TapSimulator::new();
|
2019-03-03 13:56:59 +00:00
|
|
|
let beacon_path = "target/.vpncloud_test";
|
2020-09-24 17:48:13 +00:00
|
|
|
let config1 = Config { beacon_store: Some(beacon_path.to_string()), ..Default::default() };
|
2021-03-02 15:31:40 +00:00
|
|
|
let node1 = sim.add_node(false, &config1).await;
|
2020-09-24 17:48:13 +00:00
|
|
|
let config2 = Config { beacon_load: Some(beacon_path.to_string()), ..Default::default() };
|
2021-03-02 15:31:40 +00:00
|
|
|
let node2 = sim.add_node(false, &config2).await;
|
2020-09-24 17:48:13 +00:00
|
|
|
|
|
|
|
sim.set_time(100);
|
2021-03-02 15:31:40 +00:00
|
|
|
sim.trigger_node_housekeep(node1).await;
|
|
|
|
sim.trigger_node_housekeep(node2).await;
|
|
|
|
sim.simulate_all_messages().await;
|
2020-09-24 17:48:13 +00:00
|
|
|
|
|
|
|
assert!(sim.is_connected(node1, node2));
|
|
|
|
assert!(sim.is_connected(node2, node1));
|
2019-03-01 15:36:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
2021-03-02 15:31:40 +00:00
|
|
|
async fn reconnect_after_timeout() {
|
2020-09-24 17:48:13 +00:00
|
|
|
let config = Config::default();
|
|
|
|
let mut sim = TapSimulator::new();
|
2021-03-02 15:31:40 +00:00
|
|
|
let node1 = sim.add_node(false, &config).await;
|
|
|
|
let node2 = sim.add_node(false, &config).await;
|
2020-09-24 17:48:13 +00:00
|
|
|
|
|
|
|
sim.connect(node1, node2);
|
2021-03-02 15:31:40 +00:00
|
|
|
sim.simulate_all_messages().await;
|
2020-09-24 17:48:13 +00:00
|
|
|
assert!(sim.is_connected(node1, node2));
|
|
|
|
assert!(sim.is_connected(node2, node1));
|
|
|
|
|
|
|
|
sim.set_time(5000);
|
2021-03-02 15:31:40 +00:00
|
|
|
sim.trigger_housekeep().await;
|
2020-09-24 17:48:13 +00:00
|
|
|
assert!(!sim.is_connected(node1, node2));
|
|
|
|
assert!(!sim.is_connected(node2, node1));
|
|
|
|
|
2021-03-02 15:31:40 +00:00
|
|
|
sim.simulate_all_messages().await;
|
2020-09-24 17:48:13 +00:00
|
|
|
assert!(sim.is_connected(node1, node2));
|
|
|
|
assert!(sim.is_connected(node2, node1));
|
2019-03-01 15:36:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
2021-03-02 15:31:40 +00:00
|
|
|
async fn lost_init_ping() {
|
2020-09-24 17:48:13 +00:00
|
|
|
let config = Config::default();
|
|
|
|
let mut sim = TapSimulator::new();
|
2021-03-02 15:31:40 +00:00
|
|
|
let node1 = sim.add_node(false, &config).await;
|
|
|
|
let node2 = sim.add_node(false, &config).await;
|
2020-09-24 17:48:13 +00:00
|
|
|
|
|
|
|
sim.connect(node1, node2);
|
|
|
|
sim.drop_message(); // drop init ping
|
|
|
|
|
2021-03-02 15:31:40 +00:00
|
|
|
sim.simulate_time(120).await;
|
2020-09-24 17:48:13 +00:00
|
|
|
assert!(sim.is_connected(node1, node2));
|
|
|
|
assert!(sim.is_connected(node2, node1));
|
2019-03-01 15:36:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
2021-03-02 15:31:40 +00:00
|
|
|
async fn lost_init_pong() {
|
2020-09-24 17:48:13 +00:00
|
|
|
let config = Config::default();
|
|
|
|
let mut sim = TapSimulator::new();
|
2021-03-02 15:31:40 +00:00
|
|
|
let node1 = sim.add_node(false, &config).await;
|
|
|
|
let node2 = sim.add_node(false, &config).await;
|
2020-09-24 17:48:13 +00:00
|
|
|
|
|
|
|
sim.connect(node1, node2);
|
2021-03-02 15:31:40 +00:00
|
|
|
sim.simulate_next_message().await; // init ping
|
2020-09-24 17:48:13 +00:00
|
|
|
sim.drop_message(); // drop init pong
|
|
|
|
|
2021-03-02 15:31:40 +00:00
|
|
|
sim.simulate_time(120).await;
|
2020-09-24 17:48:13 +00:00
|
|
|
assert!(sim.is_connected(node1, node2));
|
|
|
|
assert!(sim.is_connected(node2, node1));
|
|
|
|
}
|
2019-03-03 13:56:59 +00:00
|
|
|
|
2020-09-24 17:48:13 +00:00
|
|
|
#[test]
|
2021-03-02 15:31:40 +00:00
|
|
|
async fn lost_init_peng() {
|
2020-09-24 17:48:13 +00:00
|
|
|
let config = Config::default();
|
|
|
|
let mut sim = TapSimulator::new();
|
2021-03-02 15:31:40 +00:00
|
|
|
let node1 = sim.add_node(false, &config).await;
|
|
|
|
let node2 = sim.add_node(false, &config).await;
|
2020-09-24 17:48:13 +00:00
|
|
|
|
|
|
|
sim.connect(node1, node2);
|
2021-03-02 15:31:40 +00:00
|
|
|
sim.simulate_next_message().await; // init ping
|
|
|
|
sim.simulate_next_message().await; // init pong
|
2020-09-24 17:48:13 +00:00
|
|
|
sim.drop_message(); // drop init peng
|
|
|
|
|
2021-03-02 15:31:40 +00:00
|
|
|
sim.simulate_time(120).await;
|
2020-09-24 17:48:13 +00:00
|
|
|
assert!(sim.is_connected(node1, node2));
|
|
|
|
assert!(sim.is_connected(node2, node1));
|
2019-02-26 17:36:54 +00:00
|
|
|
}
|
2019-03-01 15:36:18 +00:00
|
|
|
|
|
|
|
#[test]
|
2020-10-19 22:19:38 +00:00
|
|
|
#[ignore]
|
2021-03-02 15:31:40 +00:00
|
|
|
async fn peer_exchange() {
|
2020-09-24 17:48:13 +00:00
|
|
|
// TODO Test
|
2020-10-19 22:19:38 +00:00
|
|
|
unimplemented!()
|
2019-03-01 15:36:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
2020-10-19 22:19:38 +00:00
|
|
|
#[ignore]
|
2021-03-02 15:31:40 +00:00
|
|
|
async fn lost_peer_exchange() {
|
2020-09-24 17:48:13 +00:00
|
|
|
// TODO Test
|
2020-10-19 22:19:38 +00:00
|
|
|
unimplemented!()
|
2019-03-01 15:36:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
2020-10-19 22:19:38 +00:00
|
|
|
#[ignore]
|
2021-03-02 15:31:40 +00:00
|
|
|
async fn remove_dead_peers() {
|
2020-09-24 17:48:13 +00:00
|
|
|
// TODO Test
|
2020-10-19 22:19:38 +00:00
|
|
|
unimplemented!()
|
2019-03-01 15:36:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
2020-10-19 22:19:38 +00:00
|
|
|
#[ignore]
|
2021-03-02 15:31:40 +00:00
|
|
|
async fn update_primary_address() {
|
2020-09-24 17:48:13 +00:00
|
|
|
// TODO Test
|
2020-10-19 22:19:38 +00:00
|
|
|
unimplemented!()
|
2019-03-01 15:36:18 +00:00
|
|
|
}
|
2019-12-04 09:04:42 +00:00
|
|
|
|
|
|
|
#[test]
|
2020-10-19 22:19:38 +00:00
|
|
|
#[ignore]
|
2021-03-02 15:31:40 +00:00
|
|
|
async fn automatic_peer_timeout() {
|
2020-09-24 17:48:13 +00:00
|
|
|
// TODO Test
|
2020-10-19 22:19:38 +00:00
|
|
|
unimplemented!()
|
2019-12-04 09:04:42 +00:00
|
|
|
}
|