summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Wallace <dwallacelf@gmail.com>2023-11-27 20:23:03 -0500
committerFlorin Coras <florin.coras@gmail.com>2023-11-28 03:34:49 +0000
commit87a8826d173c4e4ff3da3a613f19eb9a91673a75 (patch)
tree8c4c3edd01f155aca7c0882cebc92ca011ab2d8c
parent4b08632748727486e7ebfdcf4d992743595bc500 (diff)
tests: refactor pcap file deletion to improve robustness
Type: test Change-Id: I504c079126bd8b33c5e217a1b9086788a8c778e5 Signed-off-by: Dave Wallace <dwallacelf@gmail.com>
-rw-r--r--test/asf/asfframework.py32
-rw-r--r--test/vpp_pg_interface.py7
2 files changed, 23 insertions, 16 deletions
diff --git a/test/asf/asfframework.py b/test/asf/asfframework.py
index 9839ff58543..ab7141e7fea 100644
--- a/test/asf/asfframework.py
+++ b/test/asf/asfframework.py
@@ -815,6 +815,26 @@ class VppAsfTestCase(CPUInterface, unittest.TestCase):
"""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 @@ class VppAsfTestCase(CPUInterface, unittest.TestCase):
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 cb17e2d9080..cdb91ed1e41 100644
--- a/test/vpp_pg_interface.py
+++ b/test/vpp_pg_interface.py
@@ -172,11 +172,8 @@ class VppPGInterface(VppInterface):
)
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):