Skip to content

Commit 1e0d627

Browse files
gh-108416: Mark slow but not CPU bound test methods with requires_resource('walltime') (GH-108480)
1 parent f980cc1 commit 1e0d627

18 files changed

+48
-3
lines changed

Lib/test/_test_multiprocessing.py

+3
Original file line numberDiff line numberDiff line change
@@ -675,6 +675,7 @@ def test_close(self):
675675

676676
close_queue(q)
677677

678+
@support.requires_resource('walltime')
678679
def test_many_processes(self):
679680
if self.TYPE == 'threads':
680681
self.skipTest('test not appropriate for {}'.format(self.TYPE))
@@ -4991,6 +4992,7 @@ def test_wait_slow(self):
49914992
def test_wait_socket_slow(self):
49924993
self.test_wait_socket(True)
49934994

4995+
@support.requires_resource('walltime')
49944996
def test_wait_timeout(self):
49954997
from multiprocessing.connection import wait
49964998

@@ -5019,6 +5021,7 @@ def signal_and_sleep(cls, sem, period):
50195021
sem.release()
50205022
time.sleep(period)
50215023

5024+
@support.requires_resource('walltime')
50225025
def test_wait_integer(self):
50235026
from multiprocessing.connection import wait
50245027

Lib/test/libregrtest/cmdline.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,8 @@
107107
108108
cpu - Used for certain CPU-heavy tests.
109109
110+
walltime - Long running but not CPU-bound tests.
111+
110112
subprocess Run all tests for the subprocess module.
111113
112114
urlfetch - It is okay to download files required on testing.
@@ -129,7 +131,7 @@
129131

130132

131133
ALL_RESOURCES = ('audio', 'curses', 'largefile', 'network',
132-
'decimal', 'cpu', 'subprocess', 'urlfetch', 'gui')
134+
'decimal', 'cpu', 'subprocess', 'urlfetch', 'gui', 'walltime')
133135

134136
# Other resources excluded from --use=all:
135137
#

Lib/test/test_concurrent_futures/executor.py

+1
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ def test_map_exception(self):
5353
self.assertEqual(i.__next__(), (0, 1))
5454
self.assertRaises(ZeroDivisionError, i.__next__)
5555

56+
@support.requires_resource('walltime')
5657
def test_map_timeout(self):
5758
results = []
5859
try:

Lib/test/test_concurrent_futures/test_wait.py

+3
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import time
44
import unittest
55
from concurrent import futures
6+
from test import support
67

78
from .util import (
89
CANCELLED_FUTURE, CANCELLED_AND_NOTIFIED_FUTURE, EXCEPTION_FUTURE,
@@ -53,6 +54,7 @@ def test_first_completed_some_already_completed(self):
5354
finished)
5455
self.assertEqual(set([future1]), pending)
5556

57+
@support.requires_resource('walltime')
5658
def test_first_exception(self):
5759
future1 = self.executor.submit(mul, 2, 21)
5860
future2 = self.executor.submit(sleep_and_raise, 1.5)
@@ -110,6 +112,7 @@ def test_all_completed(self):
110112
future2]), finished)
111113
self.assertEqual(set(), pending)
112114

115+
@support.requires_resource('walltime')
113116
def test_timeout(self):
114117
future1 = self.executor.submit(mul, 6, 7)
115118
future2 = self.executor.submit(time.sleep, 6)

Lib/test/test_eintr.py

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
class EINTRTests(unittest.TestCase):
1010

1111
@unittest.skipUnless(hasattr(signal, "setitimer"), "requires setitimer()")
12+
@support.requires_resource('walltime')
1213
def test_all(self):
1314
# Run the tester in a sub-process, to make sure there is only one
1415
# thread (for reliable signal delivery).

Lib/test/test_faulthandler.py

+1
Original file line numberDiff line numberDiff line change
@@ -683,6 +683,7 @@ def test_dump_traceback_later_fd(self):
683683
with tempfile.TemporaryFile('wb+') as fp:
684684
self.check_dump_traceback_later(fd=fp.fileno())
685685

686+
@support.requires_resource('walltime')
686687
def test_dump_traceback_later_twice(self):
687688
self.check_dump_traceback_later(loops=2)
688689

Lib/test/test_httplib.py

