summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorGregory P. Smith <greg@krypto.org>2019-02-17 01:22:39 (GMT)
committerGitHub <noreply@github.com>2019-02-17 01:22:39 (GMT)
commit414c625a7ea58943f0b1bc79d095d667d78db013 (patch)
tree6258a4a0ea4657af50835f6522970002f81039a8 /Lib
parent5382203ae1bf637f9554277d5597d04805934420 (diff)
downloadcpython-414c625a7ea58943f0b1bc79d095d667d78db013.zip
cpython-414c625a7ea58943f0b1bc79d095d667d78db013.tar.gz
cpython-414c625a7ea58943f0b1bc79d095d667d78db013.tar.bz2
bpo-36013: delete fragile interactive shell SIGINT test (GH-11902)
It makes the existing smaller test more readable and robust at the same time. The execution of a shell in interactive mode from CI and buildbot test automation wasn't working out. What would work locally in our terminals would only work within a fraction of automation systems. The integration test was a nice to have. painful. deleting. :)
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_signal.py40
1 files changed, 7 insertions, 33 deletions
diff --git a/Lib/test/test_signal.py b/Lib/test/test_signal.py
index 80c0ff4..063b35c 100644
--- a/Lib/test/test_signal.py
+++ b/Lib/test/test_signal.py
@@ -83,42 +83,16 @@ class PosixTests(unittest.TestCase):
"""KeyboardInterrupt triggers exit via SIGINT."""
process = subprocess.run(
[sys.executable, "-c",
- "import os,signal; os.kill(os.getpid(), signal.SIGINT)"],
+ "import os, signal, time\n"
+ "os.kill(os.getpid(), signal.SIGINT)\n"
+ "for _ in range(999): time.sleep(0.01)"],
stderr=subprocess.PIPE)
self.assertIn(b"KeyboardInterrupt", process.stderr)
self.assertEqual(process.returncode, -signal.SIGINT)
-
- @unittest.skipUnless(sys.executable, "sys.executable required.")
- def test_keyboard_interrupt_communicated_to_shell(self):
- """KeyboardInterrupt exits such that shells detect a ^C."""
- try:
- bash_proc = subprocess.run(
- ["bash", "-c", 'echo "${BASH_VERSION}"'],
- stdout=subprocess.PIPE, stderr=subprocess.DEVNULL)
- except OSError:
- raise unittest.SkipTest("bash required.")
- if bash_proc.returncode:
- raise unittest.SkipTest("could not determine bash version.")
- bash_ver = bash_proc.stdout.decode("ascii").strip()
- bash_major_minor = [int(n) for n in bash_ver.split(".", 2)[:2]]
- if bash_major_minor < [4, 4]:
- # In older versions of bash, -i does not work as needed
- # _for this automated test_. Older shells do behave as
- # expected in manual interactive use.
- raise unittest.SkipTest(f"bash version {bash_ver} is too old.")
- # The motivation for https://bugs.python.org/issue1054041.
- # An _interactive_ shell (bash -i simulates that here) detects
- # when a command exits via ^C and stops executing further
- # commands.
- process = subprocess.run(
- ["bash", "-ic",
- f"{sys.executable} -c 'import os,signal; os.kill(os.getpid(), signal.SIGINT)'; "
- "echo TESTFAIL using bash \"${BASH_VERSION}\""],
- stderr=subprocess.PIPE, stdout=subprocess.PIPE)
- self.assertIn(b"KeyboardInterrupt", process.stderr)
- # An interactive shell will abort if python exits properly to
- # indicate that a KeyboardInterrupt occurred.
- self.assertNotIn(b"TESTFAIL", process.stdout)
+ # Caveat: The exit code is insufficient to guarantee we actually died
+ # via a signal. POSIX shells do more than look at the 8 bit value.
+ # Writing an automation friendly test of an interactive shell
+ # to confirm that our process died via a SIGINT proved too complex.
@unittest.skipUnless(sys.platform == "win32", "Windows specific")