tests: Correct timing of python tests with python3 < 3.7
authorKienan Stewart <kstewart@efficios.com>
Wed, 10 Jan 2024 16:11:08 +0000 (11:11 -0500)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Tue, 6 Feb 2024 22:29:45 +0000 (17:29 -0500)
`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 <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
tests/utils/lttngtest/tap_generator.py
tests/utils/test_utils.py

index f87c8c88ba5f8074b29b202cbbaeff1c84013b74..c05a76a1968fa66ba77264e42de8aaff29e304af 100644 (file)
@@ -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
index 8980cc8d13a3ebf7c0d785627049d80f810ca17c..9b124e3a124ba243964655dd93c4dbd7628841e5 100644 (file)
@@ -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
This page took 0.026997 seconds and 4 git commands to generate.