From f7169e41979bb8a57ecf2ff3683fefa74e05179b Mon Sep 17 00:00:00 2001 From: Kienan Stewart Date: Wed, 10 Jan 2024 11:11:08 -0500 Subject: [PATCH] tests: Correct timing of python tests with python3 < 3.7 MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit `time.monotonic_ns()` was introduced in python 3.7. Prior to that, the other available monotonic time function was `time.monotonic()` which was itself introduced in python 3.3. For python3 < 3.3, the automatic timing of TAP tests is disabled. The use of underscores for readable integers was also only introduced in python 3.6. Change-Id: Ibf85669c4d108347097d2cea7ab5d28cde9d0cc6 Signed-off-by: Kienan Stewart Signed-off-by: Jérémie Galarneau --- tests/utils/lttngtest/tap_generator.py | 12 +++++++++--- tests/utils/test_utils.py | 17 ++++++++++++----- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/tests/utils/lttngtest/tap_generator.py b/tests/utils/lttngtest/tap_generator.py index f87c8c88b..c05a76a19 100644 --- a/tests/utils/lttngtest/tap_generator.py +++ b/tests/utils/lttngtest/tap_generator.py @@ -12,6 +12,12 @@ import time from typing import Iterator, Optional +def _get_time_ns(): + assert sys.version_info > (3, 3, 0) + # time.monotonic_ns is only available for python >= 3.8 + return time.monotonic() * 1000000000 + + class InvalidTestPlan(RuntimeError): def __init__(self, msg): # type: (str) -> None @@ -75,7 +81,7 @@ class TapGenerator: self._time_tests = True # type: bool if os.getenv("TAP_AUTOTIME", "1") == "" or os.getenv("TAP_AUTOTIME", "1") == "0": self._time_tests = False - self._last_time = time.monotonic_ns() + self._last_time = _get_time_ns() def __del__(self): if self.remaining_test_cases > 0: @@ -129,7 +135,7 @@ class TapGenerator: def test(self, result, description): # type: (bool, str) -> None - duration = (time.monotonic_ns() - self._last_time) / 1_000_000 + duration = (_get_time_ns() - self._last_time) / 1000000 if self._last_test_case_id == self._total_test_count: raise InvalidTestPlan("Executing too many tests") @@ -147,7 +153,7 @@ class TapGenerator: ) if self._time_tests: self._print("---\n duration_ms: {}\n...\n".format(duration)) - self._last_time = time.monotonic_ns() + self._last_time = _get_time_ns() def ok(self, description): # type: (str) -> None diff --git a/tests/utils/test_utils.py b/tests/utils/test_utils.py index 8980cc8d1..9b124e3a1 100644 --- a/tests/utils/test_utils.py +++ b/tests/utils/test_utils.py @@ -24,9 +24,16 @@ sys.path.append(lttng_bindings_libs_path) from lttng import * _time_tests = True -if os.getenv("TAP_AUTOTIME", "1") == "" or os.getenv("TAP_AUTOTIME", "1") == "0": +if os.getenv("TAP_AUTOTIME", "1") == "" or os.getenv("TAP_AUTOTIME", "1") == "0" or sys.version_info < (3,3,0): _time_tests = False -_last_time = time.monotonic_ns() + +def _get_time_ns(): + assert sys.version_info > (3, 3, 0) + # time.monotonic_ns is only available for python >= 3.8 + return time.monotonic() * 1000000000 + + +_last_time = _get_time_ns() BABELTRACE_BIN="babeltrace2" @@ -54,9 +61,9 @@ def print_automatic_test_timing(): global _last_time if not _time_tests: return - duration_ns = time.monotonic_ns() - _last_time - print(" ---\n duration_ms: {:02f}\n ...".format(duration_ns / 1_000_000)) - _last_time = time.monotonic_ns() + duration_ns = _get_time_ns() - _last_time + print(" ---\n duration_ms: {:02f}\n ...".format(duration_ns / 1000000)) + _last_time = _get_time_ns() def print_test_result(result, number, description): result_string = None -- 2.34.1