diff options
-rw-r--r-- | test/test_access_log.py | 220 |
1 files changed, 220 insertions, 0 deletions
diff --git a/test/test_access_log.py b/test/test_access_log.py new file mode 100644 index 00000000..0ec49a51 --- /dev/null +++ b/test/test_access_log.py @@ -0,0 +1,220 @@ +import unittest +import unit +import re + +class TestUnitAccessLog(unit.TestUnitApplicationPython): + + def setUpClass(): + unit.TestUnit().check_modules('python') + + def load(self, script): + super().load(script) + + self.conf('"' + self.testdir + '/access.log"', '/access_log') + + def search_in_log(self, pattern, name='access.log'): + with open(self.testdir + '/' + name, 'r') as f: + return re.search(pattern, f.read()) + + def test_access_log_keepalive(self): + self.load('mirror') + + (resp, sock) = self.post(headers={ + 'Connection': 'keep-alive', + 'Content-Type': 'text/html', + 'Host': 'localhost' + }, start=True, body='01234') + + self.assertIsNotNone( + self.search_in_log(r'"POST / HTTP/1.1" 200 5'), 'keepalive 1') + + resp = self.post(headers={ + 'Connection': 'close', + 'Content-Type': 'text/html', + 'Host': 'localhost' + }, sock=sock, body='0123456789') + + self.stop() + + self.assertIsNotNone( + self.search_in_log(r'"POST / HTTP/1.1" 200 10'), 'keepalive 2') + + def test_access_log_pipeline(self): + self.load('empty') + + self.http(b"""GET / HTTP/1.1 +Host: localhost +Referer: Referer-1 + +GET / HTTP/1.1 +Host: localhost +Referer: Referer-2 + +GET / HTTP/1.1 +Host: localhost +Referer: Referer-3 +Connection: close + +""", raw_resp=True, raw=True) + + self.stop() + + self.assertIsNotNone( + self.search_in_log(r'"GET / HTTP/1.1" 200 0 "Referer-1" "-"'), + 'pipeline 1') + self.assertIsNotNone( + self.search_in_log(r'"GET / HTTP/1.1" 200 0 "Referer-2" "-"'), + 'pipeline 2') + self.assertIsNotNone( + self.search_in_log(r'"GET / HTTP/1.1" 200 0 "Referer-3" "-"'), + 'pipeline 3') + + def test_access_log_ipv6(self): + self.load('empty') + + self.conf({ + "[::1]:7080": { + "application": "empty" + } + }, '/listeners') + + self.get(sock_type='ipv6') + + self.stop() + + self.assertIsNotNone( + self.search_in_log( + r'::1 - - \[.+\] "GET / HTTP/1.1" 200 0 "-" "-"'), 'ipv6') + + def test_access_log_referer(self): + self.load('empty') + + self.get(headers={ + 'Host': 'localhost', + 'Referer': 'referer-value', + 'Connection': 'close' + }) + + self.stop() + + self.assertIsNotNone( + self.search_in_log(r'"GET / HTTP/1.1" 200 0 "referer-value" "-"'), + 'referer') + + def test_access_log_user_agent(self): + self.load('empty') + + self.get(headers={ + 'Host': 'localhost', + 'User-Agent': 'user-agent-value', + 'Connection': 'close' + }) + + self.stop() + + self.assertIsNotNone( + self.search_in_log( + r'"GET / HTTP/1.1" 200 0 "-" "user-agent-value"'), 'user agent') + + def test_access_log_http10(self): + self.load('empty') + + self.get(http_10=True) + + self.stop() + + self.assertIsNotNone( + self.search_in_log( + r'"GET / HTTP/1.0" 200 0 "-" "-"'), 'http 1.0') + + def test_access_log_partial(self): + self.load('empty') + + self.http(b"""GE""", raw_resp=True, raw=True) + + self.stop() + + self.assertIsNotNone( + self.search_in_log(r'"GE" 400 0 "-" "-"'), 'partial') + + def test_access_log_partial_2(self): + self.load('empty') + + self.http(b"""GET /\n""", raw_resp=True, raw=True) + + self.stop() + + self.assertIsNotNone( + self.search_in_log(r'"GET /" 400 \d+ "-" "-"'), 'partial 2') + + def test_access_log_partial_3(self): + self.load('empty') + + self.http(b"""GET / HTTP/1.1""", raw_resp=True, raw=True) + + self.stop() + + self.assertIsNotNone( + self.search_in_log(r'"GET /" 400 0 "-" "-"'), 'partial 3') + + def test_access_log_partial_4(self): + self.load('empty') + + resp = self.http(b"""GET / HTTP/1.1\n""", raw_resp=True, raw=True) + + self.stop() + + self.assertIsNotNone( + self.search_in_log(r'"GET / HTTP/1.1" 400 0 "-" "-"'), + 'partial 4') + + def test_access_log_partial_5(self): + self.load('empty') + + self.http(b"""GET / HTTP/1.1\n\n""", raw_resp=True, raw=True) + + self.stop() + + self.assertIsNotNone( + self.search_in_log(r'"GET / HTTP/1.1" 200 0 "-" "-"'), 'partial 5') + + def test_access_log_get_parameters(self): + self.load('empty') + + self.get(url='/?blah&var=val') + + self.stop() + + self.assertIsNotNone( + self.search_in_log( + r'"GET /\?blah&var=val HTTP/1.1" 200 0 "-" "-"'), + 'get parameters') + + def test_access_log_delete(self): + self.load('empty') + + self.conf_delete('/access_log') + + self.get(url='/delete') + + self.stop() + + self.assertIsNone(self.search_in_log(r'/delete'), 'delete') + + def test_access_log_change(self): + self.load('empty') + + self.get() + + self.conf('"' + self.testdir + '/new.log"', '/access_log') + + self.get() + + self.stop() + + self.assertIsNotNone( + self.search_in_log(r'"GET / HTTP/1.1" 200 0 "-" "-"', 'new.log'), + 'change') + +if __name__ == '__main__': + unittest.main() |