]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.9] bpo-45042: Now test classes decorated with `requires_hashdigest` are not skippe...
authorSerhiy Storchaka <storchaka@gmail.com>
Sun, 5 Sep 2021 06:41:33 +0000 (09:41 +0300)
committerGitHub <noreply@github.com>
Sun, 5 Sep 2021 06:41:33 +0000 (09:41 +0300)
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>.
(cherry picked from commit dd7b816ac87e468e2fa65ce83c2a03fe1da8503e)

Co-authored-by: Nikita Sobolev <mail@sobolevn.me>
Lib/test/_test_multiprocessing.py
Lib/test/support/hashlib_helper.py
Lib/test/test_tools/test_md5sum.py
Misc/NEWS.d/next/Tests/2021-08-30-11-54-14.bpo-45042.QMz3X8.rst [new file with mode: 0644]

index 3072e5860189a233598c6d3f56fc5b3e8c537ac2..8f60122cb512e8bb09f3884ac38804b3f16d6c39 100644 (file)
@@ -3769,6 +3769,7 @@ class _TestSharedMemory(BaseTestCase):
         local_sms.buf[:len(binary_data)] = binary_data
         local_sms.close()
 
+    @unittest.skipIf(sys.platform == "win32", "test is broken on Windows")
     def test_shared_memory_basics(self):
         sms = shared_memory.SharedMemory('test01_tsmb', create=True, size=512)
         self.addCleanup(sms.unlink)
index a28132a565a0b5a3f831f0c22938122c1b120eb7..a4e6c92203ab5004d564d47bf7437f07e7a5813f 100644 (file)
@@ -21,8 +21,21 @@ def requires_hashdigest(digestname, openssl=None, usedforsecurity=True):
     ValueError: [digital envelope routines: EVP_DigestInit_ex] disabled for FIPS
     ValueError: unsupported hash type md4
     """
-    def decorator(func):
-        @functools.wraps(func)
+    def decorator(func_or_class):
+        if isinstance(func_or_class, type):
+            setUpClass = func_or_class.__dict__.get('setUpClass')
+            if setUpClass is None:
+                def setUpClass(cls):
+                    super(func_or_class, cls).setUpClass()
+                setUpClass.__qualname__ = func_or_class.__qualname__ + '.setUpClass'
+                setUpClass.__module__ = func_or_class.__module__
+            else:
+                setUpClass = setUpClass.__func__
+            setUpClass = classmethod(decorator(setUpClass))
+            func_or_class.setUpClass = setUpClass
+            return func_or_class
+
+        @functools.wraps(func_or_class)
         def wrapper(*args, **kwargs):
             try:
                 if openssl and _hashlib is not None:
@@ -33,6 +46,6 @@ def requires_hashdigest(digestname, openssl=None, usedforsecurity=True):
                 raise unittest.SkipTest(
                     f"hash digest '{digestname}' is not available."
                 )
-            return func(*args, **kwargs)
+            return func_or_class(*args, **kwargs)
         return wrapper
     return decorator
index 321bc4bb3628261fe0474ae6d29d836b246cfcff..7321b488be5a552da94a4b2680ff0f5d1af2166e 100644 (file)
@@ -1,5 +1,6 @@
 """Tests for the md5sum script in the Tools directory."""
 
+import sys
 import os
 import unittest
 from test import support
@@ -15,8 +16,8 @@ class MD5SumTests(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
         cls.script = os.path.join(scriptsdir, 'md5sum.py')
-        os.mkdir(support.TESTFN)
-        cls.fodder = os.path.join(support.TESTFN, 'md5sum.fodder')
+        os.mkdir(support.TESTFN_ASCII)
+        cls.fodder = os.path.join(support.TESTFN_ASCII, 'md5sum.fodder')
         with open(cls.fodder, 'wb') as f:
             f.write(b'md5sum\r\ntest file\r\n')
         cls.fodder_md5 = b'd38dae2eb1ab346a292ef6850f9e1a0d'
@@ -24,7 +25,7 @@ class MD5SumTests(unittest.TestCase):
 
     @classmethod
     def tearDownClass(cls):
-        support.rmtree(support.TESTFN)
+        support.rmtree(support.TESTFN_ASCII)
 
     def test_noargs(self):
         rc, out, err = assert_python_ok(self.script)
diff --git a/Misc/NEWS.d/next/Tests/2021-08-30-11-54-14.bpo-45042.QMz3X8.rst b/Misc/NEWS.d/next/Tests/2021-08-30-11-54-14.bpo-45042.QMz3X8.rst
new file mode 100644 (file)
index 0000000..e2c0dff
--- /dev/null
@@ -0,0 +1 @@
+Fixes that test classes decorated with ``@hashlib_helper.requires_hashdigest`` were skipped all the time.
\ No newline at end of file