From d282c2481bdf473ed57df5c81471e286c129060b Mon Sep 17 00:00:00 2001 From: Thomas LEVEIL Date: Sat, 25 Feb 2017 02:15:37 +0100 Subject: [PATCH] TESTS: the web image can now handle concurrent connections Using the python web framework [Flask](http://flask.pocoo.org/). As a side effect, headers printed out from the `/headers` end point get capitalized. --- test/requirements/web/Dockerfile | 1 + test/requirements/web/webserver.py | 39 +++++++++++++----------------- test/test_headers/test_http.py | 2 +- test/test_headers/test_https.py | 2 +- 4 files changed, 20 insertions(+), 24 deletions(-) diff --git a/test/requirements/web/Dockerfile b/test/requirements/web/Dockerfile index 923ed79..0d57a93 100644 --- a/test/requirements/web/Dockerfile +++ b/test/requirements/web/Dockerfile @@ -1,6 +1,7 @@ # Docker Image running one (or multiple) webservers listening on all given ports from WEB_PORTS environment variable FROM python:3 +RUN pip install flask==0.12 COPY ./webserver.py / COPY ./entrypoint.sh / WORKDIR /opt diff --git a/test/requirements/web/webserver.py b/test/requirements/web/webserver.py index 305c207..cd4726e 100755 --- a/test/requirements/web/webserver.py +++ b/test/requirements/web/webserver.py @@ -1,31 +1,26 @@ #!/usr/bin/env python3 +import os -import os, sys -import http.server -import socketserver +import sys +from flask import Flask, Response, request +app = Flask(__name__) -class Handler(http.server.SimpleHTTPRequestHandler): - def do_GET(self): - - self.send_response(200) - self.send_header("Content-Type", "text/plain") - self.end_headers() +@app.route("/") +def root(): + return Response("I'm %s\n" % os.environ['HOSTNAME'], mimetype="text/plain") - if self.path == "/headers": - self.wfile.write(self.headers.as_string().encode()) - elif self.path == "/port": - response = "answer from port %s\n" % PORT - self.wfile.write(response.encode()) - elif self.path == "/": - response = "I'm %s\n" % os.environ['HOSTNAME'] - self.wfile.write(response.encode()) - else: - self.wfile.write("No route for this path!\n".encode()) + +@app.route("/headers") +def headers(): + return Response("".join(["%s: %s\n" % (header, value) for header, value in request.headers.items()]), mimetype="text/plain") + + +@app.route("/port") +def port(): + return Response("answer from port %s\n" % PORT, mimetype="text/plain") if __name__ == '__main__': PORT = int(sys.argv[1]) - socketserver.TCPServer.allow_reuse_address = True - httpd = socketserver.TCPServer(('0.0.0.0', PORT), Handler) - httpd.serve_forever() + app.run(host="0.0.0.0", port=PORT) diff --git a/test/test_headers/test_http.py b/test/test_headers/test_http.py index 2799262..4110680 100644 --- a/test/test_headers/test_http.py +++ b/test/test_headers/test_http.py @@ -63,7 +63,7 @@ def test_X_Forwarded_Ssl_is_overwritten(docker_compose, nginxproxy): def test_X_Real_IP_is_generated(docker_compose, nginxproxy): r = nginxproxy.get("http://web.nginx-proxy.tld/headers") assert r.status_code == 200 - assert "X-Real-IP: " in r.text + assert "X-Real-IP: ".upper() in r.text.upper() def test_Host_is_passed_on(docker_compose, nginxproxy): r = nginxproxy.get("http://web.nginx-proxy.tld/headers") diff --git a/test/test_headers/test_https.py b/test/test_headers/test_https.py index a1d434a..beb238a 100644 --- a/test/test_headers/test_https.py +++ b/test/test_headers/test_https.py @@ -64,7 +64,7 @@ def test_X_Forwarded_Ssl_is_overwritten(docker_compose, nginxproxy): def test_X_Real_IP_is_generated(docker_compose, nginxproxy): r = nginxproxy.get("https://web.nginx-proxy.tld/headers") assert r.status_code == 200 - assert "X-Real-IP: " in r.text + assert "X-Real-IP: ".upper() in r.text.upper() def test_Host_is_passed_on(docker_compose, nginxproxy): r = nginxproxy.get("https://web.nginx-proxy.tld/headers")