summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2023-12-14 11:27:43 (GMT)
committerGitHub <noreply@github.com>2023-12-14 11:27:43 (GMT)
commitc6e953be125c491226adc1a5bc9c804ce256aa17 (patch)
treebd77aa26b276a3cc19dff9e37df59f0b3816f048
parent23a5711100271e5a8b9dd9ab48b10807627ef4fb (diff)
downloadcpython-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.py10
-rw-r--r--Lib/test/test_os.py2
-rw-r--r--Lib/test/test_posix.py4
-rw-r--r--Lib/test/test_tarfile.py2
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('/'):