[Python-checkins] r54678 - python/trunk/Lib/test/test_socket_ssl.py

facundo.batista python-checkins at python.org
Tue Apr 3 23:15:37 CEST 2007


Author: facundo.batista
Date: Tue Apr 3 23:15:34 2007
New Revision: 54678
Modified:
 python/trunk/Lib/test/test_socket_ssl.py
Log:
Changed the whole structure of startup and checking if the 
server is available. Hope to not get more false alarms.
Modified: python/trunk/Lib/test/test_socket_ssl.py
==============================================================================
--- python/trunk/Lib/test/test_socket_ssl.py	(original)
+++ python/trunk/Lib/test/test_socket_ssl.py	Tue Apr 3 23:15:34 2007
@@ -110,32 +110,24 @@
 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 @@
 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 @@
 # 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()


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /