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
FROM python:3
RUN pip install flask==0.12
COPY ./webserver.py /
COPY ./entrypoint.sh /
WORKDIR /opt

View file

@ -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)

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):
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")

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):
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")