tests: refactor pcap file deletion to improve robustness
Type: test
Change-Id: I504c079126bd8b33c5e217a1b9086788a8c778e5
Signed-off-by: Dave Wallace <dwallacelf@gmail.com>
diff --git a/test/asf/asfframework.py b/test/asf/asfframework.py
index 9839ff5..ab7141e 100644
--- a/test/asf/asfframework.py
+++ b/test/asf/asfframework.py
@@ -815,6 +815,26 @@
"""Allow subclass specific teardown logging additions."""
self.logger.info("--- No test specific show commands provided. ---")
+ def unlink_testcase_file(self, path):
+ MAX_ATTEMPTS = 9
+ retries = MAX_ATTEMPTS
+ while retries > 0:
+ retries = retries - 1
+ self.logger.debug(f"Unlinking {path}")
+ try:
+ path.unlink()
+ # Loop until unlink() fails with FileNotFoundError to ensure file is removed
+ except FileNotFoundError:
+ break
+ except OSError:
+ self.logger.debug(f"OSError: unlinking {path}")
+ self.sleep(0.25, f"{retries} retries left")
+ if retries == 0 and os.path.isfile(path):
+ self.logger.error(
+ f"Unable to delete testcase file in {MAX_ATTEMPTS} attempts: {path}"
+ )
+ raise OSError
+
def tearDown(self):
"""Show various debug prints after each test"""
self.logger.debug(
@@ -853,17 +873,7 @@
if hasattr(self, "pg_interfaces") and len(self.pg_interfaces) > 0:
testcase_dir = os.path.dirname(self.pg_interfaces[0].out_path)
for p in Path(testcase_dir).glob("pg*.pcap"):
- retries = 8
- while retries > 0:
- retries = retries - 1
- self.logger.debug(f"Unlinking {p}")
- try:
- p.unlink()
- break
- except OSError:
- self.logger.debug(f"OSError: unlinking {p}")
- self.sleep(0.25, f"{retries} retries left")
-
+ self.unlink_testcase_file(p)
self.logger.debug(
f"--- END tearDown() {self.__class__.__name__}.{self._testMethodName}('{self._testMethodDoc}') ---"
)
diff --git a/test/vpp_pg_interface.py b/test/vpp_pg_interface.py
index cb17e2d..cdb91ed 100644
--- a/test/vpp_pg_interface.py
+++ b/test/vpp_pg_interface.py
@@ -172,11 +172,8 @@
)
def remove_old_pcap_file(self, path):
- try:
- self.test.logger.debug(f"Removing {path}")
- os.remove(path)
- except OSError:
- self.test.logger.debug(f"OSError: Could not remove {path}")
+ self.wait_for_pg_stop()
+ self.test.unlink_testcase_file(self.test, Path(path))
return
def decode_pcap_files(self, pcap_dir, filename_prefix):