diff options
author | Andrey Zelenkov <zelenkov@nginx.com> | 2018-07-13 20:15:50 +0300 |
---|---|---|
committer | Andrey Zelenkov <zelenkov@nginx.com> | 2018-07-13 20:15:50 +0300 |
commit | cfe91315eb6a9473db532800d9a18576536c8ee0 (patch) | |
tree | aebd1e0bdafac4b85c994ce2e857874ce18c5613 | |
parent | 92a7d9f0c6d0a6055115a6d2ec5c198c32639c76 (diff) | |
download | unit-cfe91315eb6a9473db532800d9a18576536c8ee0.tar.gz unit-cfe91315eb6a9473db532800d9a18576536c8ee0.tar.bz2 |
Tests: HTTP settings.
-rw-r--r-- | test/test_settings.py | 116 | ||||
-rw-r--r-- | test/unit.py | 11 |
2 files changed, 124 insertions, 3 deletions
diff --git a/test/test_settings.py b/test/test_settings.py new file mode 100644 index 00000000..8a4d0892 --- /dev/null +++ b/test/test_settings.py @@ -0,0 +1,116 @@ +import time +import socket +import unittest +import unit + +class TestUnitSettings(unit.TestUnitApplicationPython): + + def setUpClass(): + unit.TestUnit().check_modules('python') + + def test_settings_header_read_timeout(self): + self.load('empty') + + self.conf({'http': { 'header_read_timeout': 2 }}, '/settings') + + (resp, sock) = self.http(b"""GET / HTTP/1.1 +""", start=True, raw=True) + + time.sleep(3) + + resp = self.http(b"""Host: localhost +Connection: close + +""", sock=sock, raw=True) + + self.assertEqual(resp['status'], 408, 'status header read timeout') + + def test_settings_body_read_timeout(self): + self.load('empty') + + self.conf({'http': { 'body_read_timeout': 2 }}, '/settings') + + (resp, sock) = self.http(b"""POST / HTTP/1.1 +Host: localhost +Content-Length: 10 +Connection: close + +""", start=True, raw_resp=True, raw=True) + + time.sleep(3) + + resp = self.http(b"""0123456789""", sock=sock, raw=True) + + self.assertEqual(resp['status'], 408, 'status body read timeout') + + def test_settings_send_timeout(self): + self.load('mirror') + + data_len = 1048576 + + self.conf({'http': { 'send_timeout': 1 }}, '/settings') + + addr = self.testdir + '/sock' + + self.conf({"unix:" + addr: {'application': 'mirror'}}, '/listeners') + + sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + sock.connect(addr) + + req = """POST / HTTP/1.1 +Host: localhost +Content-Type: text/html +Content-Length: %d + +""" % data_len + ('X' * data_len) + + sock.sendall(req.encode()) + + data = sock.recv(16).decode() + + time.sleep(3) + + data += self.recvall(sock) + + sock.close() + + self.assertRegex(data, r'200 OK', 'status send timeout') + self.assertLess(len(data), data_len, 'data send timeout') + + + def test_settings_idle_timeout(self): + self.load('empty') + + self.conf({'http': { 'idle_timeout': 2 }}, '/settings') + + (resp, sock) = self.get(headers={ + 'Connection': 'keep-alive', + 'Host': 'localhost' + }, start=True) + + time.sleep(3) + + resp = self.get(headers={ + 'Connection': 'close', + 'Host': 'localhost' + }, sock=sock) + + self.assertEqual(resp, {}, 'idle timeout') + + def test_settings_max_body_size(self): + self.load('empty') + + self.conf({'http': { 'max_body_size': 5 }}, '/settings') + + self.assertEqual(self.post(body='01234')['status'], 200, 'status size') + self.assertEqual(self.post(body='012345')['status'], 413, + 'status size max') + + @unittest.expectedFailure + def test_settings_negative_value(self): + self.assertIn('error', self.conf({'http': { 'max_body_size': -1 }}, + '/settings'), 'settings negative value') + + +if __name__ == '__main__': + unittest.main() diff --git a/test/unit.py b/test/unit.py index f9716366..c8820280 100644 --- a/test/unit.py +++ b/test/unit.py @@ -250,7 +250,7 @@ class TestUnitHTTP(TestUnit): if '--verbose' in sys.argv: print('>>>', req, sep='\n') - resp = self._recvall(sock) + resp = self.recvall(sock) if '--verbose' in sys.argv: print('<<<', resp.encode('utf-8'), sep='\n') @@ -276,11 +276,16 @@ class TestUnitHTTP(TestUnit): def put(self, **kwargs): return self.http('PUT', **kwargs) - def _recvall(self, sock, buff_size=4096): + def recvall(self, sock, buff_size=4096): data = b'' while select.select([sock], [], [], 1)[0]: - part = sock.recv(buff_size) + try: + part = sock.recv(buff_size) + except: + break + data += part + if not len(part): break |