+1
Original file line numberDiff line numberDiff line change
@@ -1954,6 +1954,7 @@ def test_networked_good_cert(self):
19541954
h.close()
19551955
self.assertIn('nginx', server_string)
19561956

1957+
@support.requires_resource('walltime')
19571958
def test_networked_bad_cert(self):
19581959
# We feed a "CA" cert that is unrelated to the server's cert
19591960
import ssl

Lib/test/test_imaplib.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import threading
1111
import socket
1212

13-
from test.support import verbose, run_with_tz, run_with_locale, cpython_only
13+
from test.support import verbose, run_with_tz, run_with_locale, cpython_only, requires_resource
1414
from test.support import hashlib_helper
1515
from test.support import threading_helper
1616
import unittest
@@ -456,6 +456,7 @@ def test_simple_with_statement(self):
456456
with self.imap_class(*server.server_address):
457457
pass
458458

459+
@requires_resource('walltime')
459460
def test_imaplib_timeout_test(self):
460461
_, server = self._setup(SimpleIMAPHandler)
461462
addr = server.server_address[1]
@@ -549,6 +550,7 @@ class NewIMAPSSLTests(NewIMAPTestsMixin, unittest.TestCase):
549550
imap_class = IMAP4_SSL
550551
server_class = SecureTCPServer
551552

553+
@requires_resource('walltime')
552554
def test_ssl_raises(self):
553555
ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
554556
self.assertEqual(ssl_context.verify_mode, ssl.CERT_REQUIRED)
@@ -563,6 +565,7 @@ def test_ssl_raises(self):
563565
ssl_context=ssl_context)
564566
client.shutdown()
565567

568+
@requires_resource('walltime')
566569
def test_ssl_verified(self):
567570
ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
568571
ssl_context.load_verify_locations(CAFILE)

Lib/test/test_io.py

+6
Original file line numberDiff line numberDiff line change
@@ -4468,10 +4468,12 @@ def run():
44684468
self.assertFalse(err.strip('.!'))
44694469

44704470
@threading_helper.requires_working_threading()
4471+
@support.requires_resource('walltime')
44714472
def test_daemon_threads_shutdown_stdout_deadlock(self):
44724473
self.check_daemon_threads_shutdown_deadlock('stdout')
44734474

44744475
@threading_helper.requires_working_threading()
4476+
@support.requires_resource('walltime')
44754477
def test_daemon_threads_shutdown_stderr_deadlock(self):
44764478
self.check_daemon_threads_shutdown_deadlock('stderr')
44774479

@@ -4645,11 +4647,13 @@ def alarm_handler(sig, frame):
46454647
os.close(r)
46464648

46474649
@requires_alarm
4650+
@support.requires_resource('walltime')
46484651
def test_interrupted_read_retry_buffered(self):
46494652
self.check_interrupted_read_retry(lambda x: x.decode('latin1'),
46504653
mode="rb")
46514654

46524655
@requires_alarm
4656+
@support.requires_resource('walltime')
46534657
def test_interrupted_read_retry_text(self):
46544658
self.check_interrupted_read_retry(lambda x: x,
46554659
mode="r", encoding="latin1")
@@ -4723,10 +4727,12 @@ def alarm2(sig, frame):
47234727
raise
47244728

47254729
@requires_alarm
4730+
@support.requires_resource('walltime')
47264731
def test_interrupted_write_retry_buffered(self):
47274732
self.check_interrupted_write_retry(b"x", mode="wb")
47284733

47294734
@requires_alarm
4735+
@support.requires_resource('walltime')
47304736
def test_interrupted_write_retry_text(self):
47314737
self.check_interrupted_write_retry("x", mode="w", encoding="latin1")
47324738

Lib/test/test_logging.py

+1
Original file line numberDiff line numberDiff line change
@@ -680,6 +680,7 @@ def test_path_objects(self):
680680
support.is_emscripten, "Emscripten cannot fstat unlinked files."
681681
)
682682
@threading_helper.requires_working_threading()
683+
@support.requires_resource('walltime')
683684
def test_race(self):
684685
# Issue #14632 refers.
685686
def remove_loop(fname, tries):

Lib/test/test_poll.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import time
99
import unittest
1010
from test.support import (
11-
cpython_only, requires_subprocess, requires_working_socket
11+
cpython_only, requires_subprocess, requires_working_socket, requires_resource
1212
)
1313
from test.support import threading_helper
1414
from test.support.os_helper import TESTFN
@@ -124,6 +124,7 @@ def fileno(self):
124124
# select(), modified to use poll() instead.
125125

126126
@requires_subprocess()
127+
@requires_resource('walltime')
127128
def test_poll2(self):
128129
cmd = 'for i in 0 1 2 3 4 5 6 7 8 9; do echo testing...; sleep 1; done'
129130
proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE,

Lib/test/test_signal.py

+1
Original file line numberDiff line numberDiff line change
@@ -745,6 +745,7 @@ def test_siginterrupt_on(self):
745745
interrupted = self.readpipe_interrupted(True)
746746
self.assertTrue(interrupted)
747747

748+
@support.requires_resource('walltime')
748749
def test_siginterrupt_off(self):
749750
# If a signal handler is installed and siginterrupt is called with
750751
# a false value for the second argument, when that signal arrives, it

Lib/test/test_smtpnet.py

+1
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ def test_connect_default_port(self):
6161
server.ehlo()
6262
server.quit()
6363

64+
@support.requires_resource('walltime')
6465
def test_connect_using_sslcontext(self):
6566
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
6667
context.check_hostname = False

Lib/test/test_ssl.py

+2
Original file line numberDiff line numberDiff line change
@@ -2182,6 +2182,7 @@ def test_timeout_connect_ex(self):
21822182
self.assertIn(rc, (errno.EAGAIN, errno.EWOULDBLOCK))
21832183

21842184
@unittest.skipUnless(socket_helper.IPV6_ENABLED, 'Needs IPv6')
2185+
@support.requires_resource('walltime')
21852186
def test_get_server_certificate_ipv6(self):
21862187
with socket_helper.transient_internet('ipv6.google.com'):
21872188
_test_get_server_certificate(self, 'ipv6.google.com', 443)
@@ -2740,6 +2741,7 @@ def try_protocol_combo(server_protocol, client_protocol, expect_success,
27402741

27412742
class ThreadedTests(unittest.TestCase):
27422743

2744+
@support.requires_resource('walltime')
27432745
def test_echo(self):
27442746
"""Basic test of an SSL client connecting to a server"""
27452747
if support.verbose:

Lib/test/test_subprocess.py

+2
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,7 @@ def test_check_output_stdin_with_input_arg(self):
269269
self.assertIn('stdin', c.exception.args[0])
270270
self.assertIn('input', c.exception.args[0])
271271

272+
@support.requires_resource('walltime')
272273
def test_check_output_timeout(self):
273274
# check_output() function with timeout arg
274275
with self.assertRaises(subprocess.TimeoutExpired) as c:
@@ -1643,6 +1644,7 @@ def test_check_output_stdin_with_input_arg(self):
16431644
self.assertIn('stdin', c.exception.args[0])
16441645
self.assertIn('input', c.exception.args[0])
16451646

1647+
@support.requires_resource('walltime')
16461648
def test_check_output_timeout(self):
16471649
with self.assertRaises(subprocess.TimeoutExpired) as c:
16481650
cp = self.run_python((

Lib/test/test_urllib2net.py

+5
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ def setUp(self):
133133
# XXX The rest of these tests aren't very good -- they don't check much.
134134
# They do sometimes catch some major disasters, though.
135135

136+
@support.requires_resource('walltime')
136137
def test_ftp(self):
137138
# Testing the same URL twice exercises the caching in CacheFTPHandler
138139
urls = [
@@ -196,6 +197,7 @@ def test_urlwithfrag(self):
196197
self.assertEqual(res.geturl(),
197198
"http://www.pythontest.net/index.html#frag")
198199

200+
@support.requires_resource('walltime')
199201
def test_redirect_url_withfrag(self):
200202
redirect_url_with_frag = "http://www.pythontest.net/redir/with_frag/"
201203
with socket_helper.transient_internet(redirect_url_with_frag):
@@ -334,6 +336,7 @@ def test_http_timeout(self):
334336

335337
FTP_HOST = 'ftp://www.pythontest.net/'
336338

339+
@support.requires_resource('walltime')
337340
def test_ftp_basic(self):
338341
self.assertIsNone(socket.getdefaulttimeout())
339342
with socket_helper.transient_internet(self.FTP_HOST, timeout=None):
@@ -352,6 +355,7 @@ def test_ftp_default_timeout(self):
352355
socket.setdefaulttimeout(None)
353356
self.assertEqual(u.fp.fp.raw._sock.gettimeout(), 60)
354357

358+
@support.requires_resource('walltime')
355359
def test_ftp_no_timeout(self):
356360
self.assertIsNone(socket.getdefaulttimeout())
357361
with socket_helper.transient_internet(self.FTP_HOST):
@@ -363,6 +367,7 @@ def test_ftp_no_timeout(self):
363367
socket.setdefaulttimeout(None)
364368
self.assertIsNone(u.fp.fp.raw._sock.gettimeout())
365369

370+
@support.requires_resource('walltime')
366371
def test_ftp_timeout(self):
367372
with socket_helper.transient_internet(self.FTP_HOST):
368373
u = _urlopen_with_retry(self.FTP_HOST, timeout=60)

Lib/test/test_urllibnet.py

+2
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ def test_getcode(self):
109109
open_url.close()
110110
self.assertEqual(code, 404)
111111

112+
@support.requires_resource('walltime')
112113
def test_bad_address(self):
113114
# Make sure proper exception is raised when connecting to a bogus
114115
# address.
@@ -191,6 +192,7 @@ def test_header(self):
191192

192193
logo = "http://www.pythontest.net/"
193194

195+
@support.requires_resource('walltime')
194196
def test_data_header(self):
195197
with self.urlretrieve(self.logo) as (file_location, fileheaders):
196198
datevalue = fileheaders.get('Date')

Lib/test/test_xmlrpc.py

+9
Original file line numberDiff line numberDiff line change
@@ -1037,38 +1037,47 @@ def test_path2(self):
10371037
self.assertEqual(p.add(6,8), 6+8)
10381038
self.assertRaises(xmlrpclib.Fault, p.pow, 6, 8)
10391039

1040+
@support.requires_resource('walltime')
10401041
def test_path3(self):
10411042
p = xmlrpclib.ServerProxy(URL+"/is/broken")
10421043
self.assertRaises(xmlrpclib.Fault, p.add, 6, 8)
10431044

1045+
@support.requires_resource('walltime')
10441046
def test_invalid_path(self):
10451047
p = xmlrpclib.ServerProxy(URL+"/invalid")
10461048
self.assertRaises(xmlrpclib.Fault, p.add, 6, 8)
10471049

1050+
@support.requires_resource('walltime')
10481051
def test_path_query_fragment(self):
10491052
p = xmlrpclib.ServerProxy(URL+"/foo?k=v#frag")
10501053
self.assertEqual(p.test(), "/foo?k=v#frag")
10511054

1055+
@support.requires_resource('walltime')
10521056
def test_path_fragment(self):
10531057
p = xmlrpclib.ServerProxy(URL+"/foo#frag")
10541058
self.assertEqual(p.test(), "/foo#frag")
10551059

1060+
@support.requires_resource('walltime')
10561061
def test_path_query(self):
10571062
p = xmlrpclib.ServerProxy(URL+"/foo?k=v")
10581063
self.assertEqual(p.test(), "/foo?k=v")
10591064

1065+
@support.requires_resource('walltime')
10601066
def test_empty_path(self):
10611067
p = xmlrpclib.ServerProxy(URL)
10621068
self.assertEqual(p.test(), "/RPC2")
10631069

1070+
@support.requires_resource('walltime')
10641071
def test_root_path(self):
10651072
p = xmlrpclib.ServerProxy(URL + "/")
10661073
self.assertEqual(p.test(), "/")
10671074

1075+
@support.requires_resource('walltime')
10681076
def test_empty_path_query(self):
10691077
p = xmlrpclib.ServerProxy(URL + "?k=v")
10701078
self.assertEqual(p.test(), "?k=v")
10711079

1080+
@support.requires_resource('walltime')
10721081
def test_empty_path_fragment(self):
10731082
p = xmlrpclib.ServerProxy(URL + "#frag")
10741083
self.assertEqual(p.test(), "#frag")

0 commit comments

Comments
 (0)