From af2ad813bf7d892523689159145ca23d8e33d36b Mon Sep 17 00:00:00 2001 From: Neil Tallim Date: Tue, 5 Sep 2023 10:26:09 -0600 Subject: [PATCH 1/4] Removed unnecessary mut flag --- src/stream/udp.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/stream/udp.rs b/src/stream/udp.rs index 80404bd..4bda8af 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. From 39c0d97644af18b2445ca4ab2db82991f1dcd98f Mon Sep 17 00:00:00 2001 From: Neil Tallim Date: Tue, 5 Sep 2023 10:30:06 -0600 Subject: [PATCH 2/4] Removed use of deprecated from_timestamp() call, even though it's just explicitly unwrapped anyway, effectively gaining nothing --- src/stream/udp.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/stream/udp.rs b/src/stream/udp.rs index 4bda8af..dbecd45 100644 --- a/src/stream/udp.rs +++ b/src/stream/udp.rs @@ -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); From 180df09e4d951015bb2cabd1ac596a0eac2662b9 Mon Sep 17 00:00:00 2001 From: Neil Tallim Date: Tue, 5 Sep 2023 17:59:56 -0600 Subject: [PATCH 3/4] Fixing tests --- test.py | 45 ++++++++++++++++++--------------------------- 1 file changed, 18 insertions(+), 27 deletions(-) diff --git a/test.py b/test.py index 51c4a2c..5aa10fe 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'], 3.5, delta=1.0) 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'], 3.5, delta=1.0) 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,7 +115,7 @@ 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']['framed_packet_size'], 1208) self.assertEqual(result['summary']['packets_duplicate'], 0) self.assertEqual(result['summary']['packets_lost'], 0) self.assertEqual(result['summary']['packets_out_of_order'], 0) @@ -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,7 +138,7 @@ 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']['framed_packet_size'], 1208) self.assertEqual(result['summary']['packets_duplicate'], 0) self.assertEqual(result['summary']['packets_lost'], 0) self.assertEqual(result['summary']['packets_out_of_order'], 0) @@ -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,7 +204,7 @@ 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']['framed_packet_size'], 1208) self.assertEqual(result['summary']['packets_duplicate'], 0) self.assertEqual(result['summary']['packets_lost'], 0) self.assertEqual(result['summary']['packets_out_of_order'], 0) @@ -232,7 +226,7 @@ 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']['framed_packet_size'], 1208) self.assertEqual(result['summary']['packets_duplicate'], 0) self.assertEqual(result['summary']['packets_lost'], 0) self.assertEqual(result['summary']['packets_out_of_order'], 0) @@ -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: From f1172fbf726a583b225e5e39231d7e20cf305f24 Mon Sep 17 00:00:00 2001 From: Neil Tallim Date: Tue, 5 Sep 2023 23:33:52 -0600 Subject: [PATCH 4/4] Unit tests updated --- test.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/test.py b/test.py index 5aa10fe..ed311d4 100755 --- a/test.py +++ b/test.py @@ -81,7 +81,7 @@ def test_tcp_forward(self): self.assertEqual(result['config']['additional']['ip_version'], 4) self.assertEqual(result['summary']['bytes_received'], result['summary']['bytes_sent']) self.assertAlmostEqual(result['summary']['bytes_received'], 2000000, delta=50000) - self.assertAlmostEqual(result['summary']['duration_receive'], 3.5, delta=1.0) + self.assertAlmostEqual(result['summary']['duration_receive'], 4.0, delta=0.1) def test_tcp_reverse(self): result = _run_rperf_client_ipv4(( @@ -98,7 +98,7 @@ def test_tcp_reverse(self): self.assertEqual(result['config']['additional']['ip_version'], 4) self.assertEqual(result['summary']['bytes_received'], result['summary']['bytes_sent']) self.assertAlmostEqual(result['summary']['bytes_received'], 2000000, delta=50000) - self.assertAlmostEqual(result['summary']['duration_receive'], 3.5, delta=1.0) + self.assertAlmostEqual(result['summary']['duration_receive'], 4.0, delta=0.1) def test_udp_forward(self): result = _run_rperf_client_ipv4(( @@ -116,11 +116,11 @@ def test_udp_forward(self): 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'], 1208) - self.assertEqual(result['summary']['packets_duplicate'], 0) + 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(( @@ -139,11 +139,11 @@ def test_udp_reverse(self): 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'], 1208) - self.assertEqual(result['summary']['packets_duplicate'], 0) + 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) @@ -205,7 +205,7 @@ def test_udp_forward(self): 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'], 1208) - self.assertEqual(result['summary']['packets_duplicate'], 0) + 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) @@ -227,7 +227,7 @@ def test_udp_reverse(self): 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'], 1208) - self.assertEqual(result['summary']['packets_duplicate'], 0) + 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)