From 8a5e382450359a884bbe594547dfb810e9196d0e Mon Sep 17 00:00:00 2001 From: Michael Jeanson Date: Tue, 27 Jun 2023 17:33:18 +0000 Subject: [PATCH] Tests: python: path-like object introduced in python 3.6 MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Prior to python 3.6 the os.path() function expected a string or bytes object for the pathname. Use a compat method to convert the path-like object to a string on interpreters that lack PEP-519 [1] support. Traceback (most recent call last): File "tests/regression/tools/context/test_ust.py", line 156, in tap, test_env, lttngtest.VpidContextType(), lambda test_app: test_app.vpid File "tests/regression/tools/context/test_ust.py", line 114, in test_static_context test_app = test_env.launch_wait_trace_test_application(50) File "tests/utils/lttngtest/environment.py", line 541, in launch_wait_trace_test_application wait_before_exit_file_path, File "tests/utils/lttngtest/environment.py", line 163, in __init__ self._wait_for_file_to_be_created(pathlib.Path(app_ready_file_path)) File "tests/utils/lttngtest/environment.py", line 168, in _wait_for_file_to_be_created if os.path.exists(sync_file_path): File "/usr/lib/python3.5/genericpath.py", line 19, in exists os.stat(path) TypeError: argument should be string, bytes or integer, not PosixPath [1] https://peps.python.org/pep-0519/ Change-Id: I783e36f61223d44667294ccbf4b3aec5bff68701 Signed-off-by: Michael Jeanson Signed-off-by: Jérémie Galarneau --- tests/utils/lttngtest/environment.py | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/tests/utils/lttngtest/environment.py b/tests/utils/lttngtest/environment.py index 4be5fb4fa..60c42f51c 100644 --- a/tests/utils/lttngtest/environment.py +++ b/tests/utils/lttngtest/environment.py @@ -100,7 +100,7 @@ class _WaitTraceTestApplication: tempfile.mktemp( prefix="app_", suffix="_start_tracing", - dir=self._compat_open_path(environment.lttng_home_location), + dir=self._compat_pathlike(environment.lttng_home_location), ) ) # File that the application will create when all events have been emitted. @@ -108,7 +108,7 @@ class _WaitTraceTestApplication: tempfile.mktemp( prefix="app_", suffix="_done_tracing", - dir=self._compat_open_path(environment.lttng_home_location), + dir=self._compat_pathlike(environment.lttng_home_location), ) ) @@ -117,7 +117,7 @@ class _WaitTraceTestApplication: tempfile.mktemp( prefix="app_", suffix="_exit", - dir=self._compat_open_path(environment.lttng_home_location), + dir=self._compat_pathlike(environment.lttng_home_location), ) ) @@ -133,7 +133,7 @@ class _WaitTraceTestApplication: app_ready_file_path = tempfile.mktemp( prefix="app_", suffix="_ready", - dir=self._compat_open_path(environment.lttng_home_location), + dir=self._compat_pathlike(environment.lttng_home_location), ) # type: str test_app_args = [str(binary_path)] @@ -165,7 +165,7 @@ class _WaitTraceTestApplication: def _wait_for_file_to_be_created(self, sync_file_path): # type: (pathlib.Path) -> None while True: - if os.path.exists(sync_file_path): + if os.path.exists(self._compat_pathlike(sync_file_path)): break if self._process.poll() is not None: @@ -187,7 +187,7 @@ class _WaitTraceTestApplication: return_code=self._process.returncode ) ) - open(self._compat_open_path(self._app_start_tracing_file_path), mode="x") + open(self._compat_pathlike(self._app_start_tracing_file_path), mode="x") def wait_for_tracing_done(self): # type: () -> None @@ -209,12 +209,13 @@ class _WaitTraceTestApplication: return self._process.pid @staticmethod - def _compat_open_path(path): + def _compat_pathlike(path): # type: (pathlib.Path) -> pathlib.Path | str """ - The builtin open() in python >= 3.6 expects a path-like object while - prior versions expect a string or bytes object. Return the correct type - based on the presence of the "__fspath__" attribute specified in PEP-519. + The builtin open() and many methods of the 'os' library in Python >= 3.6 + expect a path-like object while prior versions expect a string or + bytes object. Return the correct type based on the presence of the + "__fspath__" attribute specified in PEP-519. """ if hasattr(path, "__fspath__"): return path @@ -243,7 +244,7 @@ class WaitTraceTestApplicationGroup: tempfile.mktemp( prefix="app_group_", suffix="_exit", - dir=_WaitTraceTestApplication._compat_open_path( + dir=_WaitTraceTestApplication._compat_pathlike( environment.lttng_home_location ), ) @@ -294,7 +295,7 @@ class WaitTraceTestApplicationGroup: app.wait_for_tracing_done() open( - _WaitTraceTestApplication._compat_open_path( + _WaitTraceTestApplication._compat_pathlike( self._wait_before_exit_file_path ), mode="x", -- 2.34.1