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).
#
# digits worth of sub-second precision.
# Some day it would be good to fix this upstream.
delta=1e-5
- self.assertAlmostEqual(st.st_atime, atime_ns * 1e-9, delta=1e-5)
+ if support_atime:
+ self.assertAlmostEqual(st.st_atime, atime_ns * 1e-9, delta=1e-5)
+ self.assertAlmostEqual(st.st_atime_ns, atime_ns, delta=1e9 * 1e-5)
self.assertAlmostEqual(st.st_mtime, mtime_ns * 1e-9, delta=1e-5)
- self.assertAlmostEqual(st.st_atime_ns, atime_ns, delta=1e9 * 1e-5)
self.assertAlmostEqual(st.st_mtime_ns, mtime_ns, delta=1e9 * 1e-5)
else:
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):