summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAndrey Zelenkov <zelenkov@nginx.com>2018-07-13 20:15:50 +0300
committerAndrey Zelenkov <zelenkov@nginx.com>2018-07-13 20:15:50 +0300
commitcfe91315eb6a9473db532800d9a18576536c8ee0 (patch)
treeaebd1e0bdafac4b85c994ce2e857874ce18c5613
parent92a7d9f0c6d0a6055115a6d2ec5c198c32639c76 (diff)
downloadunit-cfe91315eb6a9473db532800d9a18576536c8ee0.tar.gz
unit-cfe91315eb6a9473db532800d9a18576536c8ee0.tar.bz2
Tests: HTTP settings.
-rw-r--r--test/test_settings.py116
-rw-r--r--test/unit.py11
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