diff --git a/lazuli_core/src/client/mod.rs b/lazuli_core/src/client/mod.rs index 51eb6ea..b076ae8 100644 --- a/lazuli_core/src/client/mod.rs +++ b/lazuli_core/src/client/mod.rs @@ -24,65 +24,21 @@ mod test_utils { use self::server::Server; use super::*; - static PORTS_BASE: u16 = 5000; - static PORT_ACTIVE_BASE: Mutex = Mutex::new(PORTS_BASE); - - fn addr_in_use(addr: SocketAddr) -> bool { - use std::net::TcpListener; - TcpListener::bind(addr).is_err() - } - - pub(super) fn get_socket_addr() -> SocketAddr { - let mut port = *PORT_ACTIVE_BASE.lock().unwrap(); - let addr = SocketAddr::new(IpAddr::V4(Ipv4Addr::LOCALHOST), port); - while addr_in_use(addr) { - debug!("Port {} is in use, trying next port.", port); - port += 1; - } - *PORT_ACTIVE_BASE.lock().unwrap() = port + 1; - addr - } /// Creates a client and server pair. /// (client, server) pub(super) fn make_client_server_pair() -> (Client, Client) { use std::net::TcpListener; - let server = TcpListener::bind((Ipv4Addr::LOCALHOST, *PORT_ACTIVE_BASE.lock().unwrap())); - - *PORT_ACTIVE_BASE.lock().unwrap() += 1; - - if let Err(e) = server { - // If the port is in use, try again. - if e.kind() == std::io::ErrorKind::AddrInUse { - return make_client_server_pair(); - } else { - panic!("Failed to bind server: {}", e); - } - } - - let server = server.unwrap(); + let server = TcpListener::bind((Ipv4Addr::LOCALHOST, 0)).expect("Failed to create server!"); let client = Client::connect(server.local_addr().unwrap()).unwrap(); let server = server.accept().unwrap().0; (client, Client::from_stream(server)) } - + /// Creates a Server. Expects the OS to assign a port. pub(super) fn make_server() -> Server { - let server = Server::new((Ipv4Addr::LOCALHOST, *PORT_ACTIVE_BASE.lock().unwrap())); - - if let Err(e) = server { - // If the port is in use, try again. - if e.kind() == std::io::ErrorKind::AddrInUse { - return make_server(); - } else { - panic!("Failed to bind server: {}", e); - } - } - - *PORT_ACTIVE_BASE.lock().unwrap() += 1; - - server.unwrap() + Server::new((Ipv4Addr::LOCALHOST, 0)).expect("Failed to create server!") } /// Tests sending and receiving data. Convenience function for testing. diff --git a/lazuli_core/src/client/server.rs b/lazuli_core/src/client/server.rs index aa00fb7..7496395 100644 --- a/lazuli_core/src/client/server.rs +++ b/lazuli_core/src/client/server.rs @@ -74,7 +74,9 @@ impl Server { #[cfg(test)] mod test { - use crate::client::test_utils::{get_socket_addr, make_server, test_send_recv}; + use std::net::Ipv4Addr; + + use crate::client::test_utils::{make_server, test_send_recv}; use super::*; @@ -114,7 +116,7 @@ mod test { } #[test] fn test_nonblocking_server() -> Result<()> { - let mut server = Server::new_nonblocking(get_socket_addr())?; + let mut server = Server::new_nonblocking((Ipv4Addr::LOCALHOST, 0))?; assert!(server.accept().is_err()); if let Err(e) = server.accept() { assert_eq!(e.kind(), std::io::ErrorKind::WouldBlock);