Best Python code snippet using pytest-asyncio_python
patched_tests_setup.py
Source:patched_tests_setup.py
1# pylint:disable=missing-docstring,invalid-name,too-many-lines2from __future__ import print_function, absolute_import, division3import collections4import contextlib5import functools6import sys7import os8# At least on 3.6+, importing platform9# imports subprocess, which imports selectors. That10# can expose issues with monkey patching. We don't need it11# though.12# import platform13import re14from .sysinfo import RUNNING_ON_APPVEYOR as APPVEYOR15from .sysinfo import RUNNING_ON_TRAVIS as TRAVIS16from .sysinfo import RESOLVER_NOT_SYSTEM as ARES17from .sysinfo import RUN_COVERAGE18from .sysinfo import PYPY19from .sysinfo import PYPY320from .sysinfo import PY321from .sysinfo import PY222from .sysinfo import PY3423from .sysinfo import PY3524from .sysinfo import PY3625from .sysinfo import PY3726from .sysinfo import WIN27from .sysinfo import OSX28from .sysinfo import LIBUV29from .sysinfo import CFFI_BACKEND30from . import flaky31CPYTHON = not PYPY32# By default, test cases are expected to switch and emit warnings if there was none33# If a test is found in this list, it's expected not to switch.34no_switch_tests = '''test_patched_select.SelectTestCase.test_error_conditions35test_patched_ftplib.*.test_all_errors36test_patched_ftplib.*.test_getwelcome37test_patched_ftplib.*.test_sanitize38test_patched_ftplib.*.test_set_pasv39#test_patched_ftplib.TestIPv6Environment.test_af40test_patched_socket.TestExceptions.testExceptionTree41test_patched_socket.Urllib2FileobjectTest.testClose42test_patched_socket.TestLinuxAbstractNamespace.testLinuxAbstractNamespace43test_patched_socket.TestLinuxAbstractNamespace.testMaxName44test_patched_socket.TestLinuxAbstractNamespace.testNameOverflow45test_patched_socket.FileObjectInterruptedTestCase.*46test_patched_urllib.*47test_patched_asyncore.HelperFunctionTests.*48test_patched_httplib.BasicTest.*49test_patched_httplib.HTTPSTimeoutTest.test_attributes50test_patched_httplib.HeaderTests.*51test_patched_httplib.OfflineTest.*52test_patched_httplib.HTTPSTimeoutTest.test_host_port53test_patched_httplib.SourceAddressTest.testHTTPSConnectionSourceAddress54test_patched_select.SelectTestCase.test_error_conditions55test_patched_smtplib.NonConnectingTests.*56test_patched_urllib2net.OtherNetworkTests.*57test_patched_wsgiref.*58test_patched_subprocess.HelperFunctionTests.*59'''60ignore_switch_tests = '''61test_patched_socket.GeneralModuleTests.*62test_patched_httpservers.BaseHTTPRequestHandlerTestCase.*63test_patched_queue.*64test_patched_signal.SiginterruptTest.*65test_patched_urllib2.*66test_patched_ssl.*67test_patched_signal.BasicSignalTests.*68test_patched_threading_local.*69test_patched_threading.*70'''71def make_re(tests):72 tests = [x.strip().replace(r'\.', r'\\.').replace('*', '.*?')73 for x in tests.split('\n') if x.strip()]74 return re.compile('^%s$' % '|'.join(tests))75no_switch_tests = make_re(no_switch_tests)76ignore_switch_tests = make_re(ignore_switch_tests)77def get_switch_expected(fullname):78 """79 >>> get_switch_expected('test_patched_select.SelectTestCase.test_error_conditions')80 False81 >>> get_switch_expected('test_patched_socket.GeneralModuleTests.testCrucialConstants')82 False83 >>> get_switch_expected('test_patched_socket.SomeOtherTest.testHello')84 True85 >>> get_switch_expected("test_patched_httplib.BasicTest.test_bad_status_repr")86 False87 """88 # certain pylint versions mistype the globals as89 # str, not re.90 # pylint:disable=no-member91 if ignore_switch_tests.match(fullname) is not None:92 return None93 if no_switch_tests.match(fullname) is not None:94 return False95 return True96disabled_tests = [97 # The server side takes awhile to shut down98 'test_httplib.HTTPSTest.test_local_bad_hostname',99 'test_threading.ThreadTests.test_PyThreadState_SetAsyncExc',100 # uses some internal C API of threads not available when threads are emulated with greenlets101 'test_threading.ThreadTests.test_join_nondaemon_on_shutdown',102 # asserts that repr(sleep) is '<built-in function sleep>'103 'test_urllib2net.TimeoutTest.test_ftp_no_timeout',104 'test_urllib2net.TimeoutTest.test_ftp_timeout',105 'test_urllib2net.TimeoutTest.test_http_no_timeout',106 'test_urllib2net.TimeoutTest.test_http_timeout',107 # accesses _sock.gettimeout() which is always in non-blocking mode108 'test_urllib2net.OtherNetworkTests.test_ftp',109 # too slow110 'test_urllib2net.OtherNetworkTests.test_urlwithfrag',111 # fails dues to some changes on python.org112 'test_urllib2net.OtherNetworkTests.test_sites_no_connection_close',113 # flaky114 'test_socket.UDPTimeoutTest.testUDPTimeout',115 # has a bug which makes it fail with error: (107, 'Transport endpoint is not connected')116 # (it creates a TCP socket, not UDP)117 'test_socket.GeneralModuleTests.testRefCountGetNameInfo',118 # fails with "socket.getnameinfo loses a reference" while the reference is only "lost"119 # because it is referenced by the traceback - any Python function would lose a reference like that.120 # the original getnameinfo does not "lose" it because it's in C.121 'test_socket.NetworkConnectionNoServer.test_create_connection_timeout',122 # replaces socket.socket with MockSocket and then calls create_connection.123 # this unfortunately does not work with monkey patching, because gevent.socket.create_connection124 # is bound to gevent.socket.socket and updating socket.socket does not affect it.125 # this issues also manifests itself when not monkey patching DNS: http://code.google.com/p/gevent/issues/detail?id=54126 # create_connection still uses gevent.socket.getaddrinfo while it should be using socket.getaddrinfo127 'test_asyncore.BaseTestAPI.test_handle_expt',128 # sends some OOB data and expect it to be detected as such; gevent.select.select does not support that129 # This one likes to check its own filename, but we rewrite130 # the file to a temp location during patching.131 'test_asyncore.HelperFunctionTests.test_compact_traceback',132 'test_signal.WakeupSignalTests.test_wakeup_fd_early',133 # expects time.sleep() to return prematurely in case of a signal;134 # gevent.sleep() is better than that and does not get interrupted (unless signal handler raises an error)135 'test_signal.WakeupSignalTests.test_wakeup_fd_during',136 # expects select.select() to raise select.error(EINTR'interrupted system call')137 # gevent.select.select() does not get interrupted (unless signal handler raises an error)138 # maybe it should?139 'test_signal.SiginterruptTest.test_without_siginterrupt',140 'test_signal.SiginterruptTest.test_siginterrupt_on',141 # these rely on os.read raising EINTR which never happens with gevent.os.read142 'test_subprocess.ProcessTestCase.test_leak_fast_process_del_killed',143 'test_subprocess.ProcessTestCase.test_zombie_fast_process_del',144 # relies on subprocess._active which we don't use145 # Very slow, tries to open lots and lots of subprocess and files,146 # tends to timeout on CI.147 'test_subprocess.ProcessTestCase.test_no_leaking',148 # This test is also very slow, and has been timing out on Travis149 # since November of 2016 on Python 3, but now also seen on Python 2/Pypy.150 'test_subprocess.ProcessTestCase.test_leaking_fds_on_error',151 'test_ssl.ThreadedTests.test_default_ciphers',152 'test_ssl.ThreadedTests.test_empty_cert',153 'test_ssl.ThreadedTests.test_malformed_cert',154 'test_ssl.ThreadedTests.test_malformed_key',155 'test_ssl.NetworkedTests.test_non_blocking_connect_ex',156 # XXX needs investigating157 'test_ssl.NetworkedTests.test_algorithms',158 # The host this wants to use, sha256.tbs-internet.com, is not resolvable159 # right now (2015-10-10), and we need to get Windows wheels160 # This started timing out randomly on Travis in oct/nov 2018. It appears161 # to be something with random number generation taking too long.162 'test_ssl.BasicSocketTests.test_random_fork',163 # Relies on the repr of objects (Py3)164 'test_ssl.BasicSocketTests.test_dealloc_warn',165 'test_urllib2.HandlerTests.test_cookie_redirect',166 # this uses cookielib which we don't care about167 'test_thread.ThreadRunningTests.test__count',168 'test_thread.TestForkInThread.test_forkinthread',169 # XXX needs investigating170 'test_subprocess.POSIXProcessTestCase.test_preexec_errpipe_does_not_double_close_pipes',171 # Does not exist in the test suite until 2.7.4+. Subclasses Popen, and overrides172 # _execute_child. But our version has a different parameter list than the173 # version that comes with PyPy/CPython, so fails with a TypeError.174]175if 'thread' in os.getenv('GEVENT_FILE', ''):176 disabled_tests += [177 'test_subprocess.ProcessTestCase.test_double_close_on_error'178 # Fails with "OSError: 9 invalid file descriptor"; expect GC/lifetime issues179 ]180if LIBUV:181 # epoll appears to work with these just fine in some cases;182 # kqueue (at least on OS X, the only tested kqueue system)183 # never does (failing with abort())184 # (epoll on Raspbian 8.0/Debian Jessie/Linux 4.1.20 works;185 # on a VirtualBox image of Ubuntu 15.10/Linux 4.2.0 both tests fail;186 # Travis CI Ubuntu 12.04 precise/Linux 3.13 causes one of these tests to hang forever)187 # XXX: Retry this with libuv 1.12+188 disabled_tests += [189 # A 2.7 test. Tries to fork, and libuv cannot fork190 'test_signal.InterProcessSignalTests.test_main',191 # Likewise, a forking problem192 'test_signal.SiginterruptTest.test_siginterrupt_off',193 ]194 if PY2:195 if TRAVIS:196 if CPYTHON:197 disabled_tests += [198 # This appears to crash the process, for some reason,199 # but only on CPython 2.7.14 on Travis. Cannot reproduce in200 # 2.7.14 on macOS or 2.7.12 in local Ubuntu 16.04201 'test_subprocess.POSIXProcessTestCase.test_close_fd_0',202 'test_subprocess.POSIXProcessTestCase.test_close_fds_0_1',203 'test_subprocess.POSIXProcessTestCase.test_close_fds_0_2',204 ]205 if PYPY:206 disabled_tests += [207 # This seems to crash the interpreter. I cannot reproduce208 # on macOS or local Linux VM.209 # See https://travis-ci.org/gevent/gevent/jobs/348661604#L709210 'test_smtplib.TooLongLineTests.testLineTooLong',211 ]212 if ARES:213 disabled_tests += [214 # This can timeout with a socket timeout in ssl.wrap_socket(c)215 # on Travis. I can't reproduce locally.216 'test_ssl.ThreadedTests.test_handshake_timeout',217 ]218 if PY3:219 disabled_tests += [220 # This test wants to pass an arbitrary fileno221 # to a socket and do things with it. libuv doesn't like this,222 # it raises EPERM. It is disabled on windows already.223 # It depends on whether we had a fd already open and multiplexed with224 'test_socket.GeneralModuleTests.test_unknown_socket_family_repr',225 # And yes, there's a typo in some versions.226 'test_socket.GeneralModuleTests.test_uknown_socket_family_repr',227 ]228 if PY37:229 disabled_tests += [230 # This test sometimes fails at line 358. It's apparently231 # extremely sensitive to timing.232 'test_selectors.PollSelectorTestCase.test_timeout',233 ]234 if OSX:235 disabled_tests += [236 # XXX: Starting when we upgraded from libuv 1.18.0237 # to 1.19.2, this sometimes (usually) started having238 # a series of calls ('select.poll(0)', 'select.poll(-1)')239 # take longer than the allowed 0.5 seconds. Debugging showed that240 # it was the second call that took longer, for no apparent reason.241 # There doesn't seem to be a change in the source code to libuv that242 # would affect this.243 # XXX-XXX: This actually disables too many tests :(244 'test_selectors.PollSelectorTestCase.test_timeout',245 ]246 if RUN_COVERAGE:247 disabled_tests += [248 # Starting with #1145 this test (actually249 # TestTLS_FTPClassMixin) becomes sensitive to timings250 # under coverage.251 'test_ftplib.TestFTPClass.test_storlines',252 ]253 if sys.platform.startswith('linux'):254 disabled_tests += [255 # crashes with EPERM, which aborts the epoll loop, even256 # though it was allowed in in the first place.257 'test_asyncore.FileWrapperTest.test_dispatcher',258 ]259 if WIN and PY2:260 # From PyPy2-v5.9.0 and CPython 2.7.14, using its version of tests,261 # which do work on darwin (and possibly linux?)262 # I can't produce them in a local VM running Windows 10263 # and the same pypy version.264 disabled_tests += [265 # These, which use asyncore, fail with266 # 'NoneType is not iterable' on 'conn, addr = self.accept()'267 # That returns None when the underlying socket raises268 # EWOULDBLOCK, which it will do because it's set to non-blocking269 # both by gevent and by libuv (at the level below python's knowledge)270 # I can *usually* reproduce these locally; it seems to be some sort271 # of race condition.272 'test_ftplib.TestFTPClass.test_acct',273 'test_ftplib.TestFTPClass.test_all_errors',274 'test_ftplib.TestFTPClass.test_cwd',275 'test_ftplib.TestFTPClass.test_delete',276 'test_ftplib.TestFTPClass.test_dir',277 'test_ftplib.TestFTPClass.test_exceptions',278 'test_ftplib.TestFTPClass.test_getwelcome',279 'test_ftplib.TestFTPClass.test_line_too_long',280 'test_ftplib.TestFTPClass.test_login',281 'test_ftplib.TestFTPClass.test_makepasv',282 'test_ftplib.TestFTPClass.test_mkd',283 'test_ftplib.TestFTPClass.test_nlst',284 'test_ftplib.TestFTPClass.test_pwd',285 'test_ftplib.TestFTPClass.test_quit',286 'test_ftplib.TestFTPClass.test_makepasv',287 'test_ftplib.TestFTPClass.test_rename',288 'test_ftplib.TestFTPClass.test_retrbinary',289 'test_ftplib.TestFTPClass.test_retrbinary_rest',290 'test_ftplib.TestFTPClass.test_retrlines',291 'test_ftplib.TestFTPClass.test_retrlines_too_long',292 'test_ftplib.TestFTPClass.test_rmd',293 'test_ftplib.TestFTPClass.test_sanitize',294 'test_ftplib.TestFTPClass.test_set_pasv',295 'test_ftplib.TestFTPClass.test_size',296 'test_ftplib.TestFTPClass.test_storbinary',297 'test_ftplib.TestFTPClass.test_storbinary_rest',298 'test_ftplib.TestFTPClass.test_storlines',299 'test_ftplib.TestFTPClass.test_storlines_too_long',300 'test_ftplib.TestFTPClass.test_voidcmd',301 'test_ftplib.TestTLS_FTPClass.test_data_connection',302 'test_ftplib.TestTLS_FTPClass.test_control_connection',303 'test_ftplib.TestTLS_FTPClass.test_context',304 'test_ftplib.TestTLS_FTPClass.test_check_hostname',305 'test_ftplib.TestTLS_FTPClass.test_auth_ssl',306 'test_ftplib.TestTLS_FTPClass.test_auth_issued_twice',307 # This one times out, but it's still a non-blocking socket308 'test_ftplib.TestFTPClass.test_makeport',309 # A timeout, possibly because of the way we handle interrupts?310 'test_socketserver.SocketServerTest.test_InterruptedServerSelectCall',311 'test_socketserver.SocketServerTest.test_InterruptServerSelectCall',312 # times out with something about threading?313 # The apparent hang is just after the print of "waiting for server"314 'test_socketserver.SocketServerTest.test_ThreadingTCPServer',315 'test_socketserver.SocketServerTest.test_ThreadingUDPServer',316 'test_socketserver.SocketServerTest.test_TCPServer',317 'test_socketserver.SocketServerTest.test_UDPServer',318 # This one might be like 'test_urllib2_localnet.TestUrlopen.test_https_with_cafile'?319 # XXX: Look at newer pypy and verify our usage of drop/reuse matches320 # theirs.321 'test_httpservers.BaseHTTPServerTestCase.test_command',322 'test_httpservers.BaseHTTPServerTestCase.test_handler',323 'test_httpservers.BaseHTTPServerTestCase.test_head_keep_alive',324 'test_httpservers.BaseHTTPServerTestCase.test_head_via_send_error',325 'test_httpservers.BaseHTTPServerTestCase.test_header_close',326 'test_httpservers.BaseHTTPServerTestCase.test_internal_key_error',327 'test_httpservers.BaseHTTPServerTestCase.test_request_line_trimming',328 'test_httpservers.BaseHTTPServerTestCase.test_return_custom_status',329 'test_httpservers.BaseHTTPServerTestCase.test_send_blank',330 'test_httpservers.BaseHTTPServerTestCase.test_send_error',331 'test_httpservers.BaseHTTPServerTestCase.test_version_bogus',332 'test_httpservers.BaseHTTPServerTestCase.test_version_digits',333 'test_httpservers.BaseHTTPServerTestCase.test_version_invalid',334 'test_httpservers.BaseHTTPServerTestCase.test_version_none',335 'test_httpservers.SimpleHTTPServerTestCase.test_get',336 'test_httpservers.SimpleHTTPServerTestCase.test_head',337 'test_httpservers.SimpleHTTPServerTestCase.test_invalid_requests',338 'test_httpservers.SimpleHTTPServerTestCase.test_path_without_leading_slash',339 'test_httpservers.CGIHTTPServerTestCase.test_invaliduri',340 'test_httpservers.CGIHTTPServerTestCase.test_issue19435',341 # Unexpected timeouts sometimes342 'test_smtplib.TooLongLineTests.testLineTooLong',343 'test_smtplib.GeneralTests.testTimeoutValue',344 ]345 if PYPY:346 disabled_tests += [347 # appears to timeout?348 'test_threading.ThreadTests.test_finalize_with_trace',349 'test_asyncore.DispatcherWithSendTests_UsePoll.test_send',350 'test_asyncore.DispatcherWithSendTests.test_send',351 # More unexpected timeouts352 'test_ssl.ContextTests.test__https_verify_envvar',353 'test_subprocess.ProcessTestCase.test_check_output',354 'test_telnetlib.ReadTests.test_read_eager_A',355 # But on Windows, our gc fix for that doesn't work anyway356 # so we have to disable it.357 'test_urllib2_localnet.TestUrlopen.test_https_with_cafile',358 # These tests hang. see above.359 'test_threading.ThreadJoinOnShutdown.test_1_join_on_shutdown',360 'test_threading.ThreadingExceptionTests.test_print_exception',361 # Our copy of these in test__subprocess.py also hangs.362 # Anything that uses Popen.communicate or directly uses363 # Popen.stdXXX.read hangs. It's not clear why.364 'test_subprocess.ProcessTestCase.test_communicate',365 'test_subprocess.ProcessTestCase.test_cwd',366 'test_subprocess.ProcessTestCase.test_env',367 'test_subprocess.ProcessTestCase.test_stderr_pipe',368 'test_subprocess.ProcessTestCase.test_stdout_pipe',369 'test_subprocess.ProcessTestCase.test_stdout_stderr_pipe',370 'test_subprocess.ProcessTestCase.test_stderr_redirect_with_no_stdout_redirect',371 'test_subprocess.ProcessTestCase.test_stdout_filedes_of_stdout',372 'test_subprocess.ProcessTestcase.test_stdout_none',373 'test_subprocess.ProcessTestcase.test_universal_newlines',374 'test_subprocess.ProcessTestcase.test_writes_before_communicate',375 'test_subprocess.Win32ProcessTestCase._kill_process',376 'test_subprocess.Win32ProcessTestCase._kill_dead_process',377 'test_subprocess.Win32ProcessTestCase.test_shell_sequence',378 'test_subprocess.Win32ProcessTestCase.test_shell_string',379 'test_subprocess.CommandsWithSpaces.with_spaces',380 ]381 if WIN:382 disabled_tests += [383 # This test winds up hanging a long time.384 # Inserting GCs doesn't fix it.385 'test_ssl.ThreadedTests.test_handshake_timeout',386 # These sometimes raise LoopExit, for no apparent reason,387 # mostly but not exclusively on Python 2.388 'test_socket.BufferIOTest.testRecvFromIntoBytearray',389 'test_socket.BufferIOTest.testRecvFromIntoArray',390 'test_socket.BufferIOTest.testRecvIntoArray',391 'test_socket.BufferIOTest.testRecvFromIntoEmptyBuffer',392 'test_socket.BufferIOTest.testRecvFromIntoMemoryview',393 'test_socket.BufferIOTest.testRecvFromIntoSmallBuffer',394 ]395 if PY3:396 disabled_tests += [397 ]398 if APPVEYOR:399 disabled_tests += [400 ]401 if PYPY:402 if TRAVIS:403 disabled_tests += [404 # This sometimes causes a segfault for no apparent reason.405 # See https://travis-ci.org/gevent/gevent/jobs/327328704406 # Can't reproduce locally.407 'test_subprocess.ProcessTestCase.test_universal_newlines_communicate',408 ]409if RUN_COVERAGE and CFFI_BACKEND:410 disabled_tests += [411 # This test hangs in this combo for some reason412 'test_socket.GeneralModuleTests.test_sendall_interrupted',413 # This can get a timeout exception instead of the Alarm414 'test_socket.TCPTimeoutTest.testInterruptedTimeout',415 # This test sometimes gets the wrong answer (due to changed timing?)416 'test_socketserver.SocketServerTest.test_ForkingUDPServer',417 # Timing and signals are off, so a handler exception doesn't get raised.418 # Seen under libev419 'test_signal.InterProcessSignalTests.test_main',420 ]421if PY2:422 if TRAVIS:423 disabled_tests += [424 # When we moved to group:travis_latest and dist:xenial,425 # this started returning a value (33554432L) != 0; presumably426 # because of updated SSL library? Only on CPython.427 'test_ssl.ContextTests.test_options',428 # When we moved to group:travis_latest and dist:xenial,429 # one of the values used started *working* when it was expected to fail.430 # The list of values and systems is long and complex, so431 # presumably something needs to be updated. Only on PyPy.432 'test_ssl.ThreadedTests.test_alpn_protocols',433 ]434def _make_run_with_original(mod_name, func_name):435 @contextlib.contextmanager436 def with_orig():437 mod = __import__(mod_name)438 now = getattr(mod, func_name)439 from gevent.monkey import get_original440 orig = get_original(mod_name, func_name)441 try:442 setattr(mod, func_name, orig)443 yield444 finally:445 setattr(mod, func_name, now)446 return with_orig447@contextlib.contextmanager448def _gc_at_end():449 try:450 yield451 finally:452 import gc453 gc.collect()454 gc.collect()455@contextlib.contextmanager456def _flaky_socket_timeout():457 import socket458 try:459 yield460 except socket.timeout:461 flaky.reraiseFlakyTestTimeout()462# Map from FQN to a context manager that will be wrapped around463# that test.464wrapped_tests = {465}466class _PatchedTest(object):467 def __init__(self, test_fqn):468 self._patcher = wrapped_tests[test_fqn]469 def __call__(self, orig_test_fn):470 @functools.wraps(orig_test_fn)471 def test(*args, **kwargs):472 with self._patcher():473 return orig_test_fn(*args, **kwargs)474 return test475if sys.version_info[:3] <= (2, 7, 11):476 disabled_tests += [477 # These were added/fixed in 2.7.12+478 'test_ssl.ThreadedTests.test__https_verify_certificates',479 'test_ssl.ThreadedTests.test__https_verify_envvar',480 ]481if OSX:482 disabled_tests += [483 'test_subprocess.POSIXProcessTestCase.test_run_abort',484 # causes Mac OS X to show "Python crashes" dialog box which is annoying485 ]486if WIN:487 disabled_tests += [488 # Issue with Unix vs DOS newlines in the file vs from the server489 'test_ssl.ThreadedTests.test_socketserver',490 ]491 # These are a problem on 3.5; on 3.6+ they wind up getting (accidentally) disabled.492 wrapped_tests.update({493 'test_socket.SendfileUsingSendTest.testWithTimeout': _flaky_socket_timeout,494 'test_socket.SendfileUsingSendTest.testOffset': _flaky_socket_timeout,495 'test_socket.SendfileUsingSendTest.testRegularFile': _flaky_socket_timeout,496 'test_socket.SendfileUsingSendTest.testCount': _flaky_socket_timeout,497 })498if PYPY:499 disabled_tests += [500 # Does not exist in the CPython test suite, tests for a specific bug501 # in PyPy's forking. Only runs on linux and is specific to the PyPy502 # implementation of subprocess (possibly explains the extra parameter to503 # _execut_child)504 'test_subprocess.ProcessTestCase.test_failed_child_execute_fd_leak',505 # On some platforms, this returns "zlib_compression", but the test is looking for506 # "ZLIB"507 'test_ssl.ThreadedTests.test_compression',508 ]509# Generic Python 3510if PY3:511 disabled_tests += [512 # Triggers the crash reporter513 'test_threading.SubinterpThreadingTests.test_daemon_threads_fatal_error',514 # Relies on an implementation detail, Thread._tstate_lock515 'test_threading.ThreadTests.test_tstate_lock',516 # Relies on an implementation detail (reprs); we have our own version517 'test_threading.ThreadTests.test_various_ops',518 'test_threading.ThreadTests.test_various_ops_large_stack',519 'test_threading.ThreadTests.test_various_ops_small_stack',520 # Relies on Event having a _cond and an _reset_internal_locks()521 # XXX: These are commented out in the source code of test_threading because522 # this doesn't work.523 # 'lock_tests.EventTests.test_reset_internal_locks',524 # Python bug 13502. We may or may not suffer from this as its525 # basically a timing race condition.526 # XXX Same as above527 # 'lock_tests.EventTests.test_set_and_clear',528 # These tests want to assert on the type of the class that implements529 # `Popen.stdin`; we use a FileObject, but they expect different subclasses530 # from the `io` module531 'test_subprocess.ProcessTestCase.test_io_buffered_by_default',532 'test_subprocess.ProcessTestCase.test_io_unbuffered_works',533 # 3.3 exposed the `endtime` argument to wait accidentally.534 # It is documented as deprecated and not to be used since 3.4535 # This test in 3.6.3 wants to use it though, and we don't have it.536 'test_subprocess.ProcessTestCase.test_wait_endtime',537 # These all want to inspect the string value of an exception raised538 # by the exec() call in the child. The _posixsubprocess module arranges539 # for better exception handling and printing than we do.540 'test_subprocess.POSIXProcessTestCase.test_exception_bad_args_0',541 'test_subprocess.POSIXProcessTestCase.test_exception_bad_executable',542 'test_subprocess.POSIXProcessTestCase.test_exception_cwd',543 # Relies on a 'fork_exec' attribute that we don't provide544 'test_subprocess.POSIXProcessTestCase.test_exception_errpipe_bad_data',545 'test_subprocess.POSIXProcessTestCase.test_exception_errpipe_normal',546 # Python 3 fixed a bug if the stdio file descriptors were closed;547 # we still have that bug548 'test_subprocess.POSIXProcessTestCase.test_small_errpipe_write_fd',549 # Relies on implementation details (some of these tests were added in 3.4,550 # but PyPy3 is also shipping them.)551 'test_socket.GeneralModuleTests.test_SocketType_is_socketobject',552 'test_socket.GeneralModuleTests.test_dealloc_warn',553 'test_socket.GeneralModuleTests.test_repr',554 'test_socket.GeneralModuleTests.test_str_for_enums',555 'test_socket.GeneralModuleTests.testGetaddrinfo',556 ]557 if TRAVIS:558 disabled_tests += [559 # test_cwd_with_relative_executable tends to fail560 # on Travis...it looks like the test processes are stepping561 # on each other and messing up their temp directories. We tend to get things like562 # saved_dir = os.getcwd()563 # FileNotFoundError: [Errno 2] No such file or directory564 'test_subprocess.ProcessTestCase.test_cwd_with_relative_arg',565 'test_subprocess.ProcessTestCaseNoPoll.test_cwd_with_relative_arg',566 'test_subprocess.ProcessTestCase.test_cwd_with_relative_executable',567 ]568 wrapped_tests.update({569 # XXX: BUG: We simply don't handle this correctly. On CPython,570 # we wind up raising a BlockingIOError and then571 # BrokenPipeError and then some random TypeErrors, all on the572 # server. CPython 3.5 goes directly to socket.send() (via573 # socket.makefile), whereas CPython 3.6 uses socket.sendall().574 # On PyPy, the behaviour is much worse: we hang indefinitely, perhaps exposing a problem575 # with our signal handling.576 # In actuality, though, this test doesn't fully test the EINTR it expects577 # to under gevent (because if its EWOULDBLOCK retry behaviour.)578 # Instead, the failures were all due to `pthread_kill` trying to send a signal579 # to a greenlet instead of a real thread. The solution is to deliver the signal580 # to the real thread by letting it get the correct ID.581 'test_wsgiref.IntegrationTests.test_interrupted_write': _make_run_with_original('threading', 'get_ident')582 })583# PyPy3 3.5.5 v5.8-beta584if PYPY3:585 disabled_tests += [586 # This raises 'RuntimeError: reentrant call' when exiting the587 # process tries to close the stdout stream; no other platform does this.588 # Seen in both 3.3 and 3.5 (5.7 and 5.8)589 'test_signal.SiginterruptTest.test_siginterrupt_off',590 ]591if PYPY and PY3:592 disabled_tests += [593 # This fails to close all the FDs, at least on CI. On OS X, many of the594 # POSIXProcessTestCase fd tests have issues.595 'test_subprocess.POSIXProcessTestCase.test_close_fds_when_max_fd_is_lowered',596 # This has the wrong constants in 5.8 (but worked in 5.7), at least on597 # OS X. It finds "zlib compression" but expects "ZLIB".598 'test_ssl.ThreadedTests.test_compression',599 # The below are new with 5.10.1600 # This gets an EOF in violation of protocol; again, even without gevent601 # (at least on OS X; it's less consistent about that on travis)602 'test_ssl.NetworkedBIOTests.test_handshake',603 ]604 if OSX:605 disabled_tests += [606 # These all fail with "invalid_literal for int() with base 10: b''"607 'test_subprocess.POSIXProcessTestCase.test_close_fds',608 'test_subprocess.POSIXProcessTestCase.test_close_fds_after_preexec',609 'test_subprocess.POSIXProcessTestCase.test_pass_fds',610 'test_subprocess.POSIXProcessTestCase.test_pass_fds_inheritable',611 'test_subprocess.POSIXProcessTestCase.test_pipe_cloexec',612 # The below are new with 5.10.1613 # These fail with 'OSError: received malformed or improperly truncated ancillary data'614 'test_socket.RecvmsgSCMRightsStreamTest.testCmsgTruncLen0',615 'test_socket.RecvmsgSCMRightsStreamTest.testCmsgTruncLen0Plus1',616 'test_socket.RecvmsgSCMRightsStreamTest.testCmsgTruncLen1',617 'test_socket.RecvmsgSCMRightsStreamTest.testCmsgTruncLen2Minus1',618 # Using the provided High Sierra binary, these fail with619 # 'ValueError: invalid protocol version _SSLMethod.PROTOCOL_SSLv3'.620 # gevent code isn't involved and running them unpatched has the same issue.621 'test_ssl.ContextTests.test_constructor',622 'test_ssl.ContextTests.test_protocol',623 'test_ssl.ContextTests.test_session_stats',624 'test_ssl.ThreadedTests.test_echo',625 'test_ssl.ThreadedTests.test_protocol_sslv23',626 'test_ssl.ThreadedTests.test_protocol_sslv3',627 'test_ssl.ThreadedTests.test_protocol_tlsv1',628 'test_ssl.ThreadedTests.test_protocol_tlsv1_1',629 # This gets None instead of http1.1, even without gevent630 'test_ssl.ThreadedTests.test_npn_protocols',631 # This fails to decode a filename even without gevent,632 # at least on High Sierarr.633 'test_httpservers.SimpleHTTPServerTestCase.test_undecodable_filename',634 ]635 disabled_tests += [636 # This seems to be a buffering issue? Something isn't637 # getting flushed. (The output is wrong). Under PyPy3 5.7,638 # I couldn't reproduce locally in Ubuntu 16 in a VM639 # or a laptop with OS X. Under 5.8.0, I can reproduce it, but only640 # when run by the testrunner, not when run manually on the command line,641 # so something is changing in stdout buffering in those situations.642 'test_threading.ThreadJoinOnShutdown.test_2_join_in_forked_process',643 'test_threading.ThreadJoinOnShutdown.test_1_join_in_forked_process',644 ]645 if TRAVIS:646 disabled_tests += [647 # Likewise, but I haven't produced it locally.648 'test_threading.ThreadJoinOnShutdown.test_1_join_on_shutdown',649 ]650if PYPY:651 wrapped_tests.update({652 # XXX: gevent: The error that was raised by that last call653 # left a socket open on the server or client. The server gets654 # to http/server.py(390)handle_one_request and blocks on655 # self.rfile.readline which apparently is where the SSL656 # handshake is done. That results in the exception being657 # raised on the client above, but apparently *not* on the658 # server. Consequently it sits trying to read from that659 # socket. On CPython, when the client socket goes out of scope660 # it is closed and the server raises an exception, closing the661 # socket. On PyPy, we need a GC cycle for that to happen.662 # Without the socket being closed and exception being raised,663 # the server cannot be stopped (it runs each request in the664 # same thread that would notice it had been stopped), and so665 # the cleanup method added by start_https_server to stop the666 # server blocks "forever".667 # This is an important test, so rather than skip it in patched_tests_setup,668 # we do the gc before we return.669 'test_urllib2_localnet.TestUrlopen.test_https_with_cafile': _gc_at_end,670 })671if PY34 and sys.version_info[:3] < (3, 4, 4):672 # Older versions have some issues with the SSL tests. Seen on Appveyor673 disabled_tests += [674 'test_ssl.ContextTests.test_options',675 'test_ssl.ThreadedTests.test_protocol_sslv23',676 'test_ssl.ThreadedTests.test_protocol_sslv3',677 'test_httplib.HTTPSTest.test_networked',678 ]679if PY34:680 disabled_tests += [681 'test_subprocess.ProcessTestCase.test_threadsafe_wait',682 # XXX: It seems that threading.Timer is not being greened properly, possibly683 # due to a similar issue to what gevent.threading documents for normal threads.684 # In any event, this test hangs forever685 'test_subprocess.POSIXProcessTestCase.test_preexec_errpipe_does_not_double_close_pipes',686 # Subclasses Popen, and overrides _execute_child. Expects things to be done687 # in a particular order in an exception case, but we don't follow that688 # exact order689 'test_selectors.PollSelectorTestCase.test_above_fd_setsize',690 # This test attempts to open many many file descriptors and691 # poll on them, expecting them all to be ready at once. But692 # libev limits the number of events it will return at once. Specifically,693 # on linux with epoll, it returns a max of 64 (ev_epoll.c).694 # XXX: Hangs (Linux only)695 'test_socket.NonBlockingTCPTests.testInitNonBlocking',696 # We don't handle the Linux-only SOCK_NONBLOCK option697 'test_socket.NonblockConstantTest.test_SOCK_NONBLOCK',698 # Tries to use multiprocessing which doesn't quite work in699 # monkey_test module (Windows only)700 'test_socket.TestSocketSharing.testShare',701 # Windows-only: Sockets have a 'ioctl' method in Python 3702 # implemented in the C code. This test tries to check703 # for the presence of the method in the class, which we don't704 # have because we don't inherit the C implementation. But705 # it should be found at runtime.706 'test_socket.GeneralModuleTests.test_sock_ioctl',707 # See comments for 2.7; these hang708 'test_httplib.HTTPSTest.test_local_good_hostname',709 'test_httplib.HTTPSTest.test_local_unknown_cert',710 # XXX This fails for an unknown reason711 'test_httplib.HeaderTests.test_parse_all_octets',712 ]713 if OSX:714 disabled_tests += [715 # These raise "OSError: 12 Cannot allocate memory" on both716 # patched and unpatched runs717 'test_socket.RecvmsgSCMRightsStreamTest.testFDPassEmpty',718 ]719 if sys.version_info[:2] == (3, 4):720 disabled_tests += [721 # These are all expecting that a signal (sigalarm) that722 # arrives during a blocking call should raise723 # InterruptedError with errno=EINTR. gevent does not do724 # this, instead its loop keeps going and raises a timeout725 # (which fails the test). HOWEVER: Python 3.5 fixed this726 # problem and started raising a timeout,727 # (https://docs.python.org/3/whatsnew/3.5.html#pep-475-retry-system-calls-failing-with-eintr)728 # and removed these tests (InterruptedError is no longer729 # raised). So basically, gevent was ahead of its time.730 'test_socket.InterruptedRecvTimeoutTest.testInterruptedRecvIntoTimeout',731 'test_socket.InterruptedRecvTimeoutTest.testInterruptedRecvTimeout',732 'test_socket.InterruptedRecvTimeoutTest.testInterruptedRecvfromIntoTimeout',733 'test_socket.InterruptedRecvTimeoutTest.testInterruptedRecvfromTimeout',734 'test_socket.InterruptedRecvTimeoutTest.testInterruptedSendTimeout',735 'test_socket.InterruptedRecvTimeoutTest.testInterruptedSendtoTimeout',736 'test_socket.InterruptedRecvTimeoutTest.testInterruptedRecvmsgTimeout',737 'test_socket.InterruptedRecvTimeoutTest.testInterruptedRecvmsgIntoTimeout',738 'test_socket.InterruptedSendTimeoutTest.testInterruptedSendmsgTimeout',739 ]740 if TRAVIS:741 # This has been seen to produce "Inconsistency detected by742 # ld.so: dl-open.c: 231: dl_open_worker: Assertion743 # `_dl_debug_initialize (0, args->nsid)->r_state ==744 # RT_CONSISTENT' failed!" and fail.745 disabled_tests += [746 'test_threading.ThreadTests.test_is_alive_after_fork',747 ]748 if TRAVIS:749 disabled_tests += [750 'test_subprocess.ProcessTestCase.test_double_close_on_error',751 # This test is racy or OS-dependent. It passes locally (sufficiently fast machine)752 # but fails under Travis753 ]754if PY35:755 disabled_tests += [756 # XXX: Hangs757 'test_ssl.ThreadedTests.test_nonblocking_send',758 'test_ssl.ThreadedTests.test_socketserver',759 # Uses direct sendfile, doesn't properly check for it being enabled760 'test_socket.GeneralModuleTests.test__sendfile_use_sendfile',761 # Relies on the regex of the repr having the locked state (TODO: it'd be nice if762 # we did that).763 # XXX: These are commented out in the source code of test_threading because764 # this doesn't work.765 # 'lock_tests.LockTests.lest_locked_repr',766 # 'lock_tests.LockTests.lest_repr',767 # Added between 3.6.0 and 3.6.3, uses _testcapi and internals768 # of the subprocess module.769 'test_subprocess.POSIXProcessTestCase.test_stopped',770 # This test opens a socket, creates a new socket with the same fileno,771 # closes the original socket (and hence fileno) and then772 # expects that the calling setblocking() on the duplicate socket773 # will raise an error. Our implementation doesn't work that way because774 # setblocking() doesn't actually touch the file descriptor.775 # That's probably OK because this was a GIL state error in CPython776 # see https://github.com/python/cpython/commit/fa22b29960b4e683f4e5d7e308f674df2620473c777 'test_socket.TestExceptions.test_setblocking_invalidfd',778 ]779 if ARES:780 disabled_tests += [781 # These raise different errors or can't resolve782 # the IP address correctly783 'test_socket.GeneralModuleTests.test_host_resolution',784 'test_socket.GeneralModuleTests.test_getnameinfo',785 ]786 if sys.version_info[1] == 5:787 disabled_tests += [788 # This test tends to time out, but only under 3.5, not under789 # 3.6 or 3.7. Seen with both libev and libuv790 'test_socket.SendfileUsingSendTest.testWithTimeoutTriggeredSend',791 ]792if sys.version_info[:3] <= (3, 5, 1):793 # Python issue 26499 was fixed in 3.5.2 and these tests were added.794 disabled_tests += [795 'test_httplib.BasicTest.test_mixed_reads',796 'test_httplib.BasicTest.test_read1_bound_content_length',797 'test_httplib.BasicTest.test_read1_content_length',798 'test_httplib.BasicTest.test_readline_bound_content_length',799 'test_httplib.BasicTest.test_readlines_content_length',800 ]801if PY36:802 disabled_tests += [803 'test_threading.MiscTestCase.test__all__',804 ]805 # We don't actually implement socket._sendfile_use_sendfile,806 # so these tests, which think they're using that and os.sendfile,807 # fail.808 disabled_tests += [809 'test_socket.SendfileUsingSendfileTest.testCount',810 'test_socket.SendfileUsingSendfileTest.testCountSmall',811 'test_socket.SendfileUsingSendfileTest.testCountWithOffset',812 'test_socket.SendfileUsingSendfileTest.testOffset',813 'test_socket.SendfileUsingSendfileTest.testRegularFile',814 'test_socket.SendfileUsingSendfileTest.testWithTimeout',815 'test_socket.SendfileUsingSendfileTest.testEmptyFileSend',816 'test_socket.SendfileUsingSendfileTest.testNonBlocking',817 'test_socket.SendfileUsingSendfileTest.test_errors',818 ]819 # Ditto820 disabled_tests += [821 'test_socket.GeneralModuleTests.test__sendfile_use_sendfile',822 ]823 disabled_tests += [824 # This test requires Linux >= 4.3. When we were running 'dist:825 # trusty' on the 4.4 kernel, it passed (~July 2017). But when826 # trusty became the default dist in September 2017 and updated827 # the kernel to 4.11.6, it begain failing. It fails on `res =828 # op.recv(assoclen + len(plain) + taglen)` (where 'op' is the829 # client socket) with 'OSError: [Errno 22] Invalid argument'830 # for unknown reasons. This is *after* having successfully831 # called `op.sendmsg_afalg`. Post 3.6.0, what we test with,832 # the test was changed to require Linux 4.9 and the data was changed,833 # so this is not our fault. We should eventually update this when we834 # update our 3.6 version.835 # See https://bugs.python.org/issue29324836 'test_socket.LinuxKernelCryptoAPI.test_aead_aes_gcm',837 ]838if PY37:839 disabled_tests += [840 # These want to use the private '_communicate' method, which841 # our Popen doesn't have.842 'test_subprocess.MiscTests.test_call_keyboardinterrupt_no_kill',843 'test_subprocess.MiscTests.test_context_manager_keyboardinterrupt_no_kill',844 'test_subprocess.MiscTests.test_run_keyboardinterrupt_no_kill',845 # This wants to check that the underlying fileno is blocking,846 # but it isn't.847 'test_socket.NonBlockingTCPTests.testSetBlocking',848 # 3.7b2 made it impossible to instantiate SSLSocket objects849 # directly, and this tests for that, but we don't follow that change.850 'test_ssl.BasicSocketTests.test_private_init',851 # 3.7b2 made a change to this test that on the surface looks incorrect,852 # but it passes when they run it and fails when we do. It's not853 # clear why.854 'test_ssl.ThreadedTests.test_check_hostname_idn',855 ]856 if APPVEYOR:857 disabled_tests += [858 ]859# if 'signalfd' in os.environ.get('GEVENT_BACKEND', ''):860# # tests that don't interact well with signalfd861# disabled_tests.extend([862# 'test_signal.SiginterruptTest.test_siginterrupt_off',863# 'test_socketserver.SocketServerTest.test_ForkingTCPServer',864# 'test_socketserver.SocketServerTest.test_ForkingUDPServer',865# 'test_socketserver.SocketServerTest.test_ForkingUnixStreamServer'])866# LibreSSL reports OPENSSL_VERSION_INFO (2, 0, 0, 0, 0) regardless of its version,867# so this is known to fail on some distros. We don't want to detect this because we868# don't want to trigger the side-effects of importing ssl prematurely if we will869# be monkey-patching, so we skip this test everywhere. It doesn't do much for us870# anyway.871disabled_tests += [872 'test_ssl.BasicSocketTests.test_openssl_version'873]874# Now build up the data structure we'll use to actually find disabled tests875# to avoid a linear scan for every file (it seems the list could get quite large)876# (First, freeze the source list to make sure it isn't modified anywhere)877def _build_test_structure(sequence_of_tests):878 _disabled_tests = frozenset(sequence_of_tests)879 disabled_tests_by_file = collections.defaultdict(set)880 for file_case_meth in _disabled_tests:881 file_name, _case, _meth = file_case_meth.split('.')882 by_file = disabled_tests_by_file[file_name]883 by_file.add(file_case_meth)884 return disabled_tests_by_file885_disabled_tests_by_file = _build_test_structure(disabled_tests)886_wrapped_tests_by_file = _build_test_structure(wrapped_tests)887def disable_tests_in_source(source, filename):888 # Source and filename are both native strings.889 if filename.startswith('./'):890 # turn "./test_socket.py" (used for auto-complete) into "test_socket.py"891 filename = filename[2:]892 if filename.endswith('.py'):893 filename = filename[:-3]894 # XXX ignoring TestCase class name (just using function name).895 # Maybe we should do this with the AST, or even after the test is896 # imported.897 my_disabled_tests = _disabled_tests_by_file.get(filename, ())898 my_wrapped_tests = _wrapped_tests_by_file.get(filename, {})899 if my_disabled_tests or my_wrapped_tests:900 # Insert our imports early in the file.901 # If we do it on a def-by-def basis, we can break syntax902 # if the function is already decorated903 pattern = r'^import .*'904 replacement = r'from gevent.testing import patched_tests_setup as _GEVENT_PTS;'905 replacement += r'import unittest as _GEVENT_UTS;'906 replacement += r'\g<0>'907 source, n = re.subn(pattern, replacement, source, 1, re.MULTILINE)908 print("Added imports", n)909 # Test cases will always be indented some,910 # so use [ \t]+. Without indentation, test_main, commonly used as the911 # __main__ function at the top level, could get matched. \s matches912 # newlines even in MULTILINE mode so it would still match that.913 my_disabled_testcases = set()914 for test in my_disabled_tests:915 testcase = test.split('.')[-1]916 my_disabled_testcases.add(testcase)917 # def foo_bar(self)918 # ->919 # @_GEVENT_UTS.skip('Removed by patched_tests_setup')920 # def foo_bar(self)921 pattern = r"^([ \t]+)def " + testcase922 replacement = r"\1@_GEVENT_UTS.skip('Removed by patched_tests_setup: %s')\n" % (test,)923 replacement += r"\g<0>"924 source, n = re.subn(pattern, replacement, source, 0, re.MULTILINE)925 print('Skipped %s (%d)' % (testcase, n), file=sys.stderr)926 for test in my_wrapped_tests:927 testcase = test.split('.')[-1]928 if testcase in my_disabled_testcases:929 print("Not wrapping %s because it is skipped" % (test,))930 continue931 # def foo_bar(self)932 # ->933 # @_GEVENT_PTS._PatchedTest('file.Case.name')934 # def foo_bar(self)935 pattern = r"^([ \t]+)def " + testcase936 replacement = r"\1@_GEVENT_PTS._PatchedTest('%s')\n" % (test,)937 replacement += r"\g<0>"938 source, n = re.subn(pattern, replacement, source, 0, re.MULTILINE)939 print('Wrapped %s (%d)' % (testcase, n), file=sys.stderr)...
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!