diff options
Diffstat (limited to 'tests/utils.py')
-rw-r--r-- | tests/utils.py | 48 |
1 files changed, 43 insertions, 5 deletions
diff --git a/tests/utils.py b/tests/utils.py index 182dc1df0..eb2c40c52 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -1,7 +1,15 @@ import contextlib import http.server +import os +import pathlib +import ssl import threading +# Generated with: +# $ openssl req -new -x509 -days 3650 -nodes -out cert.pem \ +# -keyout cert.pem -addext "subjectAltName = DNS:localhost" +CERT_FILE = str(pathlib.Path(__file__).parent / "certs" / "cert.pem") + class HttpServerThread(threading.Thread): def __init__(self, handler, *args, **kwargs): @@ -17,11 +25,41 @@ class HttpServerThread(threading.Thread): self.join() +class HttpsServerThread(HttpServerThread): + def __init__(self, handler, *args, **kwargs): + super().__init__(handler, *args, **kwargs) + self.server.socket = ssl.wrap_socket( + self.server.socket, + certfile=CERT_FILE, + server_side=True, + ) + + +def create_server(thread_class): + def server(handler): + server_thread = thread_class(handler, daemon=True) + server_thread.start() + try: + yield server_thread + finally: + server_thread.terminate() + return contextlib.contextmanager(server) + + +http_server = create_server(HttpServerThread) +https_server = create_server(HttpsServerThread) + + @contextlib.contextmanager -def http_server(handler): - server_thread = HttpServerThread(handler, daemon=True) - server_thread.start() +def modify_env(**env): + original_env = os.environ.copy() + for k, v in env.items(): + os.environ[k] = v try: - yield server_thread + yield finally: - server_thread.terminate() + for k in env: + try: + os.environ[k] = original_env[k] + except KeyError: + os.unsetenv(k) |