Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 16 additions & 14 deletions crates/rds-net/tests/candidate_race.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
//! A silent first address must not delay a healthy authenticated candidate.
#![cfg(feature = "transport-noq")]
use ::noq::Runtime;
use rds_net::backends::noq::{self as owned};
use rds_net::{Backend, EndpointConfig, SecretKey, TransportAddr};
use std::sync::Arc;
use std::time::Duration;

fn config(bind: std::net::SocketAddr, key: SecretKey) -> EndpointConfig {
Expand All @@ -14,6 +16,17 @@ fn config(bind: std::net::SocketAddr, key: SecretKey) -> EndpointConfig {
}
}

// Keep the port reserved through ownership handoff. Dropping a reservation
// before rebinding lets a concurrent fixture/process acquire that address.
async fn bind_reserved(socket: std::net::UdpSocket, key: SecretKey) -> owned::Endpoint {
let addr = socket.local_addr().unwrap();
let runtime = Arc::new(::noq::TokioRuntime);
let socket = runtime.wrap_udp_socket(socket).unwrap();
owned::bind_with_socket(config(addr, key), socket, vec![addr], runtime, vec![])
.await
.unwrap()
}

#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
async fn blackholed_first_candidate_does_not_block_a_healthy_second() {
let one = std::net::UdpSocket::bind("127.0.0.1:0").unwrap();
Expand All @@ -24,11 +37,7 @@ async fn blackholed_first_candidate_does_not_block_a_healthy_second() {
(two, one)
};
let dead = blackhole.local_addr().unwrap();
let live = working.local_addr().unwrap();
drop(working);
let server = owned::bind_endpoint(config(live, SecretKey::from_bytes(&[91; 32])))
.await
.unwrap();
let server = bind_reserved(working, SecretKey::from_bytes(&[91; 32])).await;
let client = owned::bind_endpoint(config(
"127.0.0.1:0".parse().unwrap(),
SecretKey::from_bytes(&[92; 32]),
Expand Down Expand Up @@ -64,15 +73,8 @@ async fn fast_wrong_identity_cannot_win_or_cancel_the_valid_candidate() {
(two, one)
};
let wrong_addr = wrong.local_addr().unwrap();
let valid_addr = valid.local_addr().unwrap();
drop(wrong);
drop(valid);
let wrong = owned::bind_endpoint(config(wrong_addr, SecretKey::from_bytes(&[93; 32])))
.await
.unwrap();
let server = owned::bind_endpoint(config(valid_addr, SecretKey::from_bytes(&[94; 32])))
.await
.unwrap();
let wrong = bind_reserved(wrong, SecretKey::from_bytes(&[93; 32])).await;
let server = bind_reserved(valid, SecretKey::from_bytes(&[94; 32])).await;
let client = owned::bind_endpoint(config(
"127.0.0.1:0".parse().unwrap(),
SecretKey::from_bytes(&[95; 32]),
Expand Down
Loading