summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAndrei Zeliankou <zelenkov@nginx.com>2021-05-24 05:26:15 +0100
committerAndrei Zeliankou <zelenkov@nginx.com>2021-05-24 05:26:15 +0100
commit1154ede862824331d24591c717c270e779a2b08c (patch)
treeb4706a17be3ec2c1ea4151fdee6b4d4caf68009d
parentc160ea11e4ece4db52731ac8b83dd09ca2d1ef11 (diff)
downloadunit-1154ede862824331d24591c717c270e779a2b08c.tar.gz
unit-1154ede862824331d24591c717c270e779a2b08c.tar.bz2
Tests: test_settings_send_timeout improved.
Data length adjusts depending on socket buffer size when it's possible.
Diffstat (limited to '')
-rw-r--r--test/python/body_generate/wsgi.py6
-rw-r--r--test/test_settings.py25
-rw-r--r--test/unit/utils.py11
3 files changed, 34 insertions, 8 deletions
diff --git a/test/python/body_generate/wsgi.py b/test/python/body_generate/wsgi.py
new file mode 100644
index 00000000..73462be6
--- /dev/null
+++ b/test/python/body_generate/wsgi.py
@@ -0,0 +1,6 @@
+def application(env, start_response):
+ length = env.get('HTTP_X_LENGTH', '10')
+ bytes = b'X' * int(length)
+
+ start_response('200', [('Content-Length', length)])
+ return [bytes]
diff --git a/test/test_settings.py b/test/test_settings.py
index d129dec9..ef4136e3 100644
--- a/test/test_settings.py
+++ b/test/test_settings.py
@@ -5,6 +5,7 @@ import time
import pytest
from unit.applications.lang.python import TestApplicationPython
+from unit.utils import sysctl
class TestSettings(TestApplicationPython):
@@ -147,27 +148,35 @@ Connection: close
assert resp['status'] == 200, 'status body read timeout update'
def test_settings_send_timeout(self, temp_dir):
- self.load('mirror')
+ self.load('body_generate')
+
+ sysctl_out = sysctl()
+ values = re.findall(
+ r'net.core.[rw]mem_(?:max|default).*?(\d+)', sysctl_out
+ )
+ values = [int(v) for v in values]
- data_len = 1048576
+ data_len = 1048576 if len(values) == 0 else 10 * max(values)
self.conf({'http': {'send_timeout': 1}}, 'settings')
addr = temp_dir + '/sock'
- self.conf({"unix:" + addr: {'application': 'mirror'}}, 'listeners')
+ self.conf(
+ {"unix:" + addr: {'application': 'body_generate'}}, 'listeners'
+ )
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
sock.connect(addr)
- req = """POST / HTTP/1.1
+ req = (
+ """GET / HTTP/1.1
Host: localhost
-Content-Type: text/html
-Content-Length: %d
+X-Length: %d
Connection: close
-""" % data_len + (
- 'X' * data_len
+"""
+ % data_len
)
sock.sendall(req.encode())
diff --git a/test/unit/utils.py b/test/unit/utils.py
index e80fc469..a627e9f5 100644
--- a/test/unit/utils.py
+++ b/test/unit/utils.py
@@ -61,6 +61,17 @@ def findmnt():
return out
+def sysctl():
+ try:
+ out = subprocess.check_output(
+ ['sysctl', '-a'], stderr=subprocess.STDOUT
+ ).decode()
+ except FileNotFoundError:
+ pytest.skip('requires sysctl')
+
+ return out
+
+
def waitformount(template, wait=50):
for i in range(wait):
if findmnt().find(template) != -1: