diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2023-12-14 11:27:43 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-14 11:27:43 (GMT) |
commit | c6e953be125c491226adc1a5bc9c804ce256aa17 (patch) | |
tree | bd77aa26b276a3cc19dff9e37df59f0b3816f048 | |
parent | 23a5711100271e5a8b9dd9ab48b10807627ef4fb (diff) | |
download | cpython-c6e953be125c491226adc1a5bc9c804ce256aa17.zip cpython-c6e953be125c491226adc1a5bc9c804ce256aa17.tar.gz cpython-c6e953be125c491226adc1a5bc9c804ce256aa17.tar.bz2 |
gh-113090: Fix test.support.os_support.can_chmod() on Windows (GH-113091)
-rw-r--r-- | Lib/test/support/os_helper.py | 10 | ||||
-rw-r--r-- | Lib/test/test_os.py | 2 | ||||
-rw-r--r-- | Lib/test/test_posix.py | 4 | ||||
-rw-r--r-- | Lib/test/test_tarfile.py | 2 |
4 files changed, 12 insertions, 6 deletions
diff --git a/Lib/test/support/os_helper.py b/Lib/test/support/os_helper.py index 7a67d87..20f38fd 100644 --- a/Lib/test/support/os_helper.py +++ b/Lib/test/support/os_helper.py @@ -247,15 +247,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 @@ -302,6 +302,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 diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py index d4680ef..c66c579 100644 --- a/Lib/test/test_os.py +++ b/Lib/test/test_os.py @@ -1743,7 +1743,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 diff --git a/Lib/test/test_posix.py b/Lib/test/test_posix.py index 4eb3cac..887420f 100644 --- a/Lib/test/test_posix.py +++ b/Lib/test/test_posix.py @@ -791,7 +791,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) diff --git a/Lib/test/test_tarfile.py b/Lib/test/test_tarfile.py index 761560b..edfeac6 100644 --- a/Lib/test/test_tarfile.py +++ b/Lib/test/test_tarfile.py @@ -3452,7 +3452,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('/'): |