diff options
| author | Linus Färnstrand <linus@mullvad.net> | 2017-09-19 22:38:54 +0200 |
|---|---|---|
| committer | Linus Färnstrand <linus@mullvad.net> | 2017-09-19 23:40:25 +0200 |
| commit | ed0d1101afb852ceb64105fd4aa22200b05a5ceb (patch) | |
| tree | 464b6172c6c5f19bbb5d313b9ecccd1619927d38 /socket-relay | |
| parent | 230c8495ce8e454895de6023f932302e797a57e5 (diff) | |
| download | mullvadvpn-ed0d1101afb852ceb64105fd4aa22200b05a5ceb.tar.xz mullvadvpn-ed0d1101afb852ceb64105fd4aa22200b05a5ceb.zip | |
Add integration test relaying to self
Diffstat (limited to 'socket-relay')
| -rw-r--r-- | socket-relay/tests/forward_self.rs | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/socket-relay/tests/forward_self.rs b/socket-relay/tests/forward_self.rs new file mode 100644 index 0000000000..4714e52404 --- /dev/null +++ b/socket-relay/tests/forward_self.rs @@ -0,0 +1,55 @@ +extern crate env_logger; +extern crate socket_relay; +extern crate tokio_core; + +use std::net::{SocketAddr, UdpSocket}; +use std::sync::mpsc; +use std::thread; +use std::time::Duration; + +use socket_relay::udp::Relay; +use tokio_core::reactor::Core; + +#[test] +fn test() { + env_logger::init().unwrap(); + + let socket = UdpSocket::bind("127.0.0.1:0").unwrap(); + socket + .set_read_timeout(Some(Duration::from_secs(1))) + .unwrap(); + let mut buffer = [0; 100]; + + let relay_listen_addr = spawn_relay(socket.local_addr().unwrap()); + + let test_data = [9, 88, 5, 2]; + socket.send_to(&test_data, relay_listen_addr).unwrap(); + let (len1, relay_src1) = socket.recv_from(&mut buffer).unwrap(); + assert_eq!(&buffer[..len1], &test_data); + + let reply_test_data = [1, 2, 6, 100]; + socket.send_to(&reply_test_data, relay_src1).unwrap(); + let (len2, relay_src2) = socket.recv_from(&mut buffer).unwrap(); + assert_eq!(relay_src2, relay_listen_addr); + assert_eq!(&buffer[..len2], &reply_test_data); +} + +fn spawn_relay(destination_addr: SocketAddr) -> SocketAddr { + let (tx, rx) = mpsc::channel(); + thread::spawn(move || { + let mut core = Core::new().unwrap(); + let handle = core.handle(); + + let relay = Relay::new( + "127.0.0.1:0".parse().unwrap(), + "127.0.0.1".parse().unwrap(), + destination_addr, + handle, + ).unwrap(); + println!("Relay listening on {}", relay.listen_addr()); + tx.send(relay.listen_addr()).unwrap(); + let _ = core.run(relay); + println!("Relay exiting") + }); + rx.recv().unwrap() +} |
