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.
This commit is contained in:
Thomas LEVEIL 2017-02-25 02:15:37 +01:00
parent 563cfedb98
commit d282c2481b
4 changed files with 20 additions and 24 deletions

View file

@ -1,6 +1,7 @@
# Docker Image running one (or multiple) webservers listening on all given ports from WEB_PORTS environment variable # Docker Image running one (or multiple) webservers listening on all given ports from WEB_PORTS environment variable
FROM python:3 FROM python:3
RUN pip install flask==0.12
COPY ./webserver.py / COPY ./webserver.py /
COPY ./entrypoint.sh / COPY ./entrypoint.sh /
WORKDIR /opt WORKDIR /opt

View file

@ -1,31 +1,26 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import os
import os, sys import sys
import http.server from flask import Flask, Response, request
import socketserver app = Flask(__name__)
class Handler(http.server.SimpleHTTPRequestHandler): @app.route("/")
def do_GET(self): def root():
return Response("I'm %s\n" % os.environ['HOSTNAME'], mimetype="text/plain")
self.send_response(200)
self.send_header("Content-Type", "text/plain")
self.end_headers()
if self.path == "/headers":
self.wfile.write(self.headers.as_string().encode()) @app.route("/headers")
elif self.path == "/port": def headers():
response = "answer from port %s\n" % PORT return Response("".join(["%s: %s\n" % (header, value) for header, value in request.headers.items()]), mimetype="text/plain")
self.wfile.write(response.encode())
elif self.path == "/":
response = "I'm %s\n" % os.environ['HOSTNAME'] @app.route("/port")
self.wfile.write(response.encode()) def port():
else: return Response("answer from port %s\n" % PORT, mimetype="text/plain")
self.wfile.write("No route for this path!\n".encode())
if __name__ == '__main__': if __name__ == '__main__':
PORT = int(sys.argv[1]) PORT = int(sys.argv[1])
socketserver.TCPServer.allow_reuse_address = True app.run(host="0.0.0.0", port=PORT)
httpd = socketserver.TCPServer(('0.0.0.0', PORT), Handler)
httpd.serve_forever()

View file

@ -63,7 +63,7 @@ def test_X_Forwarded_Ssl_is_overwritten(docker_compose, nginxproxy):
def test_X_Real_IP_is_generated(docker_compose, nginxproxy): def test_X_Real_IP_is_generated(docker_compose, nginxproxy):
r = nginxproxy.get("http://web.nginx-proxy.tld/headers") r = nginxproxy.get("http://web.nginx-proxy.tld/headers")
assert r.status_code == 200 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): def test_Host_is_passed_on(docker_compose, nginxproxy):
r = nginxproxy.get("http://web.nginx-proxy.tld/headers") r = nginxproxy.get("http://web.nginx-proxy.tld/headers")

View file

@ -64,7 +64,7 @@ def test_X_Forwarded_Ssl_is_overwritten(docker_compose, nginxproxy):
def test_X_Real_IP_is_generated(docker_compose, nginxproxy): def test_X_Real_IP_is_generated(docker_compose, nginxproxy):
r = nginxproxy.get("https://web.nginx-proxy.tld/headers") r = nginxproxy.get("https://web.nginx-proxy.tld/headers")
assert r.status_code == 200 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): def test_Host_is_passed_on(docker_compose, nginxproxy):
r = nginxproxy.get("https://web.nginx-proxy.tld/headers") r = nginxproxy.get("https://web.nginx-proxy.tld/headers")