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):
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
if ssl_ca and os.path.exists(ssl_ca):
from authserv import openssl
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)
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
patch_all()
from gevent.pywsgi import WSGIServer
......@@ -105,10 +105,10 @@ def run_gevent(addr, port, ssl_ca, ssl_cert, ssl_key, dh_params):
'ssl_version': ssl.PROTOCOL_TLSv1,
}
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:
engines = engines.split(',')
else:
......@@ -120,7 +120,7 @@ def run(engines, addr, port, ssl_ca, ssl_cert, ssl_key, dh_params):
logging.error('Unknown HTTP engine "%s"', e)
continue
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:
pass
......@@ -174,7 +174,8 @@ def main():
signal.signal(signal.SIGINT, _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)
......
import httplib
import os
import socket
import subprocess
import sys
import time
......@@ -17,6 +18,14 @@ def _relpath(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):
def __init__(self, cert, key):
......@@ -36,12 +45,10 @@ class HTTPSClientAuthHandler(urllib2.HTTPSHandler):
class SSLServerTest(unittest.TestCase):
port = 63127
ssl_ca = _relpath('testca/ca.pem')
ssl_cert = _relpath('testca/certs/server.pem')
ssl_ca = _relpath('testca/public/ca.pem')
ssl_cert = _relpath('testca/public/certs/server.pem')
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')
dhparams = _relpath('testca/dhparams')
......@@ -56,7 +63,8 @@ class SSLServerTest(unittest.TestCase):
'DEBUG': True,
})
self._start_server()
self.port = _free_port()
self._start_server(app)
self.opener = urllib2.build_opener(
HTTPSClientAuthHandler(self.client_cert, self.client_key))
......@@ -64,13 +72,14 @@ class SSLServerTest(unittest.TestCase):
def tearDown(self):
os.kill(self.pid, 15)
def _start_server(self):
def _start_server(self, app):
"""Run an SSL-enabled HTTP server as a separate process."""
pid = os.fork()
if pid == 0:
print >>sys.stderr, 'starting server on port %d' % self.port
server.run(None, '127.0.0.1', self.port, self.ssl_ca,
self.ssl_cert, self.ssl_key, self.dhparams)
server.run_gevent(
app, '127.0.0.1', self.port, self.ssl_ca,
self.ssl_cert, self.ssl_key, self.dhparams)
else:
self.pid = pid
time.sleep(0.2)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment