diff --git a/src/stream/udp.rs b/src/stream/udp.rs index 80404bd..dbecd45 100644 --- a/src/stream/udp.rs +++ b/src/stream/udp.rs @@ -222,7 +222,7 @@ pub mod receiver { }) } - fn process_packets_ordering(&mut self, packet_id:u64, mut history:&mut UdpReceiverIntervalHistory) -> bool { + fn process_packets_ordering(&mut self, packet_id:u64, history:&mut UdpReceiverIntervalHistory) -> bool { /* the algorithm from iperf3 provides a pretty decent approximation * for tracking lost and out-of-order packets efficiently, so it's * been minimally reimplemented here, with corrections. @@ -255,7 +255,7 @@ pub mod receiver { * will remain effectively constant during the testing window */ let now = SystemTime::now().duration_since(UNIX_EPOCH).expect("system time before UNIX epoch"); - let current_timestamp = NaiveDateTime::from_timestamp(now.as_secs() as i64, now.subsec_nanos()); + let current_timestamp = NaiveDateTime::from_timestamp_opt(now.as_secs() as i64, now.subsec_nanos()).unwrap(); let time_delta = current_timestamp - *timestamp; @@ -299,7 +299,7 @@ pub mod receiver { let origin_seconds = i64::from_be_bytes(packet[24..32].try_into().unwrap()); //and the following four are the number of nanoseconds since the UNIX epoch let origin_nanoseconds = u32::from_be_bytes(packet[32..36].try_into().unwrap()); - let source_timestamp = NaiveDateTime::from_timestamp(origin_seconds, origin_nanoseconds); + let source_timestamp = NaiveDateTime::from_timestamp_opt(origin_seconds, origin_nanoseconds).unwrap(); history.unbroken_sequence += 1; self.process_jitter(&source_timestamp, &mut history); diff --git a/test.py b/test.py index 51c4a2c..ed311d4 100755 --- a/test.py +++ b/test.py @@ -71,7 +71,6 @@ def test_tcp_forward(self): result = _run_rperf_client_ipv4(( '-b', '500000', #keep it light, at 500kBps per stream '-l', '4096', #try to send 4k of data at a time - '-O', '1', #omit the first second of data from summaries '-P', '2', #two parallel streams '-t', '2', #run for two seconds )) @@ -81,15 +80,14 @@ def test_tcp_forward(self): self.assertEqual(result['config']['additional']['reverse'], False) self.assertEqual(result['config']['additional']['ip_version'], 4) self.assertEqual(result['summary']['bytes_received'], result['summary']['bytes_sent']) - self.assertAlmostEqual(result['summary']['bytes_received'], 1000000, delta=50000) - self.assertAlmostEqual(result['summary']['duration_receive'], 2.0, delta=0.1) + self.assertAlmostEqual(result['summary']['bytes_received'], 2000000, delta=50000) + self.assertAlmostEqual(result['summary']['duration_receive'], 4.0, delta=0.1) def test_tcp_reverse(self): result = _run_rperf_client_ipv4(( '-R', #run in reverse mode '-b', '500000', #keep it light, at 500kBps per stream '-l', '4096', #try to send 4k of data at a time - '-O', '1', #omit the first second of data from summaries '-P', '2', #two parallel streams '-t', '2', #run for two seconds )) @@ -99,15 +97,14 @@ def test_tcp_reverse(self): self.assertEqual(result['config']['additional']['reverse'], True) self.assertEqual(result['config']['additional']['ip_version'], 4) self.assertEqual(result['summary']['bytes_received'], result['summary']['bytes_sent']) - self.assertAlmostEqual(result['summary']['bytes_received'], 1000000, delta=50000) - self.assertAlmostEqual(result['summary']['duration_receive'], 2.0, delta=0.1) + self.assertAlmostEqual(result['summary']['bytes_received'], 2000000, delta=50000) + self.assertAlmostEqual(result['summary']['duration_receive'], 4.0, delta=0.1) def test_udp_forward(self): result = _run_rperf_client_ipv4(( '-u', #run UDP test '-b', '500000', #keep it light, at 500kBps per stream '-l', '1200', #try to send 1200 bytes of data at a time - '-O', '1', #omit the first second of data from summaries '-P', '2', #two parallel streams '-t', '2', #run for two seconds )) @@ -118,12 +115,12 @@ def test_udp_forward(self): self.assertEqual(result['config']['additional']['ip_version'], 4) self.assertEqual(result['summary']['bytes_received'], result['summary']['bytes_sent']) self.assertEqual(result['summary']['packets_received'], result['summary']['packets_sent']) - self.assertEqual(result['summary']['framed_packet_size'], 1228) - self.assertEqual(result['summary']['packets_duplicate'], 0) + self.assertEqual(result['summary']['framed_packet_size'], 1208) + self.assertEqual(result['summary']['packets_duplicated'], 0) self.assertEqual(result['summary']['packets_lost'], 0) self.assertEqual(result['summary']['packets_out_of_order'], 0) - self.assertAlmostEqual(result['summary']['bytes_received'], 1000000, delta=50000) - self.assertAlmostEqual(result['summary']['duration_receive'], 2.0, delta=0.1) + self.assertAlmostEqual(result['summary']['bytes_received'], 2000000, delta=50000) + self.assertAlmostEqual(result['summary']['duration_receive'], 4.0, delta=0.1) def test_udp_reverse(self): result = _run_rperf_client_ipv4(( @@ -131,7 +128,6 @@ def test_udp_reverse(self): '-R', #run in reverse mode '-b', '500000', #keep it light, at 500kBps per stream '-l', '1200', #try to send 1200 bytes of data at a time - '-O', '1', #omit the first second of data from summaries '-P', '2', #two parallel streams '-t', '2', #run for two seconds )) @@ -142,12 +138,12 @@ def test_udp_reverse(self): self.assertEqual(result['config']['additional']['ip_version'], 4) self.assertEqual(result['summary']['bytes_received'], result['summary']['bytes_sent']) self.assertEqual(result['summary']['packets_received'], result['summary']['packets_sent']) - self.assertEqual(result['summary']['framed_packet_size'], 1228) - self.assertEqual(result['summary']['packets_duplicate'], 0) + self.assertEqual(result['summary']['framed_packet_size'], 1208) + self.assertEqual(result['summary']['packets_duplicated'], 0) self.assertEqual(result['summary']['packets_lost'], 0) self.assertEqual(result['summary']['packets_out_of_order'], 0) - self.assertAlmostEqual(result['summary']['bytes_received'], 1000000, delta=50000) - self.assertAlmostEqual(result['summary']['duration_receive'], 2.0, delta=0.1) + self.assertAlmostEqual(result['summary']['bytes_received'], 2000000, delta=50000) + self.assertAlmostEqual(result['summary']['duration_receive'], 4.0, delta=0.1) @@ -167,7 +163,6 @@ def test_tcp_forward(self): result = _run_rperf_client_ipv6(( '-b', '500000', #keep it light, at 500kBps per stream '-l', '4096', #try to send 4k of data at a time - '-O', '1', #omit the first second of data from summaries '-t', '2', #run for two seconds )) self.assertTrue(result['success']) @@ -176,15 +171,14 @@ def test_tcp_forward(self): self.assertEqual(result['config']['additional']['reverse'], False) self.assertEqual(result['config']['additional']['ip_version'], 6) self.assertEqual(result['summary']['bytes_received'], result['summary']['bytes_sent']) - self.assertAlmostEqual(result['summary']['bytes_received'], 500000, delta=25000) - self.assertAlmostEqual(result['summary']['duration_receive'], 1.0, delta=0.1) + self.assertAlmostEqual(result['summary']['bytes_received'], 1000000, delta=25000) + self.assertAlmostEqual(result['summary']['duration_receive'], 2.0, delta=0.1) def test_tcp_reverse(self): result = _run_rperf_client_ipv6(( '-R', #run in reverse mode '-b', '500000', #keep it light, at 500kBps per stream '-l', '4096', #try to send 4k of data at a time - '-O', '1', #omit the first second of data from summaries '-t', '2', #run for two seconds )) self.assertTrue(result['success']) @@ -193,8 +187,8 @@ def test_tcp_reverse(self): self.assertEqual(result['config']['additional']['reverse'], True) self.assertEqual(result['config']['additional']['ip_version'], 6) self.assertEqual(result['summary']['bytes_received'], result['summary']['bytes_sent']) - self.assertAlmostEqual(result['summary']['bytes_received'], 500000, delta=25000) - self.assertAlmostEqual(result['summary']['duration_receive'], 1.0, delta=0.1) + self.assertAlmostEqual(result['summary']['bytes_received'], 1000000, delta=25000) + self.assertAlmostEqual(result['summary']['duration_receive'], 2.0, delta=0.1) def test_udp_forward(self): result = _run_rperf_client_ipv6(( @@ -210,8 +204,8 @@ def test_udp_forward(self): self.assertEqual(result['config']['additional']['ip_version'], 6) self.assertEqual(result['summary']['bytes_received'], result['summary']['bytes_sent']) self.assertEqual(result['summary']['packets_received'], result['summary']['packets_sent']) - self.assertEqual(result['summary']['framed_packet_size'], 1228) - self.assertEqual(result['summary']['packets_duplicate'], 0) + self.assertEqual(result['summary']['framed_packet_size'], 1208) + self.assertEqual(result['summary']['packets_duplicated'], 0) self.assertEqual(result['summary']['packets_lost'], 0) self.assertEqual(result['summary']['packets_out_of_order'], 0) self.assertAlmostEqual(result['summary']['bytes_received'], 500000, delta=25000) @@ -232,8 +226,8 @@ def test_udp_reverse(self): self.assertEqual(result['config']['additional']['ip_version'], 6) self.assertEqual(result['summary']['bytes_received'], result['summary']['bytes_sent']) self.assertEqual(result['summary']['packets_received'], result['summary']['packets_sent']) - self.assertEqual(result['summary']['framed_packet_size'], 1228) - self.assertEqual(result['summary']['packets_duplicate'], 0) + self.assertEqual(result['summary']['framed_packet_size'], 1208) + self.assertEqual(result['summary']['packets_duplicated'], 0) self.assertEqual(result['summary']['packets_lost'], 0) self.assertEqual(result['summary']['packets_out_of_order'], 0) self.assertAlmostEqual(result['summary']['bytes_received'], 500000, delta=25000) @@ -258,7 +252,6 @@ def test_hostname(self): '-N', #disable Nagle's algorithm '-b', '500000', #keep it light, at 500kBps per stream '-l', '4096', #try to send 4k of data at a time - '-O', '1', #omit the first second of data from summaries '-t', '2', #run for two seconds )) self.assertTrue(result['success']) @@ -266,8 +259,8 @@ def test_hostname(self): self.assertEqual(result['config']['common']['streams'], 1) self.assertEqual(result['config']['additional']['reverse'], False) self.assertEqual(result['summary']['bytes_received'], result['summary']['bytes_sent']) - self.assertAlmostEqual(result['summary']['bytes_received'], 500000, delta=25000) - self.assertAlmostEqual(result['summary']['duration_receive'], 1.0, delta=0.1) + self.assertAlmostEqual(result['summary']['bytes_received'], 1000000, delta=25000) + self.assertAlmostEqual(result['summary']['duration_receive'], 1.75, delta=0.5) def test_hostname_reverse(self): result = _run_rperf_client_hostname(( @@ -275,7 +268,6 @@ def test_hostname_reverse(self): '-R', #run in reverse mode '-b', '500000', #keep it light, at 500kBps per stream '-l', '4096', #try to send 4k of data at a time - '-O', '1', #omit the first second of data from summaries '-t', '2', #run for two seconds )) self.assertTrue(result['success']) @@ -283,15 +275,14 @@ def test_hostname_reverse(self): self.assertEqual(result['config']['common']['streams'], 1) self.assertEqual(result['config']['additional']['reverse'], True) self.assertEqual(result['summary']['bytes_received'], result['summary']['bytes_sent']) - self.assertAlmostEqual(result['summary']['bytes_received'], 500000, delta=25000) - self.assertAlmostEqual(result['summary']['duration_receive'], 1.0, delta=0.1) + self.assertAlmostEqual(result['summary']['bytes_received'], 1000000, delta=25000) + self.assertAlmostEqual(result['summary']['duration_receive'], 1.75, delta=0.5) def test_ipv4_mapped_with_core_affinity(self): result = _run_rperf_client_ipv4(( '-A', '2,3', #set CPU core-affinity to 2 and 3 '-b', '500000', #keep it light, at 500kBps per stream '-l', '4096', #try to send 4k of data at a time - '-O', '1', #omit the first second of data from summaries '-P', '2', #two parallel streams '-t', '2', #run for two seconds )) @@ -301,8 +292,8 @@ def test_ipv4_mapped_with_core_affinity(self): self.assertEqual(result['config']['additional']['reverse'], False) self.assertEqual(result['config']['additional']['ip_version'], 4) self.assertEqual(result['summary']['bytes_received'], result['summary']['bytes_sent']) - self.assertAlmostEqual(result['summary']['bytes_received'], 1000000, delta=50000) - self.assertAlmostEqual(result['summary']['duration_receive'], 2.0, delta=0.1) + self.assertAlmostEqual(result['summary']['bytes_received'], 2000000, delta=50000) + self.assertAlmostEqual(result['summary']['duration_receive'], 3.5, delta=1.0) def test_multiple_simultaneous_clients(self): with concurrent.futures.ThreadPoolExecutor() as executor: