From 68393248947adaa61962cd44e9d49c44017ba94f Mon Sep 17 00:00:00 2001
From: Christian Heimes <christian@python.org>
Date: Sat, 23 Jul 2022 12:26:31 +0200
Subject: [PATCH] gh-90473: Fix more tests on platforms without umask
 (GH-95164)

---
 Lib/distutils/tests/test_dir_util.py | 7 +++++--
 Lib/test/support/os_helper.py        | 5 +++++
 Lib/test/test_os.py                  | 8 ++++++++
 3 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/Lib/distutils/tests/test_dir_util.py b/Lib/distutils/tests/test_dir_util.py
index f3ba0ee33b4..ebd89f320dc 100644
--- a/Lib/distutils/tests/test_dir_util.py
+++ b/Lib/distutils/tests/test_dir_util.py
@@ -11,7 +11,7 @@
 
 from distutils import log
 from distutils.tests import support
-from test.support import run_unittest, is_emscripten
+from test.support import run_unittest, is_emscripten, is_wasi
 
 
 class DirUtilTestCase(support.TempdirManager, unittest.TestCase):
@@ -55,7 +55,10 @@ def test_mkpath_remove_tree_verbosity(self):
 
     @unittest.skipIf(sys.platform.startswith('win'),
         "This test is only appropriate for POSIX-like systems.")
-    @unittest.skipIf(is_emscripten, "Emscripten's umask is a stub.")
+    @unittest.skipIf(
+        is_emscripten or is_wasi,
+        "Emscripten's/WASI's umask is a stub."
+    )
     def test_mkpath_with_custom_mode(self):
         # Get and set the current umask value for testing mode bits.
         umask = os.umask(0o002)
diff --git a/Lib/test/support/os_helper.py b/Lib/test/support/os_helper.py
index 61d12f59e4a..f37a442aa0e 100644
--- a/Lib/test/support/os_helper.py
+++ b/Lib/test/support/os_helper.py
@@ -658,6 +658,11 @@ def temp_umask(umask):
             yield
         finally:
             os.umask(oldmask)
+else:
+    @contextlib.contextmanager
+    def temp_umask(umask):
+        """no-op on platforms without umask()"""
+        yield
 
 
 class EnvironmentVarGuard(collections.abc.MutableMapping):
diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py
index 29f69a8f475..9970b234b48 100644
--- a/Lib/test/test_os.py
+++ b/Lib/test/test_os.py
@@ -1607,6 +1607,10 @@ def test_mode(self):
                 self.assertEqual(os.stat(path).st_mode & 0o777, 0o555)
                 self.assertEqual(os.stat(parent).st_mode & 0o777, 0o775)
 
+    @unittest.skipIf(
+        support.is_emscripten or support.is_wasi,
+        "Emscripten's/WASI's umask is a stub."
+    )
     def test_exist_ok_existing_directory(self):
         path = os.path.join(os_helper.TESTFN, 'dir1')
         mode = 0o777
@@ -1621,6 +1625,10 @@ def test_exist_ok_existing_directory(self):
         # Issue #25583: A drive root could raise PermissionError on Windows
         os.makedirs(os.path.abspath('/'), exist_ok=True)
 
+    @unittest.skipIf(
+        support.is_emscripten or support.is_wasi,
+        "Emscripten's/WASI's umask is a stub."
+    )
     def test_exist_ok_s_isgid_directory(self):
         path = os.path.join(os_helper.TESTFN, 'dir1')
         S_ISGID = stat.S_ISGID
-- 
GitLab