]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.11] gh-113090: Fix test.support.os_support.can_chmod() on Windows (GH-113091)...
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Thu, 14 Dec 2023 12:01:01 +0000 (13:01 +0100)
committerGitHub <noreply@github.com>
Thu, 14 Dec 2023 12:01:01 +0000 (14:01 +0200)
(cherry picked from commit c6e953be125c491226adc1a5bc9c804ce256aa17)

Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
Lib/test/support/os_helper.py
Lib/test/test_os.py
Lib/test/test_posix.py
Lib/test/test_tarfile.py

index 8aa9549e577bb365558c8a0b2b6e2ffdf7b64336..c1b2995ef37a12c902c4ef874ff644ae9ab4eedf 100644 (file)
@@ -243,15 +243,15 @@ def can_chmod():
     global _can_chmod
     if _can_chmod is not None:
         return _can_chmod
-    if not hasattr(os, "chown"):
+    if not hasattr(os, "chmod"):
         _can_chmod = False
         return _can_chmod
     try:
         with open(TESTFN, "wb") as f:
             try:
-                os.chmod(TESTFN, 0o777)
+                os.chmod(TESTFN, 0o555)
                 mode1 = os.stat(TESTFN).st_mode
-                os.chmod(TESTFN, 0o666)
+                os.chmod(TESTFN, 0o777)
                 mode2 = os.stat(TESTFN).st_mode
             except OSError as e:
                 can = False
@@ -298,6 +298,10 @@ def can_dac_override():
             else:
                 _can_dac_override = True
     finally:
+        try:
+            os.chmod(TESTFN, 0o700)
+        except OSError:
+            pass
         unlink(TESTFN)
 
     return _can_dac_override
index 441e1f977a55d37da7bbfc390632729a468762d1..b26a9359b0a19b542d949d57165b3bbdf2b8f20d 100644 (file)
@@ -1681,7 +1681,7 @@ class MakedirTests(unittest.TestCase):
         os.removedirs(path)
 
 
-@os_helper.skip_unless_working_chmod
+@unittest.skipUnless(hasattr(os, "chown"), "requires os.chown()")
 class ChownFileTests(unittest.TestCase):
 
     @classmethod
index def5709f20d02190107fc5cce43eb97483df792a..c2103313d26fcf0c2ea7bed8e3cb8cea49d0eed0 100644 (file)
@@ -788,7 +788,7 @@ class PosixTester(unittest.TestCase):
             self.assertRaises(TypeError, chown_func, first_param, uid, t(gid))
             check_stat(uid, gid)
 
-    @os_helper.skip_unless_working_chmod
+    @unittest.skipUnless(hasattr(os, "chown"), "requires os.chown()")
     @unittest.skipIf(support.is_emscripten, "getgid() is a stub")
     def test_chown(self):
         # raise an OSError if the file does not exist
@@ -956,6 +956,7 @@ class PosixTester(unittest.TestCase):
         finally:
             posix.chmod(target, mode)
 
+    @os_helper.skip_unless_working_chmod
     def test_chmod_file(self):
         self.check_chmod(posix.chmod, os_helper.TESTFN)
 
@@ -965,6 +966,7 @@ class PosixTester(unittest.TestCase):
         self.addCleanup(posix.rmdir, target)
         return target
 
+    @os_helper.skip_unless_working_chmod
     def test_chmod_dir(self):
         target = self.tempdir()
         self.check_chmod(posix.chmod, target)
index cad13a9e071ee28c845590820b3a336e4ef9c89e..ef85714fade1484b726c1c83ad691d2f81c0b92b 100644 (file)
@@ -3354,7 +3354,7 @@ class TestExtractionFilters(unittest.TestCase):
         path = pathlib.Path(os.path.normpath(self.destdir / name))
         self.assertIn(path, self.expected_paths)
         self.expected_paths.remove(path)
-        if mode is not None and os_helper.can_chmod():
+        if mode is not None and os_helper.can_chmod() and os.name != 'nt':
             got = stat.filemode(stat.S_IMODE(path.stat().st_mode))
             self.assertEqual(got, mode)
         if type is None and isinstance(name, str) and name.endswith('/'):