]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-118518: Check for perf version and not kernel version in test_perf_profiler (...
authorPablo Galindo Salgado <Pablogsal@gmail.com>
Tue, 7 May 2024 19:41:07 +0000 (20:41 +0100)
committerGitHub <noreply@github.com>
Tue, 7 May 2024 19:41:07 +0000 (20:41 +0100)
Lib/test/test_perf_profiler.py

index 496983f7b49f52e63cd2a8bc53fc3875c73d93a7..7c1bbeed168d2e42551d5aa4fc3e5c9ce749e7bb 100644 (file)
@@ -479,17 +479,23 @@ class TestPerfProfiler(unittest.TestCase, TestPerfProfilerMixin):
             if f"py::foo_fork:{script}" in line or f"py::bar_fork:{script}" in line:
                 self.assertIn(line, child_perf_file_contents)
 
-def _is_kernel_version_at_least(major, minor):
+
+def _is_perf_vesion_at_least(major, minor):
+    # The output of perf --version looks like "perf version 6.7-3" but
+    # it can also be perf version "perf version 5.15.143"
     try:
-        with open("/proc/version") as f:
-            version = f.readline().split()[2]
-    except FileNotFoundError:
+        output = subprocess.check_output(["perf", "--version"], text=True)
+    except (subprocess.CalledProcessError, FileNotFoundError):
         return False
+    version = output.split()[2]
+    version = version.split("-")[0]
     version = version.split(".")
-    return int(version[0]) > major or (int(version[0]) == major and int(version[1]) >= minor)
+    version = tuple(map(int, version))
+    return version >= (major, minor)
+
 
 @unittest.skipUnless(perf_command_works(), "perf command doesn't work")
-@unittest.skipUnless(_is_kernel_version_at_least(6, 6), "perf command may not work due to a perf bug")
+@unittest.skipUnless(_is_perf_vesion_at_least(6, 6), "perf command may not work due to a perf bug")
 class TestPerfProfilerWithDwarf(unittest.TestCase, TestPerfProfilerMixin):
     def run_perf(self, script_dir, script, activate_trampoline=True):
         if activate_trampoline: