Tests: test_settings_send_timeout improved.
Data length adjusts depending on socket buffer size when it's possible.
This commit is contained in:
6
test/python/body_generate/wsgi.py
Normal file
6
test/python/body_generate/wsgi.py
Normal file
@@ -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]
|
||||||
@@ -5,6 +5,7 @@ import time
|
|||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from unit.applications.lang.python import TestApplicationPython
|
from unit.applications.lang.python import TestApplicationPython
|
||||||
|
from unit.utils import sysctl
|
||||||
|
|
||||||
|
|
||||||
class TestSettings(TestApplicationPython):
|
class TestSettings(TestApplicationPython):
|
||||||
@@ -147,27 +148,35 @@ Connection: close
|
|||||||
assert resp['status'] == 200, 'status body read timeout update'
|
assert resp['status'] == 200, 'status body read timeout update'
|
||||||
|
|
||||||
def test_settings_send_timeout(self, temp_dir):
|
def test_settings_send_timeout(self, temp_dir):
|
||||||
self.load('mirror')
|
self.load('body_generate')
|
||||||
|
|
||||||
data_len = 1048576
|
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 if len(values) == 0 else 10 * max(values)
|
||||||
|
|
||||||
self.conf({'http': {'send_timeout': 1}}, 'settings')
|
self.conf({'http': {'send_timeout': 1}}, 'settings')
|
||||||
|
|
||||||
addr = temp_dir + '/sock'
|
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 = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
||||||
sock.connect(addr)
|
sock.connect(addr)
|
||||||
|
|
||||||
req = """POST / HTTP/1.1
|
req = (
|
||||||
|
"""GET / HTTP/1.1
|
||||||
Host: localhost
|
Host: localhost
|
||||||
Content-Type: text/html
|
X-Length: %d
|
||||||
Content-Length: %d
|
|
||||||
Connection: close
|
Connection: close
|
||||||
|
|
||||||
""" % data_len + (
|
"""
|
||||||
'X' * data_len
|
% data_len
|
||||||
)
|
)
|
||||||
|
|
||||||
sock.sendall(req.encode())
|
sock.sendall(req.encode())
|
||||||
|
|||||||
@@ -61,6 +61,17 @@ def findmnt():
|
|||||||
return out
|
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):
|
def waitformount(template, wait=50):
|
||||||
for i in range(wait):
|
for i in range(wait):
|
||||||
if findmnt().find(template) != -1:
|
if findmnt().find(template) != -1:
|
||||||
|
|||||||
Reference in New Issue
Block a user