Skip to content

Commit 857cc0b

Browse files
Merge pull request #11 from quackitsquinn/os-port-allocation
Have tests use socket 0 for port allocation
2 parents c9db5bf + b0dde40 commit 857cc0b

File tree

2 files changed

+7
-49
lines changed

2 files changed

+7
-49
lines changed

Diff for: lazuli_core/src/client/mod.rs

+3-47
Original file line numberDiff line numberDiff line change
@@ -24,65 +24,21 @@ mod test_utils {
2424
use self::server::Server;
2525

2626
use super::*;
27-
static PORTS_BASE: u16 = 5000;
28-
static PORT_ACTIVE_BASE: Mutex<u16> = Mutex::new(PORTS_BASE);
29-
30-
fn addr_in_use(addr: SocketAddr) -> bool {
31-
use std::net::TcpListener;
32-
TcpListener::bind(addr).is_err()
33-
}
34-
35-
pub(super) fn get_socket_addr() -> SocketAddr {
36-
let mut port = *PORT_ACTIVE_BASE.lock().unwrap();
37-
let addr = SocketAddr::new(IpAddr::V4(Ipv4Addr::LOCALHOST), port);
38-
while addr_in_use(addr) {
39-
debug!("Port {} is in use, trying next port.", port);
40-
port += 1;
41-
}
42-
*PORT_ACTIVE_BASE.lock().unwrap() = port + 1;
43-
addr
44-
}
4527

4628
/// Creates a client and server pair.
4729
/// (client, server)
4830
pub(super) fn make_client_server_pair() -> (Client, Client) {
4931
use std::net::TcpListener;
50-
let server = TcpListener::bind((Ipv4Addr::LOCALHOST, *PORT_ACTIVE_BASE.lock().unwrap()));
51-
52-
*PORT_ACTIVE_BASE.lock().unwrap() += 1;
53-
54-
if let Err(e) = server {
55-
// If the port is in use, try again.
56-
if e.kind() == std::io::ErrorKind::AddrInUse {
57-
return make_client_server_pair();
58-
} else {
59-
panic!("Failed to bind server: {}", e);
60-
}
61-
}
62-
63-
let server = server.unwrap();
32+
let server = TcpListener::bind((Ipv4Addr::LOCALHOST, 0)).expect("Failed to create server!");
6433

6534
let client = Client::connect(server.local_addr().unwrap()).unwrap();
6635
let server = server.accept().unwrap().0;
6736

6837
(client, Client::from_stream(server))
6938
}
70-
39+
/// Creates a Server. Expects the OS to assign a port.
7140
pub(super) fn make_server() -> Server {
72-
let server = Server::new((Ipv4Addr::LOCALHOST, *PORT_ACTIVE_BASE.lock().unwrap()));
73-
74-
if let Err(e) = server {
75-
// If the port is in use, try again.
76-
if e.kind() == std::io::ErrorKind::AddrInUse {
77-
return make_server();
78-
} else {
79-
panic!("Failed to bind server: {}", e);
80-
}
81-
}
82-
83-
*PORT_ACTIVE_BASE.lock().unwrap() += 1;
84-
85-
server.unwrap()
41+
Server::new((Ipv4Addr::LOCALHOST, 0)).expect("Failed to create server!")
8642
}
8743

8844
/// Tests sending and receiving data. Convenience function for testing.

Diff for: lazuli_core/src/client/server.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,9 @@ impl Server {
7474

7575
#[cfg(test)]
7676
mod test {
77-
use crate::client::test_utils::{get_socket_addr, make_server, test_send_recv};
77+
use std::net::Ipv4Addr;
78+
79+
use crate::client::test_utils::{make_server, test_send_recv};
7880

7981
use super::*;
8082

@@ -114,7 +116,7 @@ mod test {
114116
}
115117
#[test]
116118
fn test_nonblocking_server() -> Result<()> {
117-
let mut server = Server::new_nonblocking(get_socket_addr())?;
119+
let mut server = Server::new_nonblocking((Ipv4Addr::LOCALHOST, 0))?;
118120
assert!(server.accept().is_err());
119121
if let Err(e) = server.accept() {
120122
assert_eq!(e.kind(), std::io::ErrorKind::WouldBlock);

0 commit comments

Comments
 (0)