Blob Blame History Raw
From 68e6782cb5ebe9f9a17cc28f23687ec2ebc54af0 Mon Sep 17 00:00:00 2001
From: Manuel Stoeckl <code@mstoeckl.com>
Date: Thu, 28 Nov 2019 12:01:16 -0500
Subject: [PATCH] Use subprocess.Popen for startup failure test

According to the Python documentation, the new usage should be valid
for Python >=3.3, covering a wider range than the >=3.5 for
subprocess.Popen. Also, this change avoids a possible regression
with Python 3.8.0 in which the TimeoutExpired exception no longer
provides a non-None .output field.
---
 test/startup_failure.py | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/test/startup_failure.py b/test/startup_failure.py
index 3d4117a..ae988b2 100755
--- a/test/startup_failure.py
+++ b/test/startup_failure.py
@@ -53,23 +53,23 @@ def run_test(name, command, env, use_socketpair, expect_success):
         pfds = []
 
     timed_out = False
+    proc = subprocess.Popen(
+        command,
+        env=env,
+        stdin=subprocess.DEVNULL,
+        stdout=subprocess.PIPE,
+        stderr=subprocess.STDOUT,
+        pass_fds=pfds,
+    )
     try:
-        proc = subprocess.run(
-            command,
-            env=env,
-            stdin=subprocess.DEVNULL,
-            stdout=subprocess.PIPE,
-            stderr=subprocess.STDOUT,
-            timeout=0.25,
-            pass_fds=pfds,
-        )
+        output, none = proc.communicate(timeout=0.25)
     except subprocess.TimeoutExpired as e:
-        timed_out = True
-        output = e.output
         # Program began to wait for a connection
+        proc.kill()
+        output, none = proc.communicate()
         retcode = 0 if "client" in command else (0 if expect_success else 1)
+        timed_out = True
     else:
-        output = proc.stdout
         retcode = proc.returncode
 
     if use_socketpair:
-- 
2.26.2