mod utils;
use std::net::UdpSocket;
use std::thread;
#[test]
pub fn handshake() {
let (config, wgproxy, server) = utils::session();
let client = UdpSocket::bind("127.0.0.1:0").expect("failed to create client socket");
let handshake = utils::handshake(&config.WGPROXY_PUBKEY);
let mut buf = [0; 512];
client.send_to(&handshake, wgproxy).expect("failed to send test packet");
let (buf_len, relay_nat_address) = server.recv_from(&mut buf).expect("failed to receive test packet");
assert_eq!(&buf[..buf_len], handshake);
server.send_to(b"TESTOLOPE", relay_nat_address).expect("failed to send test reply");
let (buf_len, _) = client.recv_from(&mut buf).expect("failed to receive test packet");
assert_eq!(&buf[..buf_len], b"TESTOLOPE");
}
#[test]
pub fn handshake2() {
let (config, wgproxy, server) = utils::session();
let client0 = UdpSocket::bind("127.0.0.1:0").expect("failed to create client socket");
let client1 = UdpSocket::bind("127.0.0.1:0").expect("failed to create client socket");
let handshake0 = utils::handshake(&config.WGPROXY_PUBKEY);
let handshake1 = utils::handshake(&config.WGPROXY_PUBKEY);
let mut buf = [0; 512];
client0.send_to(&handshake0, wgproxy).expect("failed to send test packet");
let (buf_len, relay_nat_address) = server.recv_from(&mut buf).expect("failed to receive test packet");
assert_eq!(&buf[..buf_len], handshake0);
server.send_to(b"testolope:0", relay_nat_address).expect("failed to send test reply");
let (buf_len, _) = client0.recv_from(&mut buf).expect("failed to receive test packet");
assert_eq!(&buf[..buf_len], b"testolope:0");
client1.send_to(&handshake1, wgproxy).expect("failed to send test packet");
server.send_to(b"testolope:1", relay_nat_address).expect("failed to send test reply");
let (buf_len, _) = client0.recv_from(&mut buf).expect("failed to receive test packet");
assert_eq!(&buf[..buf_len], b"testolope:1");
}
#[test]
pub fn timeout() {
let (config, wgproxy, server) = utils::session();
let client = UdpSocket::bind("127.0.0.1:0").expect("failed to create client socket");
let handshake0 = utils::handshake(&config.WGPROXY_PUBKEY);
let handshake1 = utils::handshake(&config.WGPROXY_PUBKEY);
let mut buf = [0; 512];
client.send_to(&handshake0, wgproxy).expect("failed to send test packet");
let (buf_len, relay_nat_address) = server.recv_from(&mut buf).expect("failed to receive test packet");
assert_eq!(&buf[..buf_len], handshake0);
thread::sleep(config.WGPROXY_TIMEOUT * 2);
server.send_to(b"testolope:0", relay_nat_address).expect("failed to send test reply");
client.send_to(&handshake1, wgproxy).expect("failed to send test packet");
let (buf_len, relay_nat_address) = server.recv_from(&mut buf).expect("failed to receive test packet");
assert_eq!(&buf[..buf_len], handshake1);
server.send_to(b"testolope:1", relay_nat_address).expect("failed to send test reply");
let (buf_len, _) = client.recv_from(&mut buf).expect("failed to receive test packet");
assert_eq!(&buf[..buf_len], b"testolope:1");
}
#[test]
pub fn timeout2() {
let (config, wgproxy, server) = utils::session();
let client0 = UdpSocket::bind("127.0.0.1:0").expect("failed to create client socket");
let client1 = UdpSocket::bind("127.0.0.1:0").expect("failed to create client socket");
let handshake0 = utils::handshake(&config.WGPROXY_PUBKEY);
let handshake1 = utils::handshake(&config.WGPROXY_PUBKEY);
let mut buf = [0; 512];
client0.send_to(&handshake0, wgproxy).expect("failed to send test packet");
let (buf_len, relay_nat_address) = server.recv_from(&mut buf).expect("failed to receive test packet");
assert_eq!(&buf[..buf_len], handshake0);
thread::sleep(config.WGPROXY_TIMEOUT * 2);
server.send_to(b"testolope:0", relay_nat_address).expect("failed to send test reply");
client1.send_to(&handshake1, wgproxy).expect("failed to send test packet");
let (buf_len, relay_nat_address) = server.recv_from(&mut buf).expect("failed to receive test packet");
assert_eq!(&buf[..buf_len], handshake1);
server.send_to(b"testolope:1", relay_nat_address).expect("failed to send test reply");
let (buf_len, _) = client1.recv_from(&mut buf).expect("failed to receive test packet");
assert_eq!(&buf[..buf_len], b"testolope:1");
}
#[test]
pub fn batch() {
let (config, wgproxy, server) = utils::session();
let client = UdpSocket::bind("127.0.0.1:0").expect("failed to create client socket");
let handshake = utils::handshake(&config.WGPROXY_PUBKEY);
let mut buf = [0; 512];
client.send_to(&handshake, wgproxy).expect("failed to send test packet");
let (buf_len, relay_nat_address) = server.recv_from(&mut buf).expect("failed to receive test packet");
assert_eq!(&buf[..buf_len], handshake);
for index in 0usize..65536 {
let message = index.to_ne_bytes();
client.send_to(&message, relay_nat_address).expect("failed to send test reply");
let (buf_len, _) = server.recv_from(&mut buf).expect("failed to receive test packet");
assert_eq!(&buf[..buf_len], &message);
let message = (!index).to_ne_bytes();
server.send_to(&message, relay_nat_address).expect("failed to send test reply");
let (buf_len, _) = client.recv_from(&mut buf).expect("failed to receive test packet");
assert_eq!(&buf[..buf_len], &message);
}
}