Changed the whole structure of startup and checking if the

server is available. Hope to not get more false alarms.
This commit is contained in:
Facundo Batista 2007-04-03 21:15:34 +00:00
parent e6dae6c655
commit a0da5c7bce

View file

@ -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()