summaryrefslogtreecommitdiffhomepage
path: root/test/test_http_header.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_http_header.py')
-rw-r--r--test/test_http_header.py241
1 files changed, 219 insertions, 22 deletions
diff --git a/test/test_http_header.py b/test/test_http_header.py
index b850831d..f2294371 100644
--- a/test/test_http_header.py
+++ b/test/test_http_header.py
@@ -10,7 +10,9 @@ class TestUnitHTTPHeader(unit.TestUnitApplicationPython):
self.load('custom_header')
resp = self.get(headers={
- 'Custom-Header': ' ,'
+ 'Host': 'localhost',
+ 'Custom-Header': ' ,',
+ 'Connection': 'close'
})
self.assertEqual(resp['status'], 200, 'value leading sp status')
@@ -21,7 +23,9 @@ class TestUnitHTTPHeader(unit.TestUnitApplicationPython):
self.load('custom_header')
resp = self.get(headers={
- 'Custom-Header': '\t,'
+ 'Host': 'localhost',
+ 'Custom-Header': '\t,',
+ 'Connection': 'close'
})
self.assertEqual(resp['status'], 200, 'value leading htab status')
@@ -32,7 +36,9 @@ class TestUnitHTTPHeader(unit.TestUnitApplicationPython):
self.load('custom_header')
resp = self.get(headers={
- 'Custom-Header': ', '
+ 'Host': 'localhost',
+ 'Custom-Header': ', ',
+ 'Connection': 'close'
})
self.assertEqual(resp['status'], 200, 'value trailing sp status')
@@ -43,7 +49,9 @@ class TestUnitHTTPHeader(unit.TestUnitApplicationPython):
self.load('custom_header')
resp = self.get(headers={
- 'Custom-Header': ',\t'
+ 'Host': 'localhost',
+ 'Custom-Header': ',\t',
+ 'Connection': 'close'
})
self.assertEqual(resp['status'], 200, 'value trailing htab status')
@@ -54,7 +62,9 @@ class TestUnitHTTPHeader(unit.TestUnitApplicationPython):
self.load('custom_header')
resp = self.get(headers={
- 'Custom-Header': ' , '
+ 'Host': 'localhost',
+ 'Custom-Header': ' , ',
+ 'Connection': 'close'
})
self.assertEqual(resp['status'], 200, 'value both sp status')
@@ -65,7 +75,9 @@ class TestUnitHTTPHeader(unit.TestUnitApplicationPython):
self.load('custom_header')
resp = self.get(headers={
- 'Custom-Header': '\t,\t'
+ 'Host': 'localhost',
+ 'Custom-Header': '\t,\t',
+ 'Connection': 'close'
})
self.assertEqual(resp['status'], 200, 'value both htab status')
@@ -76,7 +88,9 @@ class TestUnitHTTPHeader(unit.TestUnitApplicationPython):
self.load('custom_header')
resp = self.get(headers={
- 'Custom-Header': '(),/:;<=>?@[\]{}\t !#$%&\'*+-.^_`|~'
+ 'Host': 'localhost',
+ 'Custom-Header': '(),/:;<=>?@[\]{}\t !#$%&\'*+-.^_`|~',
+ 'Connection': 'close'
})
self.assertEqual(resp['status'], 200, 'value chars status')
@@ -113,7 +127,9 @@ Connection: close
self.load('empty')
resp = self.get(headers={
- ' Custom-Header': 'blah'
+ 'Host': 'localhost',
+ ' Custom-Header': 'blah',
+ 'Connection': 'close'
})
self.assertEqual(resp['status'], 400, 'field leading sp')
@@ -122,7 +138,9 @@ Connection: close
self.load('empty')
resp = self.get(headers={
- '\tCustom-Header': 'blah'
+ 'Host': 'localhost',
+ '\tCustom-Header': 'blah',
+ 'Connection': 'close'
})
self.assertEqual(resp['status'], 400, 'field leading htab')
@@ -131,7 +149,9 @@ Connection: close
self.load('empty')
resp = self.get(headers={
- 'Custom-Header ': 'blah'
+ 'Host': 'localhost',
+ 'Custom-Header ': 'blah',
+ 'Connection': 'close'
})
self.assertEqual(resp['status'], 400, 'field trailing sp')
@@ -140,27 +160,204 @@ Connection: close
self.load('empty')
resp = self.get(headers={
- 'Custom-Header\t': 'blah'
+ 'Host': 'localhost',
+ 'Custom-Header\t': 'blah',
+ 'Connection': 'close'
})
self.assertEqual(resp['status'], 400, 'field trailing htab')
- @unittest.expectedFailure
- def test_http_header_transfer_encoding_chunked(self):
+ def test_http_header_content_length_big(self):
self.load('empty')
- resp = self.http(b"""GET / HTTP/1.1
-Host: localhost
-Transfer-Encoding: chunked
-Connection: close
+ self.assertEqual(self.post(headers={
+ 'Host': 'localhost',
+ 'Content-Length': str(2 ** 64),
+ 'Connection': 'close'
+ }, body='X' * 1000)['status'], 400, 'Content-Length big')
-a
-0123456789
-0
+ def test_http_header_content_length_negative(self):
+ self.load('empty')
-""", raw=True)
+ self.assertEqual(self.post(headers={
+ 'Host': 'localhost',
+ 'Content-Length': '-100',
+ 'Connection': 'close'
+ }, body='X' * 1000)['status'], 400, 'Content-Length negative')
+
+ def test_http_header_content_length_text(self):
+ self.load('empty')
+
+ self.assertEqual(self.post(headers={
+ 'Host': 'localhost',
+ 'Content-Length': 'blah',
+ 'Connection': 'close'
+ }, body='X' * 1000)['status'], 400, 'Content-Length text')
+
+ def test_http_header_content_length_multiple_values(self):
+ self.load('empty')
+
+ self.assertEqual(self.post(headers={
+ 'Host': 'localhost',
+ 'Content-Length': '41, 42',
+ 'Connection': 'close'
+ }, body='X' * 1000)['status'], 400, 'Content-Length multiple value')
+
+ def test_http_header_content_length_multiple_fields(self):
+ self.load('empty')
+
+ self.assertEqual(self.post(headers={
+ 'Host': 'localhost',
+ 'Content-Length': ['41', '42'],
+ 'Connection': 'close'
+ }, body='X' * 1000)['status'], 400, 'Content-Length multiple fields')
+
+ def test_http_header_host_absent(self):
+ self.load('host')
+
+ resp = self.get(headers={'Connection': 'close'})
+
+ self.assertEqual(resp['status'], 200, 'Host absent status')
+ self.assertNotEqual(resp['headers']['X-Server-Name'], '',
+ 'Host absent SERVER_NAME')
+
+ def test_http_header_host_empty(self):
+ self.load('host')
+
+ resp = self.get(headers={
+ 'Host': '',
+ 'Connection': 'close'
+ })
+
+ self.assertEqual(resp['status'], 200, 'Host empty status')
+ self.assertNotEqual(resp['headers']['X-Server-Name'], '',
+ 'Host empty SERVER_NAME')
+
+ def test_http_header_host_big(self):
+ self.load('empty')
+
+ self.assertEqual(self.get(headers={
+ 'Host': 'X' * 10000,
+ 'Connection': 'close'
+ })['status'], 431, 'Host big')
+
+ def test_http_header_host_port(self):
+ self.load('host')
+
+ resp = self.get(headers={
+ 'Host': 'exmaple.com:7080',
+ 'Connection': 'close'
+ })
+
+ self.assertEqual(resp['status'], 200, 'Host port status')
+ self.assertEqual(resp['headers']['X-Server-Name'], 'exmaple.com',
+ 'Host port SERVER_NAME')
+ self.assertEqual(resp['headers']['X-Http-Host'], 'exmaple.com:7080',
+ 'Host port HTTP_HOST')
+
+ def test_http_header_host_port_empty(self):
+ self.load('host')
+
+ resp = self.get(headers={
+ 'Host': 'exmaple.com:',
+ 'Connection': 'close'
+ })
+
+ self.assertEqual(resp['status'], 200, 'Host port empty status')
+ self.assertEqual(resp['headers']['X-Server-Name'], 'exmaple.com',
+ 'Host port empty SERVER_NAME')
+ self.assertEqual(resp['headers']['X-Http-Host'], 'exmaple.com:',
+ 'Host port empty HTTP_HOST')
+
+ def test_http_header_host_literal(self):
+ self.load('host')
+
+ resp = self.get(headers={
+ 'Host': '127.0.0.1',
+ 'Connection': 'close'
+ })
+
+ self.assertEqual(resp['status'], 200, 'Host literal status')
+ self.assertEqual(resp['headers']['X-Server-Name'], '127.0.0.1',
+ 'Host literal SERVER_NAME')
+
+ def test_http_header_host_literal_ipv6(self):
+ self.load('host')
+
+ resp = self.get(headers={
+ 'Host': '[::1]:7080',
+ 'Connection': 'close'
+ })
+
+ self.assertEqual(resp['status'], 200, 'Host literal ipv6 status')
+ self.assertEqual(resp['headers']['X-Server-Name'], '[::1]',
+ 'Host literal ipv6 SERVER_NAME')
+ self.assertEqual(resp['headers']['X-Http-Host'], '[::1]:7080',
+ 'Host literal ipv6 HTTP_HOST')
+
+ def test_http_header_host_trailing_period(self):
+ self.load('host')
+
+ resp = self.get(headers={
+ 'Host': '127.0.0.1.',
+ 'Connection': 'close'
+ })
+
+ self.assertEqual(resp['status'], 200, 'Host trailing period status')
+ self.assertEqual(resp['headers']['X-Server-Name'], '127.0.0.1',
+ 'Host trailing period SERVER_NAME')
+ self.assertEqual(resp['headers']['X-Http-Host'], '127.0.0.1.',
+ 'Host trailing period HTTP_HOST')
+
+ def test_http_header_host_trailing_period_2(self):
+ self.load('host')
+
+ resp = self.get(headers={
+ 'Host': 'EXAMPLE.COM.',
+ 'Connection': 'close'
+ })
+
+ self.assertEqual(resp['status'], 200, 'Host trailing period 2 status')
+ self.assertEqual(resp['headers']['X-Server-Name'], 'example.com',
+ 'Host trailing period 2 SERVER_NAME')
+ self.assertEqual(resp['headers']['X-Http-Host'], 'EXAMPLE.COM.',
+ 'Host trailing period 2 HTTP_HOST')
+
+ def test_http_header_host_case_insensitive(self):
+ self.load('host')
+
+ resp = self.get(headers={
+ 'Host': 'EXAMPLE.COM',
+ 'Connection': 'close'
+ })
+
+ self.assertEqual(resp['status'], 200, 'Host case insensitive')
+ self.assertEqual(resp['headers']['X-Server-Name'], 'example.com',
+ 'Host case insensitive SERVER_NAME')
+
+ def test_http_header_host_double_dot(self):
+ self.load('empty')
+
+ self.assertEqual(self.get(headers={
+ 'Host': '127.0.0..1',
+ 'Connection': 'close'
+ })['status'], 400, 'Host double dot')
+
+ def test_http_header_host_slash(self):
+ self.load('empty')
+
+ self.assertEqual(self.get(headers={
+ 'Host': '/localhost',
+ 'Connection': 'close'
+ })['status'], 400, 'Host slash')
+
+ def test_http_header_host_multiple_fields(self):
+ self.load('empty')
- self.assertEqual(resp['status'], 200, 'transfer encoding chunked')
+ self.assertEqual(self.get(headers={
+ 'Host': ['localhost', 'example.com'],
+ 'Connection': 'close'
+ })['status'], 400, 'Host multiple fields')
if __name__ == '__main__':
TestUnitHTTPHeader.main()