From a0da5c7bce6e30b76da9c9a647315cec9964d127 Mon Sep 17 00:00:00 2001 From: Facundo Batista Date: Tue, 3 Apr 2007 21:15:34 +0000 Subject: Changed the whole structure of startup and checking if the server is available. Hope to not get more false alarms. --- Lib/test/test_socket_ssl.py | 62 ++++++++++++++++++++++++++------------------- 1 file changed, 36 insertions(+), 26 deletions(-) diff --git a/Lib/test/test_socket_ssl.py b/Lib/test/test_socket_ssl.py index 86b1943..4a9cc9b 100644 --- a/Lib/test/test_socket_ssl.py +++ b/Lib/test/test_socket_ssl.py @@ -110,32 +110,24 @@ class BasicTests(unittest.TestCase): class OpenSSLTests(unittest.TestCase): def testBasic(self): - time.sleep(.2) s = socket.socket() s.connect(("localhost", 4433)) ss = socket.ssl(s) ss.write("Foo\n") i = ss.read(4) self.assertEqual(i, "Foo\n") + s.close() -def haveOpenSSL(): - try: - s = subprocess.Popen("openssl rand 1".split(), stdout=subprocess.PIPE) - s.stdout.read(1) - except OSError, err: - if err.errno == 2: - return False - raise - return True - class OpenSSLServer(threading.Thread): def __init__(self): self.s = None self.keepServing = True - threading.Thread.__init__(self) + self._external() + if self.haveServer: + threading.Thread.__init__(self) - def run(self): + def _external(self): if os.access("ssl_cert.pem", os.F_OK): cert_file = "ssl_cert.pem" elif os.access("./Lib/test/ssl_cert.pem", os.F_OK): @@ -149,10 +141,27 @@ class OpenSSLServer(threading.Thread): else: raise ValueError("No cert file found!") - cmd = "openssl s_server -cert %s -key %s -quiet" % (cert_file, key_file) - self.s = subprocess.Popen(cmd.split(), stdin=subprocess.PIPE, + try: + cmd = "openssl s_server -cert %s -key %s -quiet" % (cert_file, key_file) + self.s = subprocess.Popen(cmd.split(), stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + time.sleep(1) + except: + self.haveServer = False + else: + # let's try if it is actually up + try: + s = socket.socket() + s.connect(("localhost", 4433)) + s.close() + assert self.s.stdout.readline() == "ERROR\n" + except: + self.haveServer = False + else: + self.haveServer = True + + def run(self): while self.keepServing: time.sleep(.5) l = self.s.stdout.readline() @@ -181,22 +190,23 @@ def test_main(): # in these platforms we can kill the openssl process if sys.platform in ("sunos5", "darwin", "linux1", "linux2", "win32", "hp-ux11"): - if haveOpenSSL(): - haveServer = True - tests.append(OpenSSLTests) - else: - haveServer = False - if haveServer: server = OpenSSLServer() - server.start() + if server.haveServer: + tests.append(OpenSSLTests) + server.start() + else: + server = None thread_info = test_support.threading_setup() - test_support.run_unittest(*tests) - test_support.threading_cleanup(*thread_info) - if haveServer: - server.shutdown() + try: + test_support.run_unittest(*tests) + finally: + if server is not None and server.haveServer: + server.shutdown() + + test_support.threading_cleanup(*thread_info) if __name__ == "__main__": test_main() -- cgit v0.12