/usr/lib/python3/dist-packages/twisted/test
NameSizeModeActions
__pycache__/-0755rm
cert.pem.no_trailing_newline14140644editdlrm
crash_test_dummy.py5430644editdlrm
iosim.py178430644editdlrm
key.pem.no_trailing_newline17070644editdlrm
mock_win32process.py14990644editdlrm
myrebuilder1.py1580644editdlrm
myrebuilder2.py1580644editdlrm
plugin_basic.py9430644editdlrm
plugin_extra1.py4070644editdlrm
plugin_extra2.py5790644editdlrm
process_cmdline.py1620644editdlrm
process_echoer.py2140644editdlrm
process_fds.py9450644editdlrm
process_getargv.py2830644editdlrm
process_getenv.py2680644editdlrm
process_linger.py2860644editdlrm
process_reader.py1880644editdlrm
process_signal.py2140644editdlrm
process_stdinreader.py8570644editdlrm
process_tester.py10350644editdlrm
process_tty.py1300644editdlrm
process_twisted.py12060644editdlrm
proto_helpers.py286870644editdlrm
raiser.cpython-38-x86_64-linux-gnu.so238640644editdlrm
reflect_helper_IE.py610644editdlrm
reflect_helper_VE.py820644editdlrm
reflect_helper_ZDE.py470644editdlrm
server.pem44440644editdlrm
ssl_helpers.py10320644editdlrm
stdio_test_consumer.py12160644editdlrm
stdio_test_halfclose.py19380644editdlrm
stdio_test_hostpeer.py10210644editdlrm
stdio_test_lastwrite.py12060644editdlrm
stdio_test_loseconn.py15480644editdlrm
stdio_test_producer.py15070644editdlrm
stdio_test_write.py9230644editdlrm
stdio_test_writeseq.py9150644editdlrm
testutils.py53210644editdlrm
test_abstract.py34970644editdlrm
test_adbapi.py261480644editdlrm
test_amp.py1105530644editdlrm
test_application.py328160644editdlrm
test_compat.py292780644editdlrm
test_context.py15150644editdlrm
test_cooperator.py214670644editdlrm
test_defer.py1034070644editdlrm
test_defgen.py107010644editdlrm
test_dict.py14420644editdlrm
test_dirdbm.py66950644editdlrm
test_error.py85930644editdlrm
test_factories.py46370644editdlrm
test_failure.py322880644editdlrm
test_fdesc.py73710644editdlrm
test_finger.py19970644editdlrm
test_formmethod.py36450644editdlrm
test_ftp.py1303210644editdlrm
test_ftp_options.py26850644editdlrm
test_htb.py31900644editdlrm
test_ident.py70150644editdlrm
test_internet.py464220644editdlrm
test_iosim.py90600644editdlrm
test_iutils.py134450644editdlrm
test_lockfile.py155060644editdlrm
test_log.py363300644editdlrm
test_logfile.py182270644editdlrm
test_loopback.py144860644editdlrm
test_main.py25010644editdlrm
test_memcache.py251430644editdlrm
test_modules.py178880644editdlrm
test_monkey.py56370644editdlrm
test_nooldstyle.py59550644editdlrm
test_paths.py743570644editdlrm
test_pcp.py125510644editdlrm
test_persisted.py146240644editdlrm
test_plugin.py261130644editdlrm
test_policies.py334990644editdlrm
test_postfix.py42430644editdlrm
test_process.py861200644editdlrm
test_protocols.py74500644editdlrm
test_randbytes.py33570644editdlrm
test_rebuild.py84950644editdlrm
test_reflect.py260850644editdlrm
test_roots.py18120644editdlrm
test_shortcut.py19910644editdlrm
test_sip.py252840644editdlrm
test_sob.py56320644editdlrm
test_socks.py177380644editdlrm
test_ssl.py238460644editdlrm
test_sslverify.py1133220644editdlrm
test_stateful.py20210644editdlrm
test_stdio.py131560644editdlrm
test_strerror.py51830644editdlrm
test_stringtransport.py132640644editdlrm
test_strports.py17970644editdlrm
test_task.py393260644editdlrm
test_tcp.py658200644editdlrm
test_tcp_internals.py131170644editdlrm
test_text.py64560644editdlrm
test_threadable.py37380644editdlrm
test_threadpool.py222040644editdlrm
test_threads.py132680644editdlrm
test_tpfile.py16010644editdlrm
test_twistd.py742010644editdlrm
test_twisted.py111730644editdlrm
test_udp.py246760644editdlrm
test_unix.py151570644editdlrm
test_usage.py236450644editdlrm
__init__.py1030644editdlrm
Edit: /usr/lib/python3/dist-packages/twisted/test/test_iutils.py (13445B)
# Copyright (c) Twisted Matrix Laboratories. # See LICENSE for details. """ Test running processes with the APIs in L{twisted.internet.utils}. """ from __future__ import division, absolute_import import warnings, os, stat, sys, signal from twisted.python.compat import _PY3 from twisted.python.runtime import platform from twisted.trial import unittest from twisted.internet import error, reactor, utils, interfaces from twisted.internet.defer import Deferred from twisted.python.test.test_util import SuppressedWarningsTests class ProcessUtilsTests(unittest.TestCase): """ Test running a process using L{getProcessOutput}, L{getProcessValue}, and L{getProcessOutputAndValue}. """ if interfaces.IReactorProcess(reactor, None) is None: skip = "reactor doesn't implement IReactorProcess" output = None value = None exe = sys.executable def makeSourceFile(self, sourceLines): """ Write the given list of lines to a text file and return the absolute path to it. """ script = self.mktemp() with open(script, 'wt') as scriptFile: scriptFile.write(os.linesep.join(sourceLines) + os.linesep) return os.path.abspath(script) def test_output(self): """ L{getProcessOutput} returns a L{Deferred} which fires with the complete output of the process it runs after that process exits. """ scriptFile = self.makeSourceFile([ "import sys", "for s in b'hello world\\n':", " if hasattr(sys.stdout, 'buffer'):", " # Python 3", " s = bytes([s])", " sys.stdout.buffer.write(s)", " else:", " # Python 2", " sys.stdout.write(s)", " sys.stdout.flush()"]) d = utils.getProcessOutput(self.exe, ['-u', scriptFile]) return d.addCallback(self.assertEqual, b"hello world\n") def test_outputWithErrorIgnored(self): """ The L{Deferred} returned by L{getProcessOutput} is fired with an L{IOError} L{Failure} if the child process writes to stderr. """ # make sure stderr raises an error normally scriptFile = self.makeSourceFile([ 'import sys', 'sys.stderr.write("hello world\\n")' ]) d = utils.getProcessOutput(self.exe, ['-u', scriptFile]) d = self.assertFailure(d, IOError) def cbFailed(err): return self.assertFailure(err.processEnded, error.ProcessDone) d.addCallback(cbFailed) return d def test_outputWithErrorCollected(self): """ If a C{True} value is supplied for the C{errortoo} parameter to L{getProcessOutput}, the returned L{Deferred} fires with the child's stderr output as well as its stdout output. """ scriptFile = self.makeSourceFile([ 'import sys', # Write the same value to both because ordering isn't guaranteed so # this simplifies the test. 'sys.stdout.write("foo")', 'sys.stdout.flush()', 'sys.stderr.write("foo")', 'sys.stderr.flush()']) d = utils.getProcessOutput(self.exe, ['-u', scriptFile], errortoo=True) return d.addCallback(self.assertEqual, b"foofoo") def test_value(self): """ The L{Deferred} returned by L{getProcessValue} is fired with the exit status of the child process. """ scriptFile = self.makeSourceFile(["raise SystemExit(1)"]) d = utils.getProcessValue(self.exe, ['-u', scriptFile]) return d.addCallback(self.assertEqual, 1) def test_outputAndValue(self): """ The L{Deferred} returned by L{getProcessOutputAndValue} fires with a three-tuple, the elements of which give the data written to the child's stdout, the data written to the child's stderr, and the exit status of the child. """ scriptFile = self.makeSourceFile([ "import sys", "if hasattr(sys.stdout, 'buffer'):", " # Python 3", " sys.stdout.buffer.write(b'hello world!\\n')", " sys.stderr.buffer.write(b'goodbye world!\\n')", "else:", " # Python 2", " sys.stdout.write(b'hello world!\\n')", " sys.stderr.write(b'goodbye world!\\n')", "sys.exit(1)" ]) def gotOutputAndValue(out_err_code): out, err, code = out_err_code self.assertEqual(out, b"hello world!\n") if _PY3: self.assertEqual(err, b"goodbye world!\n") else: self.assertEqual(err, b"goodbye world!" + os.linesep) self.assertEqual(code, 1) d = utils.getProcessOutputAndValue(self.exe, ["-u", scriptFile]) return d.addCallback(gotOutputAndValue) def test_outputSignal(self): """ If the child process exits because of a signal, the L{Deferred} returned by L{getProcessOutputAndValue} fires a L{Failure} of a tuple containing the child's stdout, stderr, and the signal which caused it to exit. """ # Use SIGKILL here because it's guaranteed to be delivered. Using # SIGHUP might not work in, e.g., a buildbot slave run under the # 'nohup' command. scriptFile = self.makeSourceFile([ "import sys, os, signal", "sys.stdout.write('stdout bytes\\n')", "sys.stderr.write('stderr bytes\\n')", "sys.stdout.flush()", "sys.stderr.flush()", "os.kill(os.getpid(), signal.SIGKILL)"]) def gotOutputAndValue(out_err_sig): out, err, sig = out_err_sig self.assertEqual(out, b"stdout bytes\n") self.assertEqual(err, b"stderr bytes\n") self.assertEqual(sig, signal.SIGKILL) d = utils.getProcessOutputAndValue(self.exe, ['-u', scriptFile]) d = self.assertFailure(d, tuple) return d.addCallback(gotOutputAndValue) if platform.isWindows(): test_outputSignal.skip = "Windows doesn't have real signals." def _pathTest(self, utilFunc, check): dir = os.path.abspath(self.mktemp()) os.makedirs(dir) scriptFile = self.makeSourceFile([ "import os, sys", "sys.stdout.write(os.getcwd())"]) d = utilFunc(self.exe, ['-u', scriptFile], path=dir) d.addCallback(check, dir.encode(sys.getfilesystemencoding())) return d def test_getProcessOutputPath(self): """ L{getProcessOutput} runs the given command with the working directory given by the C{path} parameter. """ return self._pathTest(utils.getProcessOutput, self.assertEqual) def test_getProcessValuePath(self): """ L{getProcessValue} runs the given command with the working directory given by the C{path} parameter. """ def check(result, ignored): self.assertEqual(result, 0) return self._pathTest(utils.getProcessValue, check) def test_getProcessOutputAndValuePath(self): """ L{getProcessOutputAndValue} runs the given command with the working directory given by the C{path} parameter. """ def check(out_err_status, dir): out, err, status = out_err_status self.assertEqual(out, dir) self.assertEqual(status, 0) return self._pathTest(utils.getProcessOutputAndValue, check) def _defaultPathTest(self, utilFunc, check): # Make another directory to mess around with. dir = os.path.abspath(self.mktemp()) os.makedirs(dir) scriptFile = self.makeSourceFile([ "import os, sys, stat", # Fix the permissions so we can report the working directory. # On macOS (and maybe elsewhere), os.getcwd() fails with EACCES # if +x is missing from the working directory. "os.chmod(%r, stat.S_IXUSR)" % (dir,), "sys.stdout.write(os.getcwd())"]) # Switch to it, but make sure we switch back self.addCleanup(os.chdir, os.getcwd()) os.chdir(dir) # Get rid of all its permissions, but make sure they get cleaned up # later, because otherwise it might be hard to delete the trial # temporary directory. self.addCleanup( os.chmod, dir, stat.S_IMODE(os.stat('.').st_mode)) os.chmod(dir, 0) # Pass in -S so that if run using the coverage .pth trick, it won't be # loaded and cause Coverage to try and get the current working # directory (see the comments above why this can be a problem) on OSX. d = utilFunc(self.exe, ['-S', '-u', scriptFile]) d.addCallback(check, dir.encode(sys.getfilesystemencoding())) return d def test_getProcessOutputDefaultPath(self): """ If no value is supplied for the C{path} parameter, L{getProcessOutput} runs the given command in the same working directory as the parent process and succeeds even if the current working directory is not accessible. """ return self._defaultPathTest(utils.getProcessOutput, self.assertEqual) def test_getProcessValueDefaultPath(self): """ If no value is supplied for the C{path} parameter, L{getProcessValue} runs the given command in the same working directory as the parent process and succeeds even if the current working directory is not accessible. """ def check(result, ignored): self.assertEqual(result, 0) return self._defaultPathTest(utils.getProcessValue, check) def test_getProcessOutputAndValueDefaultPath(self): """ If no value is supplied for the C{path} parameter, L{getProcessOutputAndValue} runs the given command in the same working directory as the parent process and succeeds even if the current working directory is not accessible. """ def check(out_err_status, dir): out, err, status = out_err_status self.assertEqual(out, dir) self.assertEqual(status, 0) return self._defaultPathTest( utils.getProcessOutputAndValue, check) class SuppressWarningsTests(unittest.SynchronousTestCase): """ Tests for L{utils.suppressWarnings}. """ def test_suppressWarnings(self): """ L{utils.suppressWarnings} decorates a function so that the given warnings are suppressed. """ result = [] def showwarning(self, *a, **kw): result.append((a, kw)) self.patch(warnings, "showwarning", showwarning) def f(msg): warnings.warn(msg) g = utils.suppressWarnings(f, (('ignore',), dict(message="This is message"))) # Start off with a sanity check - calling the original function # should emit the warning. f("Sanity check message") self.assertEqual(len(result), 1) # Now that that's out of the way, call the wrapped function, and # make sure no new warnings show up. g("This is message") self.assertEqual(len(result), 1) # Finally, emit another warning which should not be ignored, and # make sure it is not. g("Unignored message") self.assertEqual(len(result), 2) class DeferredSuppressedWarningsTests(SuppressedWarningsTests): """ Tests for L{utils.runWithWarningsSuppressed}, the version that supports Deferreds. """ # Override the non-Deferred-supporting function from the base class with # the function we are testing in this class: runWithWarningsSuppressed = staticmethod(utils.runWithWarningsSuppressed) def test_deferredCallback(self): """ If the function called by L{utils.runWithWarningsSuppressed} returns a C{Deferred}, the warning filters aren't removed until the Deferred fires. """ filters = [(("ignore", ".*foo.*"), {}), (("ignore", ".*bar.*"), {})] result = Deferred() self.runWithWarningsSuppressed(filters, lambda: result) warnings.warn("ignore foo") result.callback(3) warnings.warn("ignore foo 2") self.assertEqual( ["ignore foo 2"], [w['message'] for w in self.flushWarnings()]) def test_deferredErrback(self): """ If the function called by L{utils.runWithWarningsSuppressed} returns a C{Deferred}, the warning filters aren't removed until the Deferred fires with an errback. """ filters = [(("ignore", ".*foo.*"), {}), (("ignore", ".*bar.*"), {})] result = Deferred() d = self.runWithWarningsSuppressed(filters, lambda: result) warnings.warn("ignore foo") result.errback(ZeroDivisionError()) d.addErrback(lambda f: f.trap(ZeroDivisionError)) warnings.warn("ignore foo 2") self.assertEqual( ["ignore foo 2"], [w['message'] for w in self.flushWarnings()])