]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.11] gh-108416: Mark slow test methods with @requires_resource('cpu') (GH-108421...
authorSerhiy Storchaka <storchaka@gmail.com>
Sun, 3 Sep 2023 06:34:30 +0000 (09:34 +0300)
committerGitHub <noreply@github.com>
Sun, 3 Sep 2023 06:34:30 +0000 (09:34 +0300)
Only mark tests which spend significant system or user time,
by itself or in subprocesses.
(cherry picked from commit f3ba0a74cd50274acdcd592d4ce8395b92492b7c)

30 files changed:
Lib/test/_test_multiprocessing.py
Lib/test/pickletester.py
Lib/test/test_ast.py
Lib/test/test_buffer.py
Lib/test/test_builtin.py
Lib/test/test_compile.py
Lib/test/test_compileall.py
Lib/test/test_concurrent_futures.py
Lib/test/test_context.py
Lib/test/test_cppext/__init__.py
Lib/test/test_descr.py
Lib/test/test_email/test_email.py
Lib/test/test_exceptions.py
Lib/test/test_gdb.py
Lib/test/test_itertools.py
Lib/test/test_largefile.py
Lib/test/test_multibytecodec.py
Lib/test/test_peepholer.py
Lib/test/test_runpy.py
Lib/test/test_selectors.py
Lib/test/test_source_encoding.py
Lib/test/test_statistics.py
Lib/test/test_subprocess.py
Lib/test/test_support.py
Lib/test/test_sys_settrace.py
Lib/test/test_tools/test_freeze.py
Lib/test/test_trace.py
Lib/test/test_unicodedata.py
Lib/test/test_venv.py
Lib/test/test_weakref.py

index 3476371f07f7ed9773a3cd0b34d280c57a4539eb..45ca80b08bf3ca9db298a8674e6c172a445b8822 100644 (file)
@@ -328,6 +328,7 @@ class _TestProcess(BaseTestCase):
             p.join()
             self.assertEqual(p.exitcode, 0)
 
+    @support.requires_resource('cpu')
     def test_args_argument(self):
         # bpo-45735: Using list or tuple as *args* in constructor could
         # achieve the same effect.
@@ -4470,6 +4471,7 @@ class _TestFinalize(BaseTestCase):
         result = [obj for obj in iter(conn.recv, 'STOP')]
         self.assertEqual(result, ['a', 'b', 'd10', 'd03', 'd02', 'd01', 'e'])
 
+    @support.requires_resource('cpu')
     def test_thread_safety(self):
         # bpo-24484: _run_finalizers() should be thread-safe
         def cb():
index 6e87370c2065ba531fb9938b2132a432f9fd7250..a687fe0629080a88ec8532ef4644eced7145144c 100644 (file)
@@ -2576,6 +2576,7 @@ class AbstractPickleTests:
             self.assertLess(pos - frameless_start, self.FRAME_SIZE_MIN)
 
     @support.skip_if_pgo_task
+    @support.requires_resource('cpu')
     def test_framing_many_objects(self):
         obj = list(range(10**5))
         for proto in range(4, pickle.HIGHEST_PROTOCOL + 1):
index 33c13ee29a268920098bd9a206af5270d6149136..c8d2f916dbd5f0f93962a7e2632501793652c9a5 100644 (file)
@@ -1701,6 +1701,7 @@ class ASTValidatorTests(unittest.TestCase):
     def test_nameconstant(self):
         self.expr(ast.NameConstant(4))
 
+    @support.requires_resource('cpu')
     def test_stdlib_validates(self):
         stdlib = os.path.dirname(ast.__file__)
         tests = [fn for fn in os.listdir(stdlib) if fn.endswith(".py")]
index 468c6ea9def923413d75ea03012e4d661a580eb8..e9149d1ac497c99dbbe745bcec3455b366f2f13d 100644 (file)
@@ -1019,6 +1019,7 @@ class TestBufferProtocol(unittest.TestCase):
                     ndim=ndim, shape=shape, strides=strides,
                     lst=lst, sliced=sliced)
 
