[Python-checkins] bpo-39460: Fix test_zipfile.test_add_file_after_2107() (GH-18247)

Miss Islington (bot) webhook-mailer at python.org
Wed Jan 29 09:41:55 EST 2020


https://github.com/python/cpython/commit/2b675f0c8fd96f61977f6dc636f44fbd5587b6b3
commit: 2b675f0c8fd96f61977f6dc636f44fbd5587b6b3
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: GitHub <noreply at github.com>
date: 2020-01-29T06:41:49-08:00
summary:

bpo-39460: Fix test_zipfile.test_add_file_after_2107() (GH-18247)


XFS filesystem is limited to 32-bit timestamp, but the utimensat()
syscall doesn't fail. Moreover, there is a VFS bug which returns
a cached timestamp which is different than the value on disk.

https://bugzilla.redhat.com/show_bug.cgi?id=1795576
https://bugs.python.org/issue39460GH-msg360952
(cherry picked from commit 3cb49b62e61208efcefbc04414e769fc173f205d)

Co-authored-by: Victor Stinner <vstinner at python.org>

files:
M Lib/test/test_zipfile.py

diff --git a/Lib/test/test_zipfile.py b/Lib/test/test_zipfile.py
index f03c044eae3a6..0737c343cbf5f 100644
--- a/Lib/test/test_zipfile.py
+++ b/Lib/test/test_zipfile.py
@@ -602,6 +602,18 @@ def test_add_file_after_2107(self):
         except OverflowError:
             self.skipTest('Host fs cannot set timestamp to required value.')
 
+        mtime_ns = os.stat(TESTFN).st_mtime_ns
+        if mtime_ns != (4386268800 * 10**9):
+            # XFS filesystem is limited to 32-bit timestamp, but the syscall
+            # didn't fail. Moreover, there is a VFS bug which returns
+            # a cached timestamp which is different than the value on disk.
+            #
+            # Test st_mtime_ns rather than st_mtime to avoid rounding issues.
+            #
+            # https://bugzilla.redhat.com/show_bug.cgi?id=1795576
+            # https://bugs.python.org/issue39460#msg360952
+            self.skipTest(f"Linux VFS/XFS kernel bug detected: {mtime_ns=}")
+
         with zipfile.ZipFile(TESTFN2, "w") as zipfp:
             self.assertRaises(struct.error, zipfp.write, TESTFN)
 



More information about the Python-checkins mailing list