diff options
author | Ayush Jain <ayushjain@google.com> | 2023-06-13 17:01:08 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2023-06-13 17:01:08 +0000 |
commit | e148ba6326344f7d809696b4afd91d41f1166995 (patch) | |
tree | 9d718362ead33c5df928518c07f44441ee34329f | |
parent | 4897bfc84465a011cd369fb7ddfb52752aa02210 (diff) | |
parent | 753f19061fb32a0689352ecf9ee1e00242ce7da0 (diff) | |
download | uwb-e148ba6326344f7d809696b4afd91d41f1166995.tar.gz |
Fix race condition in pcap log test. am: 753f19061f
Original change: https://android-review.googlesource.com/c/platform/external/uwb/+/2623532
Change-Id: I66c1031217d968ad8b6a530ae1690d5f50a23447
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r-- | src/rust/uwb_core/src/uci/pcapng_uci_logger_factory.rs | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/src/rust/uwb_core/src/uci/pcapng_uci_logger_factory.rs b/src/rust/uwb_core/src/uci/pcapng_uci_logger_factory.rs index 7c191b7..e99bb8b 100644 --- a/src/rust/uwb_core/src/uci/pcapng_uci_logger_factory.rs +++ b/src/rust/uwb_core/src/uci/pcapng_uci_logger_factory.rs @@ -502,6 +502,7 @@ mod tests { fn test_no_preexisting_dir_created() { let dir_root = Path::new("./uwb_test_dir_123"); let dir = dir_root.join("this/path/doesnt/exist"); + let log_path = dir.join("log.pcapng"); { let runtime = Builder::new_multi_thread().enable_all().build().unwrap(); let mut file_manager = PcapngUciLoggerFactoryBuilder::new() @@ -515,12 +516,19 @@ mod tests { let packet_0 = UciVendor_A_NotificationBuilder { opcode: 0, payload: None }.build(); logger_0.log_uci_control_packet(packet_0.into()); // Sleep needed to guarantee handling pending logs before runtime goes out of scope. - thread::sleep(time::Duration::from_millis(10)); + let mut timeout = 100; + let timeout_slice = 10; + loop { + if log_path.exists() || timeout == 0 { + break; + } + thread::sleep(time::Duration::from_millis(timeout_slice)); + timeout -= timeout_slice; + } } // Expect the dir was created. assert!(dir.is_dir()); // Expect the log file exists. - let log_path = dir.join("log.pcapng"); assert!(log_path.is_file()); // Clear test dir let _ = fs::remove_dir_all(dir_root); @@ -529,6 +537,7 @@ mod tests { #[test] fn test_single_file_write() { let dir = tempdir().unwrap(); + let last_file_expected = dir.as_ref().to_owned().join("log.pcapng"); { let runtime = Builder::new_multi_thread().enable_all().build().unwrap(); let mut file_manager = PcapngUciLoggerFactoryBuilder::new() @@ -547,7 +556,15 @@ mod tests { let packet_2 = UciVendor_A_NotificationBuilder { opcode: 2, payload: None }.build(); logger_0.log_uci_control_packet(packet_2.into()); // Sleep needed to guarantee handling pending logs before runtime goes out of scope. - thread::sleep(time::Duration::from_millis(10)); + let mut timeout = 100; + let timeout_slice = 10; + loop { + if last_file_expected.exists() || timeout == 0 { + break; + } + thread::sleep(time::Duration::from_millis(timeout_slice)); + timeout -= timeout_slice; + } } // Expect file log.pcapng consist of SHB->IDB(logger 0)->EPB(packet 0)->IDB(logger 1) // ->EPB(packet 1)->EPB(packet 2) @@ -629,6 +646,7 @@ mod tests { #[test] fn test_file_switch_idb_unfit_case() { let dir = tempdir().unwrap(); + let last_file_expected = dir.as_ref().to_owned().join("log_1.pcapng"); { let runtime = Builder::new_multi_thread().enable_all().build().unwrap(); let mut file_manager_144 = PcapngUciLoggerFactoryBuilder::new() @@ -648,7 +666,15 @@ mod tests { let packet_1 = UciVendor_A_NotificationBuilder { opcode: 1, payload: None }.build(); logger_1.log_uci_control_packet(packet_1.into()); // Sleep needed to guarantee handling pending logs before runtime goes out of scope. - thread::sleep(time::Duration::from_millis(10)); + let mut timeout = 100; + let timeout_slice = 10; + loop { + if last_file_expected.exists() || timeout == 0 { + break; + } + thread::sleep(time::Duration::from_millis(timeout_slice)); + timeout -= timeout_slice; + } } // Expect (Old to new): // File 1: SHB->IDB->EPB->EPB (cannot fit next) |