+    @support.requires_resource('cpu')
     def test_ndarray_getbuf(self):
         requests = (
             # distinct flags
@@ -2750,6 +2751,7 @@ class TestBufferProtocol(unittest.TestCase):
             m = memoryview(ex)
             iter_roundtrip(ex, m, items, fmt)
 
+    @support.requires_resource('cpu')
     def test_memoryview_cast_1D_ND(self):
         # Cast between C-contiguous buffers. At least one buffer must
         # be 1D, at least one format must be 'c', 'b' or 'B'.
index 9078c409cc44b22649e3f68145e933427604bfc5..2f56121616629e948ccce1d18026a4aacb1bf281 100644 (file)
@@ -918,6 +918,7 @@ class BuiltinTest(unittest.TestCase):
             f2 = filter(filter_char, "abcdeabcde")
             self.check_iter_pickle(f1, list(f2), proto)
 
+    @support.requires_resource('cpu')
     def test_filter_dealloc(self):
         # Tests recursive deallocation of nested filter objects using the
         # thrashcan mechanism. See gh-102356 for more details.
index c756d43a3cf3b8376fcb881557973fc7803a7412..b286ab7cfe7e6bf1e684386957dd0828efb1fa30 100644 (file)
@@ -741,6 +741,7 @@ if 1:
         # An implicit test for PyUnicode_FSDecoder().
         compile("42", FakePath("test_compile_pathlike"), "single")
 
+    @support.requires_resource('cpu')
     def test_stack_overflow(self):
         # bpo-31113: Stack overflow when compile a long sequence of
         # complex statements.
index 05154c8f1c6057169bf26730f71f17d2407e4c77..df7c5122b3b1f5316a043dd63966e4520b2c2b5a 100644 (file)
@@ -551,6 +551,7 @@ class CommandLineTestsBase:
             self.assertNotCompiled(self.barfn)
 
     @without_source_date_epoch  # timestamp invalidation test
+    @support.requires_resource('cpu')
     def test_no_args_respects_force_flag(self):
         bazfn = script_helper.make_script(self.directory, 'baz', '')
         with self.temporary_pycache_prefix() as env:
@@ -568,6 +569,7 @@ class CommandLineTestsBase:
         mtime2 = os.stat(pycpath).st_mtime
         self.assertNotEqual(mtime, mtime2)
 
+    @support.requires_resource('cpu')
     def test_no_args_respects_quiet_flag(self):
         script_helper.make_script(self.directory, 'baz', '')
         with self.temporary_pycache_prefix() as env:
index 4558560e1a992f09fd5fe3499486662ab172c88e..a2a4d873b1389c7efe8fb113b5e7859939e9c800 100644 (file)
@@ -946,6 +946,7 @@ class ThreadPoolExecutorTest(ThreadPoolMixin, ExecutorTest, BaseTestCase):
         executor.shutdown(wait=True)
 
     @unittest.skipUnless(hasattr(os, 'register_at_fork'), 'need os.register_at_fork')
+    @support.requires_resource('cpu')
     def test_hang_global_shutdown_lock(self):
         # bpo-45021: _global_shutdown_lock should be reinitialized in the child
         # process, otherwise it will never exit
index b1aece4f5c9c495b9fd8b74b8e0990e34d07fb45..dc6856509a40a01a85ec628bba165f545119499e 100644 (file)
@@ -6,6 +6,7 @@ import random
 import time
 import unittest
 import weakref
+from test import support
 from test.support import threading_helper
 
 try:
@@ -570,6 +571,7 @@ class HamtTest(unittest.TestCase):
 
         self.assertEqual({k.name for k in h.keys()}, {'C', 'D', 'E'})
 
+    @support.requires_resource('cpu')
     def test_hamt_stress(self):
         COLLECTION_SIZE = 7000
         TEST_ITERS_EVERY = 647
index 4ce29b7ff2c23e10c7ae088d7c95ecd5547fd9c2..37247e4ac01e711483798d82b491505a1124ad13 100644 (file)
@@ -15,9 +15,11 @@ SETUP = os.path.join(os.path.dirname(__file__), 'setup.py')
 
 @support.requires_subprocess()
 class TestCPPExt(unittest.TestCase):
+    @support.requires_resource('cpu')
     def test_build_cpp11(self):
         self.check_build(False, '_testcpp11ext')
 
+    @support.requires_resource('cpu')
     def test_build_cpp03(self):
         self.check_build(True, '_testcpp03ext')
 
index f07d7d4596599c76c98e6d8e3fdaeca45a2461b6..2a12695031d34a48dc263ebf3a241a2a53d5401a 100644 (file)
@@ -4453,6 +4453,7 @@ order (MRO) for bases """
         o.whatever = Provoker(o)
         del o
 
+    @support.requires_resource('cpu')
     def test_wrapper_segfault(self):
         # SF 927248: deeply nested wrappers could cause stack overflow
         f = lambda:None
index 2bb651609f572b8c853f6b466792a8037b14ba31..677f2094b835f3540775a565cdb70b517ce2143f 100644 (file)
@@ -39,6 +39,7 @@ from email import iterators
 from email import quoprimime
 from email import utils
 
+from test import support
 from test.support import threading_helper
 from test.support.os_helper import unlink
 from test.test_email import openfile, TestEmailBase
@@ -3342,6 +3343,7 @@ Foo
         self.assertEqual(addrs[0][1], 'aperson@dom.ain')
 
     @threading_helper.requires_working_threading()
+    @support.requires_resource('cpu')
     def test_make_msgid_collisions(self):
         # Test make_msgid uniqueness, even with multiple threads
         class MsgidsThread(Thread):
index d7133adf058920cecb4e64d9b49d71a7d25aeec7..6f34e29e42f7c7416b50ebbe17d1a18663854d1b 100644 (file)
@@ -1304,6 +1304,7 @@ class ExceptionTests(unittest.TestCase):
 
 
     @cpython_only
+    @support.requires_resource('cpu')
     def test_trashcan_recursion(self):
         # See bpo-33930
 
index 0f39b8f45714ad341a6c2036caa96c3081ad4177..bba9b07c6708b5dfc169a69695f019a3cb2a304c 100644 (file)
@@ -317,6 +317,7 @@ class PrettyPrintTests(DebuggerTests):
                          ('%r did not equal expected %r; full output was:\n%s'
                           % (gdb_repr, exp_repr, gdb_output)))
 
+    @support.requires_resource('cpu')
     def test_int(self):
         'Verify the pretty-printing of various int values'
         self.assertGdbRepr(42)
@@ -343,6 +344,7 @@ class PrettyPrintTests(DebuggerTests):
         self.assertGdbRepr([])
         self.assertGdbRepr(list(range(5)))
 
+    @support.requires_resource('cpu')
     def test_bytes(self):
         'Verify the pretty-printing of bytes'
         self.assertGdbRepr(b'')
@@ -357,6 +359,7 @@ class PrettyPrintTests(DebuggerTests):
 
         self.assertGdbRepr(bytes([b for b in range(255)]))
 
+    @support.requires_resource('cpu')
     def test_strings(self):
         'Verify the pretty-printing of unicode strings'
         # We cannot simply call locale.getpreferredencoding() here,
@@ -407,6 +410,7 @@ class PrettyPrintTests(DebuggerTests):
         self.assertGdbRepr((1,), '(1,)')
         self.assertGdbRepr(('foo', 'bar', 'baz'))
 
+    @support.requires_resource('cpu')
     def test_sets(self):
         'Verify the pretty-printing of sets'
         if (gdb_major_version, gdb_minor_version) < (7, 3):
@@ -425,6 +429,7 @@ s.remove('a')
 id(s)''')
         self.assertEqual(gdb_repr, "{'b'}")
 
+    @support.requires_resource('cpu')
     def test_frozensets(self):
         'Verify the pretty-printing of frozensets'
         if (gdb_major_version, gdb_minor_version) < (7, 3):
@@ -828,6 +833,7 @@ Traceback \(most recent call first\):
 
     @unittest.skipIf(python_is_optimized(),
                      "Python was compiled with optimizations")
+    @support.requires_resource('cpu')
     def test_threads(self):
         'Verify that "py-bt" indicates threads that are waiting for the GIL'
         cmd = '''
@@ -889,6 +895,7 @@ id(42)
 
     @unittest.skipIf(python_is_optimized(),
                      "Python was compiled with optimizations")
+    @support.requires_resource('cpu')
     # Some older versions of gdb will fail with
     #  "Cannot find new threads: generic error"
     # unless we add LD_PRELOAD=PATH-TO-libpthread.so.1 as a workaround
index 311c2a3288dc8cf2baa6c764d30f2430186cfa84..0d0030e41609951ab24a5d9adfb11dfd05890780 100644 (file)
@@ -2229,6 +2229,7 @@ class RegressionTests(unittest.TestCase):
         self.assertEqual(hist, [0,1])
 
     @support.skip_if_pgo_task
+    @support.requires_resource('cpu')
     def test_long_chain_of_empty_iterables(self):
         # Make sure itertools.chain doesn't run into recursion limits when
         # dealing with long chains of empty iterables. Even with a high
index 3c11c59baef6e55c86a7c16bac2532f079fab8c1..3b0930fe69e30e8ba33ada442bbf798f2d8a0adc 100644 (file)
@@ -8,7 +8,7 @@ import unittest
 import socket
 import shutil
 import threading
-from test.support import requires, bigmemtest
+from test.support import requires, bigmemtest, requires_resource
 from test.support import SHORT_TIMEOUT
 from test.support import socket_helper
 from test.support.os_helper import TESTFN, unlink
@@ -173,6 +173,7 @@ class TestCopyfile(LargeFileTest, unittest.TestCase):
     # Exact required disk space would be (size * 2), but let's give it a
     # bit more tolerance.
     @skip_no_disk_space(TESTFN, size * 2.5)
+    @requires_resource('cpu')
     def test_it(self):
         # Internally shutil.copyfile() can use "fast copy" methods like
         # os.sendfile().
@@ -222,6 +223,7 @@ class TestSocketSendfile(LargeFileTest, unittest.TestCase):
     # Exact required disk space would be (size * 2), but let's give it a
     # bit more tolerance.
     @skip_no_disk_space(TESTFN, size * 2.5)
+    @requires_resource('cpu')
     def test_it(self):
         port = socket_helper.find_unused_port()
         with socket.create_server(("", port)) as sock:
index cf8bb5e3a0520d2cf7add7d29c584fe33605135e..6451df1469693343de004302a5c3a407901eb4d2 100644 (file)
@@ -363,6 +363,7 @@ class Test_ISO2022(unittest.TestCase):
             e = '\u3406'.encode(encoding)
             self.assertFalse(any(x > 0x80 for x in e))
 
+    @support.requires_resource('cpu')
     def test_bug1572832(self):
         for x in range(0x10000, 0x110000):
             # Any ISO 2022 codec will cause the segfault
index 241644ad7d2ff067e717d62fb28824d766cf193b..d06a70bd296deb8ee2c7a74bf4ef99a67e5a103c 100644 (file)
@@ -3,6 +3,7 @@ from itertools import combinations, product
 import textwrap
 import unittest
 
+from test import support
 from test.support.bytecode_helper import BytecodeTestCase
 
 
@@ -523,6 +524,7 @@ class TestTranforms(BytecodeTestCase):
             return (y for x in a for y in [f(x)])
         self.assertEqual(count_instr_recursively(genexpr, 'FOR_ITER'), 1)
 
+    @support.requires_resource('cpu')
     def test_format_combinations(self):
         flags = '-+ #0'
         testcases = [
index 6aaa288c14e1d70fb9e67a618b8246f3e9096624..628c8cae38a75194476a2d5fd37c1f09c42f83f6 100644 (file)
@@ -12,7 +12,7 @@ import tempfile
 import textwrap
 import unittest
 import warnings
-from test.support import no_tracing, verbose, requires_subprocess
+from test.support import no_tracing, verbose, requires_subprocess, requires_resource
 from test.support.import_helper import forget, make_legacy_pyc, unload
 from test.support.os_helper import create_empty_file, temp_dir
 from test.support.script_helper import make_script, make_zip_script
@@ -733,6 +733,7 @@ class RunPathTestCase(unittest.TestCase, CodeExecutionMixin):
             self._check_import_error(zip_name, msg)
 
     @no_tracing
+    @requires_resource('cpu')
     def test_main_recursion_error(self):
         with temp_dir() as script_dir, temp_dir() as dummy_dir:
             mod_name = '__main__'
index c2db88c203920a9d2c077fe58ccdc6d040ddaadb..12ecc50d550c4fc82ccc8a7e0f10ae519214da47 100644 (file)
@@ -449,6 +449,7 @@ class ScalableSelectorMixIn:
     # see issue #18963 for why it's skipped on older OS X versions
     @support.requires_mac_ver(10, 5)
     @unittest.skipUnless(resource, "Test needs resource module")
+    @support.requires_resource('cpu')
     def test_above_fd_setsize(self):
         # A scalable implementation should have no problem with more than
         # FD_SETSIZE file descriptors. Since we don't know the value, we just
index 5fe0f3124444bacfbbe664be184d317297ddd7a3..ae680c516400a3586115c4e0330a51731a821393 100644 (file)
@@ -1,7 +1,7 @@
 # -*- coding: koi8-r -*-
 
 import unittest
-from test.support import script_helper, captured_stdout, requires_subprocess
+from test.support import script_helper, captured_stdout, requires_subprocess, requires_resource
 from test.support.os_helper import TESTFN, unlink, rmtree
 from test.support.import_helper import unload
 import importlib
@@ -251,6 +251,7 @@ class AbstractSourceEncodingTest:
 class UTF8ValidatorTest(unittest.TestCase):
     @unittest.skipIf(not sys.platform.startswith("linux"),
                      "Too slow to run on non-Linux platforms")
+    @requires_resource('cpu')
     def test_invalid_utf8(self):
         # This is a port of test_utf8_decode_invalid_sequences in
         # test_unicode.py to exercise the separate utf8 validator in
index 3e172e974e125dd371fa41140a454b055da1413c..9e69d918e37a694c708b153018a7697c90897073 100644 (file)
@@ -2139,6 +2139,7 @@ class TestSqrtHelpers(unittest.TestCase):
             self.assertTrue(m * (r - 1)**2 < n < m * (r + 1)**2)
 
     @requires_IEEE_754
+    @support.requires_resource('cpu')
     def test_float_sqrt_of_frac(self):
 
         def is_root_correctly_rounded(x: Fraction, root: float) -> bool:
@@ -2744,6 +2745,7 @@ class TestNormalDist:
         self.assertTrue(math.isnan(X.cdf(float('NaN'))))
 
     @support.skip_if_pgo_task
+    @support.requires_resource('cpu')
     def test_inv_cdf(self):
         NormalDist = self.module.NormalDist
 
index 8e9ad06c6eb80ce27b00580955cbe794d15c2f16..7217508be8c0297dc2c0bbb7f5015278d05b9e10 100644 (file)
@@ -1290,6 +1290,7 @@ class ProcessTestCase(BaseTestCase):
         with self.assertWarnsRegex(RuntimeWarning, 'line buffering'):
             self._test_bufsize_equal_one(line, b'', universal_newlines=False)
 
+    @support.requires_resource('cpu')
     def test_leaking_fds_on_error(self):
         # see bug #5179: Popen leaks file descriptors to PIPEs if
         # the child fails to execute; this will eventually exhaust
index 23bcceedd71b2a570c1a110b0d55b8885d3796d1..2a33889b7e97ac560602d100eec24dcd20a04f74 100644 (file)
@@ -510,6 +510,7 @@ class TestSupport(unittest.TestCase):
         self.assertEqual(proc.stdout.rstrip(), repr(expected))
         self.assertEqual(proc.returncode, 0)
 
+    @support.requires_resource('cpu')
     def test_args_from_interpreter_flags(self):
         # Test test.support.args_from_interpreter_flags()
         for opts in (
index 96242bb260a61282b901a3d35fff0d7f2b5d86aa..14781bbb8622fa85d466f7f3a98ac9c9dfc91275 100644 (file)
@@ -2769,6 +2769,7 @@ output.append(4)
         ) = output.append(4) or "Spam"
         output.append(5)
 
+    @support.requires_resource('cpu')
     def test_jump_extended_args_for_iter(self):
         # In addition to failing when extended arg handling is broken, this can
         # also hang for a *very* long time:
index 2ba36ca208f96733fd4ea597d5d895daf0ab2fdd..922e74b441457ab0ada2a58f0d5167d7d91e42eb 100644 (file)
@@ -17,6 +17,7 @@ with imports_under_tool('freeze', 'test'):
 @support.skip_if_buildbot('not all buildbots have enough space')
 class TestFreeze(unittest.TestCase):
 
+    @support.requires_resource('cpu') # Building Python is slow
     def test_freeze_simple_script(self):
         script = textwrap.dedent("""
             import sys
index fad2b3b8379ffc8831a8cad71e818b8f354740e9..94b314381bfe21c5e64044855c50c66a5b998945 100644 (file)
@@ -1,7 +1,7 @@
 import os
 from pickle import dump
 import sys
-from test.support import captured_stdout
+from test.support import captured_stdout, requires_resource
 from test.support.os_helper import (TESTFN, rmtree, unlink)
 from test.support.script_helper import assert_python_ok, assert_python_failure
 import textwrap
@@ -369,6 +369,7 @@ class TestCoverage(unittest.TestCase):
         r = tracer.results()
         r.write_results(show_missing=True, summary=True, coverdir=TESTFN)
 
+    @requires_resource('cpu')
     def test_coverage(self):
         tracer = trace.Trace(trace=0, count=1)
         with captured_stdout() as stdout:
index 9e0097c892e7f76c448aa67ce92960b5968a20f3..c02d15d54b5f14f13b0a6ba7e22d623d0c4b5376 100644 (file)
@@ -295,6 +295,7 @@ class UnicodeMiscTest(UnicodeDatabaseTest):
         self.assertTrue("\u1d79".upper()=='\ua77d')
         self.assertTrue(".".upper()=='.')
 
+    @requires_resource('cpu')
     def test_bug_5828(self):
         self.assertEqual("\u1d79".lower(), "\u1d79")
         # Only U+0000 should have U+0000 as its upper/lower/titlecase variant
@@ -335,6 +336,7 @@ class NormalizationTest(unittest.TestCase):
         return "".join([chr(x) for x in data])
 
     @requires_resource('network')
+    @requires_resource('cpu')
     def test_normalization(self):
         TESTDATAFILE = "NormalizationTest.txt"
         TESTDATAURL = f"http://www.pythontest.net/unicode/{unicodedata.unidata_version}/{TESTDATAFILE}"
index 86ce60fef13975e30fb12cf18a2715d9ea338bcc..c7efff549b86315b2be9f5eea59fb8fb54d71324 100644 (file)
@@ -20,7 +20,8 @@ import tempfile
 from test.support import (captured_stdout, captured_stderr, requires_zlib,
                           skip_if_broken_multiprocessing_synchronize, verbose,
                           requires_subprocess, is_emscripten, is_wasi,
-                          requires_venv_with_pip, TEST_HOME_DIR)
+                          requires_venv_with_pip, TEST_HOME_DIR,
+                          requires_resource)
 from test.support.os_helper import (can_symlink, EnvironmentVarGuard, rmtree)
 import unittest
 import venv
