Skip to content

Commit 68ebc05

Browse files
authored
gh-86533: Make Path.mkdir parent_mode tests umask-independent (#150040)
test_mkdir_with_parent_mode, test_mkdir_parent_mode_deep_hierarchy and test_mkdir_parent_mode_same_as_mode assert exact directory mode bits but did not pin the process umask. On buildbots running with a restrictive umask (e.g. 0o077) the 0o755 leaf was masked down to 0o700, failing the assertions. Wrap them in os_helper.temp_umask(0o022), matching the other umask-aware mkdir tests in this file.
1 parent 17eb17d commit 68ebc05

1 file changed

Lines changed: 25 additions & 22 deletions

File tree

Lib/test/test_pathlib/test_pathlib.py

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2526,14 +2526,15 @@ def test_mkdir_with_parent_mode(self):
25262526
p = self.cls(self.base, 'newdirPM', 'subdirPM')
25272527
self.assertFalse(p.exists())
25282528
if os.name != 'nt':
2529-
# Specify different modes for parent and leaf directories
2530-
p.mkdir(0o755, parents=True, parent_mode=0o750)
2531-
self.assertTrue(p.exists())
2532-
self.assertTrue(p.is_dir())
2533-
# Leaf directory gets the mode parameter
2534-
self.assertEqual(p.stat().st_mode & 0o777, 0o755)
2535-
# Parent directory gets the parent_mode parameter
2536-
self.assertEqual(p.parent.stat().st_mode & 0o777, 0o750)
2529+
with os_helper.temp_umask(0o022):
2530+
# Specify different modes for parent and leaf directories
2531+
p.mkdir(0o755, parents=True, parent_mode=0o750)
2532+
self.assertTrue(p.exists())
2533+
self.assertTrue(p.is_dir())
2534+
# Leaf directory gets the mode parameter
2535+
self.assertEqual(p.stat().st_mode & 0o777, 0o755)
2536+
# Parent directory gets the parent_mode parameter
2537+
self.assertEqual(p.parent.stat().st_mode & 0o777, 0o750)
25372538

25382539
@unittest.skipIf(
25392540
is_emscripten or is_wasi,
@@ -2548,15 +2549,16 @@ def test_mkdir_parent_mode_deep_hierarchy(self):
25482549
p = self.cls(self.base, 'level1PM', 'level2PM', 'level3PM')
25492550
self.assertFalse(p.exists())
25502551
if os.name != 'nt':
2551-
p.mkdir(0o755, parents=True, parent_mode=0o700)
2552-
self.assertTrue(p.exists())
2553-
# Check that all parent directories have parent_mode
2554-
level1 = self.cls(self.base, 'level1PM')
2555-
level2 = level1 / 'level2PM'
2556-
self.assertEqual(level1.stat().st_mode & 0o777, 0o700)
2557-
self.assertEqual(level2.stat().st_mode & 0o777, 0o700)
2558-
# Leaf directory has the regular mode
2559-
self.assertEqual(p.stat().st_mode & 0o777, 0o755)
2552+
with os_helper.temp_umask(0o022):
2553+
p.mkdir(0o755, parents=True, parent_mode=0o700)
2554+
self.assertTrue(p.exists())
2555+
# Check that all parent directories have parent_mode
2556+
level1 = self.cls(self.base, 'level1PM')
2557+
level2 = level1 / 'level2PM'
2558+
self.assertEqual(level1.stat().st_mode & 0o777, 0o700)
2559+
self.assertEqual(level2.stat().st_mode & 0o777, 0o700)
2560+
# Leaf directory has the regular mode
2561+
self.assertEqual(p.stat().st_mode & 0o777, 0o755)
25602562

25612563
@unittest.skipIf(
25622564
is_emscripten or is_wasi,
@@ -2593,11 +2595,12 @@ def test_mkdir_parent_mode_same_as_mode(self):
25932595
p = self.cls(self.base, 'samedirPM', 'subdirPM')
25942596
self.assertFalse(p.exists())
25952597
if os.name != 'nt':
2596-
p.mkdir(0o705, parents=True, parent_mode=0o705)
2597-
self.assertTrue(p.exists())
2598-
# Both directories should have the same mode
2599-
self.assertEqual(p.stat().st_mode & 0o777, 0o705)
2600-
self.assertEqual(p.parent.stat().st_mode & 0o777, 0o705)
2598+
with os_helper.temp_umask(0o022):
2599+
p.mkdir(0o705, parents=True, parent_mode=0o705)
2600+
self.assertTrue(p.exists())
2601+
# Both directories should have the same mode
2602+
self.assertEqual(p.stat().st_mode & 0o777, 0o705)
2603+
self.assertEqual(p.parent.stat().st_mode & 0o777, 0o705)
26012604

26022605
@needs_symlinks
26032606
def test_symlink_to(self):

0 commit comments

Comments
 (0)