diff --git a/crates/irtt-cli/src/main.rs b/crates/irtt-cli/src/main.rs index 202956b..e23eb0d 100644 --- a/crates/irtt-cli/src/main.rs +++ b/crates/irtt-cli/src/main.rs @@ -72,7 +72,7 @@ fn run(args: CliArgs, shutdown_requested: &AtomicBool) -> Result<(), Box Result { + pub fn open(&mut self) -> Result { match self.phase { ClientPhase::Connected => {} ClientPhase::Open { .. } => return Err(ClientError::AlreadyOpen), @@ -81,10 +81,44 @@ impl Client { ClientPhase::NoTestCompleted => return Err(ClientError::AlreadyCompleted), } - let outcome = self.open_inner(now); + let outcome = (|| -> Result { + let request = OpenRequest { + params: self.requested.clone(), + close: self.config.run_mode == RunMode::NoTest, + }; + + let packet = encode_open_request(&request, self.config.hmac_key.as_deref())?; + let mut buf = [0_u8; MAX_OPEN_PACKET_SIZE]; + + for timeout in &self.config.open_timeouts { + self.socket.set_read_timeout(Some(*timeout))?; + self.socket.send(&packet)?; + + match self.socket.recv(&mut buf) { + Ok(size) => { + let reply = irtt_proto::decode_open_reply( + &buf[..size], + self.config.hmac_key.as_deref(), + )?; + + return self.accept_open_reply(reply, ClientTimestamp::now()); + } + Err(err) + if matches!( + err.kind(), + io::ErrorKind::WouldBlock | io::ErrorKind::TimedOut + ) => {} + Err(err) => return Err(ClientError::Socket(err)), + } + } + + Err(ClientError::OpenTimeout) + })(); + let restore = self .socket .set_read_timeout(self.config.socket_config.recv_timeout); + match (outcome, restore) { (Ok(outcome), Ok(())) => Ok(outcome), (Ok(_), Err(source)) => Err(ClientError::ReadTimeoutRestore { source }), @@ -93,38 +127,6 @@ impl Client { } } - fn open_inner(&mut self, _now: ClientTimestamp) -> Result { - let request = OpenRequest { - params: self.requested.clone(), - close: self.config.run_mode == RunMode::NoTest, - }; - let packet = encode_open_request(&request, self.config.hmac_key.as_deref())?; - let mut buf = [0_u8; MAX_OPEN_PACKET_SIZE]; - - for timeout in &self.config.open_timeouts { - self.socket.set_read_timeout(Some(*timeout))?; - self.socket.send(&packet)?; - - match self.socket.recv(&mut buf) { - Ok(size) => { - let reply = irtt_proto::decode_open_reply( - &buf[..size], - self.config.hmac_key.as_deref(), - )?; - return self.accept_open_reply(reply, ClientTimestamp::now()); - } - Err(err) - if matches!( - err.kind(), - io::ErrorKind::WouldBlock | io::ErrorKind::TimedOut - ) => {} - Err(err) => return Err(ClientError::Socket(err)), - } - } - - Err(ClientError::OpenTimeout) - } - pub fn close(&mut self, now: ClientTimestamp) -> Result, ClientError> { let token = match self.phase { ClientPhase::Open { token } => token, diff --git a/crates/irtt-client/src/client/tests/close.rs b/crates/irtt-client/src/client/tests/close.rs index 63b8962..bedd7d9 100644 --- a/crates/irtt-client/src/client/tests/close.rs +++ b/crates/irtt-client/src/client/tests/close.rs @@ -11,10 +11,10 @@ fn open_fails_after_close() { let _ = recv_request(&socket, &tx); }); let mut client = Client::connect(default_test_config(server.addr)).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); client.close(ClientTimestamp::now()).unwrap(); assert!(matches!( - client.open(ClientTimestamp::now()), + client.open(), Err(ClientError::AlreadyClosed) )); server.join(); @@ -31,7 +31,7 @@ fn close_sends_one_close_packet_with_negotiated_token() { let _ = recv_request(&socket, &tx); }); let mut client = Client::connect(default_test_config(server.addr)).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); let events = client.close(ClientTimestamp::now()).unwrap(); assert_eq!(events.len(), 1); let packets: Vec<_> = server.rx.iter().take(2).collect(); @@ -62,7 +62,7 @@ fn send_probe_fails_after_close() { } }); let mut client = Client::connect(default_test_config(server.addr)).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); client.close(ClientTimestamp::now()).unwrap(); assert!(matches!( client.send_probe(), @@ -84,7 +84,7 @@ fn close_clears_timed_out_metadata() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); client.send_probe().unwrap(); thread::sleep(Duration::from_millis(60)); @@ -132,7 +132,7 @@ fn close_flagged_echo_reply_emits_reply_then_closes_without_sending_close() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); client.send_probe().unwrap(); let events = client.recv_once().unwrap(); diff --git a/crates/irtt-client/src/client/tests/dscp.rs b/crates/irtt-client/src/client/tests/dscp.rs index 80e2d09..f1bff80 100644 --- a/crates/irtt-client/src/client/tests/dscp.rs +++ b/crates/irtt-client/src/client/tests/dscp.rs @@ -26,7 +26,7 @@ fn normal_open_applies_negotiated_dscp_after_open_and_close_clears_it() { socket_traffic_class(&client.socket, client.remote).unwrap() & 0xfc, 0 ); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); assert_eq!( socket_traffic_class(&client.socket, client.remote).unwrap() & 0xfc, 184 @@ -58,7 +58,7 @@ fn normal_open_uses_negotiated_dscp_not_requested_dscp() { config.negotiation_policy = NegotiationPolicy::Loose; let mut client = Client::connect(config).unwrap(); - let negotiated = assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + let negotiated = assert_open_started(client.open().unwrap()); assert_eq!(negotiated.params.dscp, 0); assert_eq!( socket_traffic_class(&client.socket, client.remote).unwrap(), diff --git a/crates/irtt-client/src/client/tests/hmac.rs b/crates/irtt-client/src/client/tests/hmac.rs index 2afcc8e..38b274f 100644 --- a/crates/irtt-client/src/client/tests/hmac.rs +++ b/crates/irtt-client/src/client/tests/hmac.rs @@ -14,7 +14,7 @@ fn hmac_open_success() { }); config.server_addr = server.addr.to_string(); let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); server.join(); } @@ -32,7 +32,7 @@ fn hmac_open_rejects_missing_hmac() { config.server_addr = server.addr.to_string(); let mut client = Client::connect(config).unwrap(); assert!(matches!( - client.open(ClientTimestamp::now()), + client.open(), Err(ClientError::Protocol( irtt_proto::ProtoError::HmacPresenceMismatch )) @@ -55,7 +55,7 @@ fn hmac_open_rejects_bad_hmac() { config.server_addr = server.addr.to_string(); let mut client = Client::connect(config).unwrap(); assert!(matches!( - client.open(ClientTimestamp::now()), + client.open(), Err(ClientError::Protocol(irtt_proto::ProtoError::BadHmac)) )); server.join(); @@ -76,7 +76,7 @@ fn hmac_close_packet_includes_valid_hmac() { }); config.server_addr = server.addr.to_string(); let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); client.close(ClientTimestamp::now()).unwrap(); let packets: Vec<_> = server.rx.iter().take(2).collect(); let close = &packets[1]; @@ -125,7 +125,7 @@ fn bad_hmac_reply_is_dropped() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); client.send_probe().unwrap(); thread::sleep(Duration::from_millis(30)); let events = client.recv_once().unwrap(); @@ -174,7 +174,7 @@ fn hmac_echo_request_reply_works() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); client.send_probe().unwrap(); thread::sleep(Duration::from_millis(50)); let events = client.recv_once().unwrap(); diff --git a/crates/irtt-client/src/client/tests/no_test.rs b/crates/irtt-client/src/client/tests/no_test.rs index fb6a195..90a3db1 100644 --- a/crates/irtt-client/src/client/tests/no_test.rs +++ b/crates/irtt-client/src/client/tests/no_test.rs @@ -8,7 +8,7 @@ fn no_test_open_close_succeeds_on_open_reply_close() { let server = no_test_server(params.clone(), 0); config.server_addr = server.addr.to_string(); let mut client = Client::connect(config).unwrap(); - let negotiated = assert_no_test_completed(client.open(ClientTimestamp::now()).unwrap()); + let negotiated = assert_no_test_completed(client.open().unwrap()); assert_eq!(negotiated.params, params); assert_eq!(client.negotiated.as_ref(), Some(&negotiated)); assert!(matches!( @@ -26,7 +26,7 @@ fn no_test_success_validates_params() { let server = no_test_server(params.clone(), 0); config.server_addr = server.addr.to_string(); let mut client = Client::connect(config).unwrap(); - let negotiated = assert_no_test_completed(client.open(ClientTimestamp::now()).unwrap()); + let negotiated = assert_no_test_completed(client.open().unwrap()); assert_eq!(negotiated.params, params); server.join(); } @@ -40,7 +40,7 @@ fn no_test_rejects_non_close_open_reply() { config.server_addr = server.addr.to_string(); let mut client = Client::connect(config).unwrap(); assert!(matches!( - client.open(ClientTimestamp::now()), + client.open(), Err(ClientError::UnexpectedNoTestReply) )); server.join(); @@ -55,7 +55,7 @@ fn no_test_rejects_non_zero_token_with_close_reply() { config.server_addr = server.addr.to_string(); let mut client = Client::connect(config).unwrap(); assert!(matches!( - client.open(ClientTimestamp::now()), + client.open(), Err(ClientError::NonZeroNoTestToken { token: TOKEN }) )); server.join(); @@ -71,7 +71,7 @@ fn no_test_strict_negotiation_rejects_changed_params() { config.server_addr = server.addr.to_string(); let mut client = Client::connect(config).unwrap(); assert!(matches!( - client.open(ClientTimestamp::now()), + client.open(), Err(ClientError::NegotiationRejected { .. }) )); server.join(); @@ -87,7 +87,7 @@ fn no_test_loose_negotiation_accepts_restricted_params() { let server = no_test_server(params.clone(), 0); config.server_addr = server.addr.to_string(); let mut client = Client::connect(config).unwrap(); - let negotiated = assert_no_test_completed(client.open(ClientTimestamp::now()).unwrap()); + let negotiated = assert_no_test_completed(client.open().unwrap()); assert_eq!(negotiated.params, params); server.join(); } @@ -100,7 +100,7 @@ fn send_probe_fails_after_no_test_completed() { let server = no_test_server(params, 0); config.server_addr = server.addr.to_string(); let mut client = Client::connect(config).unwrap(); - assert_no_test_completed(client.open(ClientTimestamp::now()).unwrap()); + assert_no_test_completed(client.open().unwrap()); assert!(matches!( client.send_probe(), Err(ClientError::AlreadyCompleted) @@ -116,9 +116,9 @@ fn open_fails_after_no_test_completed() { let server = no_test_server(params, 0); config.server_addr = server.addr.to_string(); let mut client = Client::connect(config).unwrap(); - assert_no_test_completed(client.open(ClientTimestamp::now()).unwrap()); + assert_no_test_completed(client.open().unwrap()); assert!(matches!( - client.open(ClientTimestamp::now()), + client.open(), Err(ClientError::AlreadyCompleted) )); server.join(); diff --git a/crates/irtt-client/src/client/tests/open.rs b/crates/irtt-client/src/client/tests/open.rs index 1fea096..cc0a0d9 100644 --- a/crates/irtt-client/src/client/tests/open.rs +++ b/crates/irtt-client/src/client/tests/open.rs @@ -18,7 +18,7 @@ fn successful_open_handshake() { let server = open_success_server(params.clone()); let mut client = Client::connect(default_test_config(server.addr)).unwrap(); - let negotiated = assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + let negotiated = assert_open_started(client.open().unwrap()); assert_eq!(negotiated.params, params); assert!(matches!(client.phase, ClientPhase::Open { token: TOKEN })); server.join(); @@ -30,9 +30,9 @@ fn open_fails_when_already_open() { let params = params_from_config(&config).unwrap(); let server = open_success_server(params); let mut client = Client::connect(default_test_config(server.addr)).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); assert!(matches!( - client.open(ClientTimestamp::now()), + client.open(), Err(ClientError::AlreadyOpen) )); server.join(); @@ -53,7 +53,7 @@ fn open_retries_after_first_timeout() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - let outcome = client.open(ClientTimestamp::now()).unwrap(); + let outcome = client.open().unwrap(); assert_open_started(outcome); assert_eq!(server.rx.iter().take(2).count(), 2); server.join(); @@ -68,7 +68,7 @@ fn open_timeout_after_all_timeouts() { }; let mut client = Client::connect(config).unwrap(); assert!(matches!( - client.open(ClientTimestamp::now()), + client.open(), Err(ClientError::OpenTimeout) )); assert_eq!(server.rx.iter().take(2).count(), 2); @@ -88,7 +88,7 @@ fn open_restores_configured_read_timeout_after_timeout() { }; let mut client = Client::connect(config).unwrap(); assert!(matches!( - client.open(ClientTimestamp::now()), + client.open(), Err(ClientError::OpenTimeout) )); @@ -108,7 +108,7 @@ fn protocol_version_mismatch_fails() { let server = open_success_server(params); let mut client = Client::connect(default_test_config(server.addr)).unwrap(); assert!(matches!( - client.open(ClientTimestamp::now()), + client.open(), Err(ClientError::ProtocolVersionMismatch { received: 2, .. }) )); server.join(); @@ -125,7 +125,7 @@ fn server_rejection_fails_in_normal_mode() { }); let mut client = Client::connect(default_test_config(server.addr)).unwrap(); assert!(matches!( - client.open(ClientTimestamp::now()), + client.open(), Err(ClientError::ServerRejected) )); server.join(); diff --git a/crates/irtt-client/src/client/tests/probes_replies.rs b/crates/irtt-client/src/client/tests/probes_replies.rs index 4be8741..4e90d83 100644 --- a/crates/irtt-client/src/client/tests/probes_replies.rs +++ b/crates/irtt-client/src/client/tests/probes_replies.rs @@ -38,7 +38,7 @@ fn send_probe_sends_valid_echo_request() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); let events = client.send_probe().unwrap(); assert_eq!(events.len(), 1); match &events[0] { @@ -89,7 +89,7 @@ fn echo_sent_reports_schedule_and_timer_error() { mono: Instant::now(), wall: SystemTime::now(), }; - assert_open_started(client.open(start).unwrap()); + assert_open_started(client.open().unwrap()); let session_start = client.session.as_ref().unwrap().start_mono; assert!( session_start >= start.mono, @@ -131,7 +131,7 @@ fn send_probe_starts_seq_at_zero_and_increments() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); client.send_probe().unwrap(); client.send_probe().unwrap(); client.send_probe().unwrap(); @@ -172,7 +172,7 @@ fn send_probe_respects_finite_duration_exclusive_end() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); let session = client.session.as_ref().unwrap(); let start = session.start_mono; @@ -225,7 +225,7 @@ fn continuous_duration_keeps_generating_send_deadlines() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); let start = client.session.as_ref().unwrap().start_mono; let interval = Duration::from_millis(500); @@ -301,7 +301,7 @@ fn send_probe_reports_schedule_overflow() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); client.session.as_mut().unwrap().packets_sent = u64::MAX - 1; assert!(matches!( @@ -323,7 +323,7 @@ fn send_probe_reports_logical_sequence_counter_overflow() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); client.session.as_mut().unwrap().next_logical_seq = u64::MAX; assert!(matches!( @@ -347,7 +347,7 @@ fn send_probe_reports_packets_sent_counter_overflow() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); client.session.as_mut().unwrap().packets_sent = u64::MAX; assert!(matches!( @@ -371,7 +371,7 @@ fn recv_once_returns_empty_on_timeout() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); let events = client.recv_once().unwrap(); assert!(events.is_empty()); server.join(); @@ -477,7 +477,7 @@ fn recv_once_decodes_only_received_bytes_after_longer_datagram() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); client.send_probe().unwrap(); client.send_probe().unwrap(); @@ -550,7 +550,7 @@ fn echo_reply_metadata_propagates_observed_dscp_with_ancillary() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); client.send_probe().unwrap(); thread::sleep(Duration::from_millis(50)); @@ -757,7 +757,7 @@ fn wrong_token_reply_is_dropped() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); client.send_probe().unwrap(); thread::sleep(Duration::from_millis(30)); let events = client.recv_once().unwrap(); @@ -796,7 +796,7 @@ fn duplicate_reply_emits_duplicate_event() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); client.send_probe().unwrap(); thread::sleep(Duration::from_millis(50)); @@ -850,7 +850,7 @@ fn out_of_order_reply_emits_late_event() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); client.send_probe().unwrap(); client.send_probe().unwrap(); thread::sleep(Duration::from_millis(50)); @@ -891,7 +891,7 @@ fn poll_timeouts_emits_echo_loss() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); client.send_probe().unwrap(); client.send_probe().unwrap(); @@ -921,7 +921,7 @@ fn poll_timeouts_removes_expired_pending() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); client.send_probe().unwrap(); thread::sleep(Duration::from_millis(150)); @@ -967,7 +967,7 @@ fn late_reply_after_timeout_preserves_measurement_metadata() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); client.send_probe().unwrap(); thread::sleep(Duration::from_millis(60)); @@ -1046,7 +1046,7 @@ fn late_reply_metadata_is_unavailable_without_ancillary() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); client.send_probe().unwrap(); thread::sleep(Duration::from_millis(60)); @@ -1095,7 +1095,7 @@ fn late_reply_metadata_propagates_observed_dscp_with_ancillary() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); client.send_probe().unwrap(); thread::sleep(Duration::from_millis(60)); @@ -1149,7 +1149,7 @@ fn pending_map_bounded() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); client.send_probe().unwrap(); client.send_probe().unwrap(); client.send_probe().unwrap(); @@ -1199,7 +1199,7 @@ fn minimal_negotiated_layout_works() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); client.send_probe().unwrap(); thread::sleep(Duration::from_millis(30)); let events = client.recv_once().unwrap(); @@ -1253,7 +1253,7 @@ fn late_reply_with_pending_preserves_rtt() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); client.send_probe().unwrap(); client.send_probe().unwrap(); client.send_probe().unwrap(); @@ -1296,7 +1296,7 @@ fn pending_full_does_not_send_packet() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); client.send_probe().unwrap(); client.send_probe().unwrap(); @@ -1361,7 +1361,7 @@ fn unmatched_future_reply_emits_warning_not_late() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); client.send_probe().unwrap(); thread::sleep(Duration::from_millis(50)); @@ -1419,7 +1419,7 @@ fn unmatched_future_reply_does_not_update_highest_received_seq() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); client.send_probe().unwrap(); client.send_probe().unwrap(); thread::sleep(Duration::from_millis(50)); @@ -1523,7 +1523,7 @@ fn matched_reply_with_reversed_monotonic_time_still_emits_event() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); let base = Instant::now() + Duration::from_secs(1); let send_ts = ClientTimestamp { @@ -1566,7 +1566,7 @@ fn process_received_packet_uses_supplied_receive_metadata() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); client.send_probe_at(ClientTimestamp::now()).unwrap(); let recv_ts = ClientTimestamp::now(); @@ -1613,7 +1613,7 @@ fn process_received_packet_uses_supplied_receive_metadata_for_late_reply() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); client.send_probe_at(ClientTimestamp::now()).unwrap(); thread::sleep(Duration::from_millis(60)); @@ -1663,7 +1663,7 @@ fn receive_metadata_does_not_broaden_malformed_warning() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); let events = client .process_received_packet( @@ -1754,7 +1754,7 @@ fn send_probe_wraps_wire_sequence_at_u32_max() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); let session = client.session.as_mut().unwrap(); session.next_wire_seq = u32::MAX; @@ -1811,7 +1811,7 @@ fn wrapped_reply_after_u32_max_is_not_late() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); let session = client.session.as_mut().unwrap(); session.next_wire_seq = u32::MAX; session.next_logical_seq = 41; @@ -1848,7 +1848,7 @@ fn send_probe_after_sending_done_is_noop() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); client.session.as_mut().unwrap().sending_done = true; let events = client.send_probe().unwrap(); @@ -1926,7 +1926,7 @@ fn recv_buffer_uses_negotiated_packet_length() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); let buf_size = client.recv_buffer_size(); assert!( buf_size > 4096, @@ -1954,7 +1954,7 @@ fn short_echo_reply_does_not_emit_echo_reply() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); client.send_probe().unwrap(); let mut packet = echo_reply_packet(TOKEN, 0, ¶ms, &TimestampFields::default(), None); @@ -1986,7 +1986,7 @@ fn overlong_echo_reply_does_not_emit_echo_reply() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); client.send_probe().unwrap(); let mut packet = echo_reply_packet(TOKEN, 0, ¶ms, &TimestampFields::default(), None); @@ -2036,7 +2036,7 @@ fn overlong_datagram_detection_uses_extra_receive_byte() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); assert_eq!( client.recv_buffer.len(), echo_packet_len(false, ¶ms) + 1 @@ -2083,7 +2083,7 @@ fn exact_length_echo_reply_still_emits_echo_reply() { ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); client.send_probe().unwrap(); let events = client.recv_once().unwrap(); diff --git a/crates/irtt-client/src/client/tests/support.rs b/crates/irtt-client/src/client/tests/support.rs index 59c7bcd..27a8f60 100644 --- a/crates/irtt-client/src/client/tests/support.rs +++ b/crates/irtt-client/src/client/tests/support.rs @@ -283,7 +283,7 @@ pub(super) fn open_client_with_echo_server(params: &Params) -> (Client, FakeServ ..default_test_config(server.addr) }; let mut client = Client::connect(config).unwrap(); - assert_open_started(client.open(ClientTimestamp::now()).unwrap()); + assert_open_started(client.open().unwrap()); (client, server) } diff --git a/crates/irtt-client/src/client/tests/ttl.rs b/crates/irtt-client/src/client/tests/ttl.rs index f1b30c8..acb4652 100644 --- a/crates/irtt-client/src/client/tests/ttl.rs +++ b/crates/irtt-client/src/client/tests/ttl.rs @@ -29,7 +29,7 @@ fn connect_applies_configured_ipv4_ttl_before_open_and_close_preserves_it() { assert_eq!(socket_ttl(&client.socket, client.remote).unwrap(), 64); - client.open(ClientTimestamp::now()).unwrap(); + client.open().unwrap(); server.join(); client.close(ClientTimestamp::now()).unwrap(); diff --git a/crates/irtt-client/src/managed/runner.rs b/crates/irtt-client/src/managed/runner.rs index 8daf702..ceb8202 100644 --- a/crates/irtt-client/src/managed/runner.rs +++ b/crates/irtt-client/src/managed/runner.rs @@ -94,7 +94,7 @@ impl ManagedClient { .transpose()?; let mut client = Client::connect(config)?; - let outcome = client.open(ClientTimestamp::now())?; + let outcome = client.open()?; publish_open_outcome(&hub, &outcome); let cancellation = CancellationToken::new(); diff --git a/crates/irtt-client/tests/hmac.rs b/crates/irtt-client/tests/hmac.rs index d9c13a5..6edbe79 100644 --- a/crates/irtt-client/tests/hmac.rs +++ b/crates/irtt-client/tests/hmac.rs @@ -98,7 +98,7 @@ fn hmac_close_success_sends_authenticated_close_and_closes_session() { config.hmac_key = Some(key); let mut client = Client::connect(config).unwrap(); - let outcome = client.open(ClientTimestamp::now()).unwrap(); + let outcome = client.open().unwrap(); assert_started(outcome, ¶ms); let events = client.close(ClientTimestamp::now()).unwrap(); @@ -132,7 +132,7 @@ fn missing_client_key_against_hmac_required_server_times_out() { let mut client = Client::connect(config).unwrap(); assert!(matches!( - client.open(ClientTimestamp::now()), + client.open(), Err(ClientError::OpenTimeout) )); @@ -157,7 +157,7 @@ fn wrong_client_key_against_hmac_required_server_times_out() { let mut client = Client::connect(config).unwrap(); assert!(matches!( - client.open(ClientTimestamp::now()), + client.open(), Err(ClientError::OpenTimeout) )); @@ -185,7 +185,7 @@ fn bad_hmac_echo_reply_is_rejected_without_echo_reply_event() { }; let mut client = Client::connect(config).unwrap(); - let outcome = client.open(ClientTimestamp::now()).unwrap(); + let outcome = client.open().unwrap(); assert_started(outcome, ¶ms); let sent = client.send_probe().unwrap(); @@ -229,7 +229,7 @@ fn hmac_open_reply_with_bad_hmac_fails_with_protocol_error() { let mut client = Client::connect(config).unwrap(); assert!(matches!( - client.open(ClientTimestamp::now()), + client.open(), Err(ClientError::Protocol(ProtoError::BadHmac)) )); server.join(); @@ -247,7 +247,7 @@ fn non_hmac_client_open_does_not_set_hmac_flag() { config.hmac_key = None; let mut client = Client::connect(config).unwrap(); - let outcome = client.open(ClientTimestamp::now()).unwrap(); + let outcome = client.open().unwrap(); assert_started(outcome, ¶ms); let observations = server.observations(1); @@ -304,7 +304,7 @@ fn backend_hmac_correct_key_succeeds() { config.hmac_key = Some(key); let mut client = Client::connect(config).unwrap(); - let outcome = client.open(ClientTimestamp::now()).unwrap(); + let outcome = client.open().unwrap(); assert!(matches!(outcome, OpenOutcome::Started { .. })); let sent = client.send_probe().unwrap(); @@ -327,7 +327,7 @@ fn backend_hmac_wrong_key_fails() { let mut client = Client::connect(config).unwrap(); assert!(matches!( - client.open(ClientTimestamp::now()), + client.open(), Err(ClientError::OpenTimeout) )); } @@ -342,7 +342,7 @@ fn backend_hmac_missing_key_fails() { let mut client = Client::connect(config).unwrap(); assert!(matches!( - client.open(ClientTimestamp::now()), + client.open(), Err(ClientError::OpenTimeout) )); } diff --git a/crates/irtt-client/tests/large_packets.rs b/crates/irtt-client/tests/large_packets.rs index d3cc650..39f8d1f 100644 --- a/crates/irtt-client/tests/large_packets.rs +++ b/crates/irtt-client/tests/large_packets.rs @@ -128,7 +128,7 @@ fn backend_large_packet_smoke() { }) .unwrap(); - let outcome = client.open(ClientTimestamp::now()).unwrap(); + let outcome = client.open().unwrap(); assert!(matches!(outcome, irtt_client::OpenOutcome::Started { .. })); client.send_probe().unwrap(); diff --git a/crates/irtt-client/tests/protocol_options.rs b/crates/irtt-client/tests/protocol_options.rs index 34cbb60..44bac90 100644 --- a/crates/irtt-client/tests/protocol_options.rs +++ b/crates/irtt-client/tests/protocol_options.rs @@ -167,7 +167,7 @@ fn strict_open_rejects_changed_compatibility_params_from_server() { config.server_addr = server.addr.to_string(); let mut client = Client::connect(config).unwrap(); assert!(matches!( - client.open(irtt_client::ClientTimestamp::now()), + client.open(), Err(ClientError::NegotiationRejected { .. }) )); server.join(); @@ -379,7 +379,7 @@ fn backend_basic_open_echo_close() { let peer = BackendPeer::start_open_echo(params.clone(), None); let mut client = Client::connect(config_for_params(peer.addr(), ¶ms)).unwrap(); - let outcome = client.open(ClientTimestamp::now()).unwrap(); + let outcome = client.open().unwrap(); assert!(matches!(outcome, irtt_client::OpenOutcome::Started { .. })); let sent = client.send_probe().unwrap(); @@ -400,7 +400,7 @@ fn backend_ttl_smoke() { config.socket_config.ttl = Some(64); let mut client = Client::connect(config).unwrap(); - let outcome = client.open(ClientTimestamp::now()).unwrap(); + let outcome = client.open().unwrap(); assert!(matches!(outcome, irtt_client::OpenOutcome::Started { .. })); let sent = client.send_probe().unwrap(); @@ -420,7 +420,7 @@ fn dscp_configured_open_close_smoke() { let server = start_open_server(params.clone(), None); let mut client = Client::connect(config_for_params(server.addr, ¶ms)).unwrap(); - let outcome = client.open(ClientTimestamp::now()).unwrap(); + let outcome = client.open().unwrap(); assert!(matches!(outcome, irtt_client::OpenOutcome::Started { .. })); client.close(ClientTimestamp::now()).unwrap(); server.join(); @@ -438,7 +438,7 @@ fn backend_received_stats_smoke() { let peer = BackendPeer::start_open_echo(params.clone(), None); let mut client = Client::connect(config_for_params(peer.addr(), ¶ms)).unwrap(); - client.open(ClientTimestamp::now()).unwrap(); + client.open().unwrap(); client.send_probe().unwrap(); let events = client.recv_once().unwrap(); assert_eq!(events.len(), 1); @@ -461,7 +461,7 @@ fn backend_timestamp_smoke() { let peer = BackendPeer::start_open_echo(params.clone(), None); let mut client = Client::connect(config_for_params(peer.addr(), ¶ms)).unwrap(); - client.open(ClientTimestamp::now()).unwrap(); + client.open().unwrap(); client.send_probe().unwrap(); let events = client.recv_once().unwrap(); assert_eq!(events.len(), 1); @@ -508,7 +508,7 @@ fn backend_clock_smoke() { let peer = BackendPeer::start_open_echo(params.clone(), None); let mut client = Client::connect(config_for_params(peer.addr(), ¶ms)).unwrap(); - client.open(ClientTimestamp::now()).unwrap(); + client.open().unwrap(); client.send_probe().unwrap(); let events = client.recv_once().unwrap(); assert_eq!(events.len(), 1); diff --git a/crates/irtt-client/tests/server_fill.rs b/crates/irtt-client/tests/server_fill.rs index 7a453fa..af9c1c3 100644 --- a/crates/irtt-client/tests/server_fill.rs +++ b/crates/irtt-client/tests/server_fill.rs @@ -112,7 +112,7 @@ fn server_fill_strict_rejects_removed_fill() { let server = start_open_server(returned, None); let mut client = Client::connect(config_for_params(server.addr, &requested)).unwrap(); assert!(matches!( - client.open(ClientTimestamp::now()), + client.open(), Err(ClientError::NegotiationRejected { .. }) )); server.join(); @@ -129,7 +129,7 @@ fn server_fill_strict_rejects_different_fill_value() { let server = start_open_server(returned, None); let mut client = Client::connect(config_for_params(server.addr, &requested)).unwrap(); assert!(matches!( - client.open(ClientTimestamp::now()), + client.open(), Err(ClientError::NegotiationRejected { .. }) )); server.join(); @@ -145,7 +145,7 @@ fn server_fill_strict_rejects_unexpected_fill_from_server() { let server = start_open_server(returned, None); let mut client = Client::connect(config_for_params(server.addr, &requested)).unwrap(); assert!(matches!( - client.open(ClientTimestamp::now()), + client.open(), Err(ClientError::NegotiationRejected { .. }) )); server.join(); diff --git a/crates/irtt-client/tests/support/mod.rs b/crates/irtt-client/tests/support/mod.rs index fb49e35..02dec96 100644 --- a/crates/irtt-client/tests/support/mod.rs +++ b/crates/irtt-client/tests/support/mod.rs @@ -216,7 +216,7 @@ where { let server = start_one_probe_server(server_params, timestamps, hmac_key); let mut client = Client::connect(build_config(server.addr)).unwrap(); - let negotiated = assert_started(client.open(ClientTimestamp::now()).unwrap()); + let negotiated = assert_started(client.open().unwrap()); let sent_events = client.send_probe().unwrap(); assert_eq!(sent_events.len(), 1);