@@ -756,6 +757,7 @@ class EnsurePipTest(BaseTest):
             )
 
     @requires_venv_with_pip()
+    @requires_resource('cpu')
     def test_with_pip(self):
         self.do_test_with_pip(False)
         self.do_test_with_pip(True)
index 1bc1d05f7daba9de0d8a0215a9f49837ef834a1a..4cdd66d3769e0ca48beba9452098cd11d58b50b4 100644 (file)
@@ -1933,6 +1933,7 @@ class MappingTestCase(TestBase):
         self.check_threaded_weak_dict_copy(weakref.WeakKeyDictionary, False)
 
     @threading_helper.requires_working_threading()
+    @support.requires_resource('cpu')
     def test_threaded_weak_key_dict_deepcopy(self):
         # Issue #35615: Weakref keys or values getting GC'ed during dict
         # copying should not result in a crash.
@@ -1945,6 +1946,7 @@ class MappingTestCase(TestBase):
         self.check_threaded_weak_dict_copy(weakref.WeakValueDictionary, False)
 
     @threading_helper.requires_working_threading()
+    @support.requires_resource('cpu')
     def test_threaded_weak_value_dict_deepcopy(self):
         # Issue #35615: Weakref keys or values getting GC'ed during dict
         # copying should not result in a crash.