]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.13] gh-154427: Check the access time in UtimeTests only if it is stored (GH-154428...
authorSerhiy Storchaka <storchaka@gmail.com>
Wed, 22 Jul 2026 07:53:39 +0000 (10:53 +0300)
committerGitHub <noreply@github.com>
Wed, 22 Jul 2026 07:53:39 +0000 (07:53 +0000)
HAMMER2 on DragonFly BSD does not store the access time and os.stat()
returns the modification time instead.  Probe the file system, like it
is already done for the timestamp resolution.
(cherry picked from commit 6f8f97fe5246837b93e6c2f3525aa9f623ecd30b)

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Lib/test/test_os.py

index 9b6a05fdbe25e80ab7875754b1233317bf272ea9..e143dc35b581c53f2019bafa36405249fd33da57 100644 (file)
@@ -791,11 +791,18 @@ class UtimeTests(unittest.TestCase):
                 or (st.st_mtime != st[8])
                 or (st.st_ctime != st[9]))
 
+    def support_atime(self, filename):
+        # Heuristic to check if the filesystem stores the access time.
+        # Use whole seconds, to not depend on the timestamp resolution.
+        os.utime(filename, (1, 2))
+        return os.stat(filename).st_atime == 1
+
     def _test_utime(self, set_time, filename=None):
         if not filename:
             filename = self.fname
 
         support_subsecond = self.support_subsecond(filename)
+        support_atime = self.support_atime(filename)
         if support_subsecond:
             # Timestamp with a resolution of 1 microsecond (10^-6).
             #
@@ -814,12 +821,15 @@ class UtimeTests(unittest.TestCase):
         st = os.stat(filename)
 
         if support_subsecond:
-            self.assertAlmostEqual(st.st_atime, atime_ns * 1e-9, delta=1e-6)
+            if support_atime:
+                self.assertAlmostEqual(st.st_atime, atime_ns * 1e-9, delta=1e-6)
             self.assertAlmostEqual(st.st_mtime, mtime_ns * 1e-9, delta=1e-6)
         else:
-            self.assertEqual(st.st_atime, atime_ns * 1e-9)
+            if support_atime:
+                self.assertEqual(st.st_atime, atime_ns * 1e-9)
             self.assertEqual(st.st_mtime, mtime_ns * 1e-9)
-        self.assertEqual(st.st_atime_ns, atime_ns)
+        if support_atime:
+            self.assertEqual(st.st_atime_ns, atime_ns)
         self.assertEqual(st.st_mtime_ns, mtime_ns)
 
     def test_utime(self):