Commit 43f5ac2f authored by Łukasz Nowak's avatar Łukasz Nowak Committed by Łukasz Nowak

caddy-frontend/test: Assert proper Content-Type

If backend does not send Content-Type the frontend is responsible of adding
correct one.
parent b75522ae
...@@ -44,6 +44,7 @@ import tempfile ...@@ -44,6 +44,7 @@ import tempfile
import ipaddress import ipaddress
import StringIO import StringIO
import gzip import gzip
import base64
try: try:
...@@ -660,6 +661,9 @@ class TestHandler(BaseHTTPRequestHandler): ...@@ -660,6 +661,9 @@ class TestHandler(BaseHTTPRequestHandler):
time.sleep(timeout) time.sleep(timeout)
self.send_response(200) self.send_response(200)
drop_header_list = []
for header in self.headers.dict.get('x-drop-header', '').split():
drop_header_list.append(header)
prefix = 'x-reply-header-' prefix = 'x-reply-header-'
length = len(prefix) length = len(prefix)
for key, value in self.headers.dict.items(): for key, value in self.headers.dict.items():
...@@ -669,26 +673,33 @@ class TestHandler(BaseHTTPRequestHandler): ...@@ -669,26 +673,33 @@ class TestHandler(BaseHTTPRequestHandler):
value.strip() value.strip()
) )
self.send_header("Content-Type", "application/json") if 'Content-Type' not in drop_header_list:
self.send_header('Set-Cookie', 'secured=value;secure') self.send_header("Content-Type", "application/json")
self.send_header('Set-Cookie', 'nonsecured=value') if 'Set-Cookie' not in drop_header_list:
response = { self.send_header('Set-Cookie', 'secured=value;secure')
'Path': self.path, self.send_header('Set-Cookie', 'nonsecured=value')
'Incoming Headers': self.headers.dict
} if 'x-reply-body' not in self.headers.dict:
json_response = json.dumps(response, indent=2) response = {
'Path': self.path,
'Incoming Headers': self.headers.dict
}
response = json.dumps(response, indent=2)
else:
response = base64.b64decode(self.headers.dict['x-reply-body'])
if compress: if compress:
self.send_header('Content-Encoding', 'gzip') self.send_header('Content-Encoding', 'gzip')
out = StringIO.StringIO() out = StringIO.StringIO()
# compress with level 0, to find out if in the middle someting would # compress with level 0, to find out if in the middle someting would
# like to alter the compression # like to alter the compression
with gzip.GzipFile(fileobj=out, mode="w", compresslevel=0) as f: with gzip.GzipFile(fileobj=out, mode="w", compresslevel=0) as f:
f.write(json_response) f.write(response)
json_response = out.getvalue() response = out.getvalue()
self.send_header('Backend-Content-Length', len(json_response)) self.send_header('Backend-Content-Length', len(response))
self.send_header('Content-Length', len(json_response)) if 'Content-Length' not in drop_header_list:
self.send_header('Content-Length', len(response))
self.end_headers() self.end_headers()
self.wfile.write(json_response) self.wfile.write(response)
class SlaveHttpFrontendTestCase(HttpFrontendTestCase): class SlaveHttpFrontendTestCase(HttpFrontendTestCase):
...@@ -1587,6 +1598,30 @@ http://apachecustomhttpsaccepted.example.com:%%(http_port)s { ...@@ -1587,6 +1598,30 @@ http://apachecustomhttpsaccepted.example.com:%%(http_port)s {
) )
self.assertFalse('Content-Encoding' in result_not_compressed.headers) self.assertFalse('Content-Encoding' in result_not_compressed.headers)
def test_no_content_type_alter(self):
parameter_dict = self.assertSlaveBase('Url')
result = self.fakeHTTPSResult(
parameter_dict['domain'], parameter_dict['public-ipv4'],
'test-path/deep/.././deeper',
headers={
'Accept-Encoding': 'gzip',
'X-Reply-Body': base64.b64encode(
b"""<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>"""),
'X-Drop-Header': 'Content-Type'
}
)
self.assertEqual(
'text/xml; charset=utf-8',
result.headers['Content-Type']
)
@skip('Feature postponed') @skip('Feature postponed')
def test_url_ipv6_access(self): def test_url_ipv6_access(self):
parameter_dict = self.parseSlaveParameterDict('url') parameter_dict = self.parseSlaveParameterDict('url')
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment