Skip to content
Snippets Groups Projects
Commit 54b47431 authored by ale's avatar ale
Browse files

run the right app when testing

parent 06f4d220
No related branches found
No related tags found
No related merge requests found
...@@ -79,17 +79,17 @@ def create_app(userdb=None, mc=None): ...@@ -79,17 +79,17 @@ def create_app(userdb=None, mc=None):
return app return app
def run_werkzeug(addr, port, ssl_ca, ssl_cert, ssl_key, dh_params): def run_werkzeug(flask_app, addr, port, ssl_ca, ssl_cert, ssl_key, dh_params):
ssl_ctx = None ssl_ctx = None
if ssl_ca and os.path.exists(ssl_ca): if ssl_ca and os.path.exists(ssl_ca):
from authserv import openssl from authserv import openssl
ssl_ctx = openssl.create_server_context( ssl_ctx = openssl.create_server_context(
ssl_cert, ssl_key, ssl_ca, dhparams) ssl_cert, ssl_key, ssl_ca, dh_params)
logging.info('starting werkzeug server on %s:%d', addr, port) logging.info('starting werkzeug server on %s:%d', addr, port)
create_app().run(host=addr, port=port, use_reloader=False, ssl_context=ssl_ctx) flask_app.run(host=addr, port=port, use_reloader=False, ssl_context=ssl_ctx)
def run_gevent(addr, port, ssl_ca, ssl_cert, ssl_key, dh_params): def run_gevent(flask_app, addr, port, ssl_ca, ssl_cert, ssl_key, dh_params):
from gevent.monkey import patch_all from gevent.monkey import patch_all
patch_all() patch_all()
from gevent.pywsgi import WSGIServer from gevent.pywsgi import WSGIServer
...@@ -105,10 +105,10 @@ def run_gevent(addr, port, ssl_ca, ssl_cert, ssl_key, dh_params): ...@@ -105,10 +105,10 @@ def run_gevent(addr, port, ssl_ca, ssl_cert, ssl_key, dh_params):
'ssl_version': ssl.PROTOCOL_TLSv1, 'ssl_version': ssl.PROTOCOL_TLSv1,
} }
logging.info('starting gevent server on %s:%d', addr, port) logging.info('starting gevent server on %s:%d', addr, port)
WSGIServer((addr, port), create_app().wsgi_app, **ssl_args).serve_forever() WSGIServer((addr, port), flask_app.wsgi_app, **ssl_args).serve_forever()
def run(engines, addr, port, ssl_ca, ssl_cert, ssl_key, dh_params): def run(flask_app, engines, addr, port, ssl_ca, ssl_cert, ssl_key, dh_params):
if engines: if engines:
engines = engines.split(',') engines = engines.split(',')
else: else:
...@@ -120,7 +120,7 @@ def run(engines, addr, port, ssl_ca, ssl_cert, ssl_key, dh_params): ...@@ -120,7 +120,7 @@ def run(engines, addr, port, ssl_ca, ssl_cert, ssl_key, dh_params):
logging.error('Unknown HTTP engine "%s"', e) logging.error('Unknown HTTP engine "%s"', e)
continue continue
try: try:
return fn(addr, port, ssl_ca, ssl_cert, ssl_key, dh_params) return fn(flask_app, addr, port, ssl_ca, ssl_cert, ssl_key, dh_params)
except ImportError: except ImportError:
pass pass
...@@ -174,7 +174,8 @@ def main(): ...@@ -174,7 +174,8 @@ def main():
signal.signal(signal.SIGINT, _stopall) signal.signal(signal.SIGINT, _stopall)
signal.signal(signal.SIGTERM, _stopall) signal.signal(signal.SIGTERM, _stopall)
run(opts.engine, opts.addr, opts.port, opts.ssl_ca, run(create_app(),
opts.engine, opts.addr, opts.port, opts.ssl_ca,
opts.ssl_cert, opts.ssl_key, opts.dh_params) opts.ssl_cert, opts.ssl_key, opts.dh_params)
......
import httplib import httplib
import os import os
import socket
import subprocess import subprocess
import sys import sys
import time import time
...@@ -17,6 +18,14 @@ def _relpath(x): ...@@ -17,6 +18,14 @@ def _relpath(x):
return os.path.join(os.path.dirname(__file__), x) return os.path.join(os.path.dirname(__file__), x)
def _free_port():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP)
s.bind(('127.0.0.1', 0))
port = s.getsockname()[1]
s.close()
return port
class HTTPSClientAuthHandler(urllib2.HTTPSHandler): class HTTPSClientAuthHandler(urllib2.HTTPSHandler):
def __init__(self, cert, key): def __init__(self, cert, key):
...@@ -36,12 +45,10 @@ class HTTPSClientAuthHandler(urllib2.HTTPSHandler): ...@@ -36,12 +45,10 @@ class HTTPSClientAuthHandler(urllib2.HTTPSHandler):
class SSLServerTest(unittest.TestCase): class SSLServerTest(unittest.TestCase):
port = 63127 ssl_ca = _relpath('testca/public/ca.pem')
ssl_cert = _relpath('testca/public/certs/server.pem')
ssl_ca = _relpath('testca/ca.pem')
ssl_cert = _relpath('testca/certs/server.pem')
ssl_key = _relpath('testca/private/server.key') ssl_key = _relpath('testca/private/server.key')
client_cert = _relpath('testca/certs/client.pem') client_cert = _relpath('testca/public/certs/client.pem')
client_key = _relpath('testca/private/client.key') client_key = _relpath('testca/private/client.key')
dhparams = _relpath('testca/dhparams') dhparams = _relpath('testca/dhparams')
...@@ -56,7 +63,8 @@ class SSLServerTest(unittest.TestCase): ...@@ -56,7 +63,8 @@ class SSLServerTest(unittest.TestCase):
'DEBUG': True, 'DEBUG': True,
}) })
self._start_server() self.port = _free_port()
self._start_server(app)
self.opener = urllib2.build_opener( self.opener = urllib2.build_opener(
HTTPSClientAuthHandler(self.client_cert, self.client_key)) HTTPSClientAuthHandler(self.client_cert, self.client_key))
...@@ -64,12 +72,13 @@ class SSLServerTest(unittest.TestCase): ...@@ -64,12 +72,13 @@ class SSLServerTest(unittest.TestCase):
def tearDown(self): def tearDown(self):
os.kill(self.pid, 15) os.kill(self.pid, 15)
def _start_server(self): def _start_server(self, app):
"""Run an SSL-enabled HTTP server as a separate process.""" """Run an SSL-enabled HTTP server as a separate process."""
pid = os.fork() pid = os.fork()
if pid == 0: if pid == 0:
print >>sys.stderr, 'starting server on port %d' % self.port print >>sys.stderr, 'starting server on port %d' % self.port
server.run(None, '127.0.0.1', self.port, self.ssl_ca, server.run_gevent(
app, '127.0.0.1', self.port, self.ssl_ca,
self.ssl_cert, self.ssl_key, self.dhparams) self.ssl_cert, self.ssl_key, self.dhparams)
else: else:
self.pid = pid self.pid = pid
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment