Skip to content

Commit 4fb874f

Browse files
committed
test(sandbox): bind ephemeral port in accepted loopback stream test
The test reserved a loopback port, released it, and rebound it inside the workload. A concurrent nextest process could claim the port in between, failing the bind and surfacing only as a RecvError on the ready channel. Bind port 0 in the workload and send the assigned address instead, and report the workload error when the listener never becomes ready. Signed-off-by: Kris Hicks <khicks@nvidia.com>
1 parent cfcc373 commit 4fb874f

1 file changed

Lines changed: 9 additions & 7 deletions

File tree

‎crates/openshell-sandbox/src/network_broker.rs‎

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2214,20 +2214,16 @@ mod tests {
22142214

22152215
#[test]
22162216
fn accepted_loopback_stream_is_registered_for_notified_operations() {
2217-
let reservation = TcpListener::bind("127.0.0.1:0").expect("reserve loopback port");
2218-
let address = reservation.local_addr().expect("reserved address");
2219-
drop(reservation);
2220-
22212217
let (launcher, listener) = openshell_isolation_interface::linux::workload_launcher::start()
22222218
.expect("start workload launcher");
22232219
let _broker = NetworkBroker::start_for_test(listener).expect("start network broker");
22242220
let (ready_tx, ready_rx) = std::sync::mpsc::sync_channel(1);
22252221
let workload = std::thread::spawn(move || {
22262222
launcher
22272223
.execute(move || -> io::Result<SocketAddr> {
2228-
let listener = TcpListener::bind(address)?;
2224+
let listener = TcpListener::bind("127.0.0.1:0")?;
22292225
ready_tx
2230-
.send(())
2226+
.send(listener.local_addr()?)
22312227
.map_err(|_| io::Error::other("test client disappeared"))?;
22322228
let (stream, _) = listener.accept()?;
22332229
let peer = stream.peer_addr()?;
@@ -2256,7 +2252,13 @@ mod tests {
22562252
.expect("launcher result")
22572253
});
22582254

2259-
ready_rx.recv().expect("listener ready");
2255+
let Ok(address) = ready_rx.recv() else {
2256+
let error = workload
2257+
.join()
2258+
.expect("join workload")
2259+
.expect_err("listener not ready");
2260+
panic!("workload listener failed: {error}");
2261+
};
22602262
let mut client = TcpStream::connect(address).expect("connect loopback client");
22612263
let mut payload = [0_u8; 8];
22622264
client

0 commit comments

Comments
 (0)