summaryrefslogtreecommitdiffhomepage
path: root/test/test_python_application.py
diff options
context:
space:
mode:
authorAndrei Zeliankou <zelenkov@nginx.com>2023-05-29 16:45:49 +0100
committerAndrei Zeliankou <zelenkov@nginx.com>2023-05-29 16:45:49 +0100
commit31ff94add9c4043a753683d9e8b68733c69aa1ac (patch)
tree1737c36a2641129a4de775c6058cc07b9cdca0f6 /test/test_python_application.py
parentf55818059c01ff9e61bee8107ed1389fe272a787 (diff)
downloadunit-31ff94add9c4043a753683d9e8b68733c69aa1ac.tar.gz
unit-31ff94add9c4043a753683d9e8b68733c69aa1ac.tar.bz2
Tests: more fixtures.
Common methods from applications/proto.py converted to the fixtures. sysctl check moved to the specific file where it is using. Some options moved to the constructor to have early access.
Diffstat (limited to 'test/test_python_application.py')
-rw-r--r--test/test_python_application.py71
1 files changed, 30 insertions, 41 deletions
diff --git a/test/test_python_application.py b/test/test_python_application.py
index 7b8959e8..f67dc24f 100644
--- a/test/test_python_application.py
+++ b/test/test_python_application.py
@@ -14,7 +14,7 @@ from unit.applications.lang.python import TestApplicationPython
class TestPythonApplication(TestApplicationPython):
prerequisites = {'modules': {'python': 'all'}}
- def test_python_application_variables(self):
+ def test_python_application_variables(self, date_to_sec_epoch, sec_epoch):
self.load('variables')
body = 'Test body string.'
@@ -43,9 +43,7 @@ custom-header: BLAH
date = headers.pop('Date')
assert date[-4:] == ' GMT', 'date header timezone'
- assert (
- abs(self.date_to_sec_epoch(date) - self.sec_epoch()) < 5
- ), 'date header'
+ assert abs(date_to_sec_epoch(date) - sec_epoch) < 5, 'date header'
assert headers == {
'Connection': 'close',
@@ -175,7 +173,7 @@ custom-header: BLAH
'Transfer-Encoding' not in self.get()['headers']
), '204 header transfer encoding'
- def test_python_application_ctx_iter_atexit(self):
+ def test_python_application_ctx_iter_atexit(self, wait_for_record):
self.load('ctx_iter_atexit')
resp = self.post(body='0123456789')
@@ -185,9 +183,7 @@ custom-header: BLAH
assert 'success' in self.conf({"listeners": {}, "applications": {}})
- assert (
- self.wait_for_record(r'RuntimeError') is not None
- ), 'ctx iter atexit'
+ assert wait_for_record(r'RuntimeError') is not None, 'ctx iter atexit'
def test_python_keepalive_body(self):
self.load('mirror')
@@ -297,14 +293,14 @@ custom-header: BLAH
assert resp == {}, 'reconfigure 2 keep-alive 3'
- def test_python_atexit(self):
+ def test_python_atexit(self, wait_for_record):
self.load('atexit')
self.get()
assert 'success' in self.conf({"listeners": {}, "applications": {}})
- assert self.wait_for_record(r'At exit called\.') is not None, 'atexit'
+ assert wait_for_record(r'At exit called\.') is not None, 'atexit'
def test_python_process_switch(self):
self.load('delayed', processes=2)
@@ -456,14 +452,13 @@ last line: 987654321
assert resp['body'] == body, 'input read length negative'
@pytest.mark.skip('not yet')
- def test_python_application_errors_write(self):
+ def test_python_application_errors_write(self, wait_for_record):
self.load('errors_write')
self.get()
assert (
- self.wait_for_record(r'\[error\].+Error in application\.')
- is not None
+ wait_for_record(r'\[error\].+Error in application\.') is not None
), 'errors write'
def test_python_application_body_array(self):
@@ -495,29 +490,27 @@ last line: 987654321
assert self.get()['status'] == 503, 'loading error'
- def test_python_application_close(self):
+ def test_python_application_close(self, wait_for_record):
self.load('close')
self.get()
- assert self.wait_for_record(r'Close called\.') is not None, 'close'
+ assert wait_for_record(r'Close called\.') is not None, 'close'
- def test_python_application_close_error(self):
+ def test_python_application_close_error(self, wait_for_record):
self.load('close_error')
self.get()
- assert (
- self.wait_for_record(r'Close called\.') is not None
- ), 'close error'
+ assert wait_for_record(r'Close called\.') is not None, 'close error'
- def test_python_application_not_iterable(self):
+ def test_python_application_not_iterable(self, wait_for_record):
self.load('not_iterable')
self.get()
assert (
- self.wait_for_record(
+ wait_for_record(
r'\[error\].+the application returned not an iterable object'
)
is not None
@@ -603,7 +596,7 @@ last line: 987654321
== 200
)
- def test_python_application_threading(self):
+ def test_python_application_threading(self, wait_for_record):
"""wait_for_record() timeouts after 5s while every thread works at
least 3s. So without releasing GIL test should fail.
"""
@@ -614,10 +607,10 @@ last line: 987654321
self.get(no_recv=True)
assert (
- self.wait_for_record(r'\(5\) Thread: 100', wait=50) is not None
+ wait_for_record(r'\(5\) Thread: 100', wait=50) is not None
), 'last thread finished'
- def test_python_application_iter_exception(self):
+ def test_python_application_iter_exception(self, findall, wait_for_record):
self.load('iter_exception')
# Default request doesn't lead to the exception.
@@ -637,12 +630,11 @@ last line: 987654321
assert self.get()['status'] == 503, 'error'
- assert self.wait_for_record(r'Traceback') is not None, 'traceback'
+ assert wait_for_record(r'Traceback') is not None, 'traceback'
assert (
- self.wait_for_record(r"raise Exception\('first exception'\)")
- is not None
+ wait_for_record(r"raise Exception\('first exception'\)") is not None
), 'first exception raise'
- assert len(self.findall(r'Traceback')) == 1, 'traceback count 1'
+ assert len(findall(r'Traceback')) == 1, 'traceback count 1'
# Exception after start_response(), before first write().
@@ -658,10 +650,10 @@ last line: 987654321
), 'error 2'
assert (
- self.wait_for_record(r"raise Exception\('second exception'\)")
+ wait_for_record(r"raise Exception\('second exception'\)")
is not None
), 'exception raise second'
- assert len(self.findall(r'Traceback')) == 2, 'traceback count 2'
+ assert len(findall(r'Traceback')) == 2, 'traceback count 2'
# Exception after first write(), before first __next__().
@@ -675,10 +667,9 @@ last line: 987654321
)
assert (
- self.wait_for_record(r"raise Exception\('third exception'\)")
- is not None
+ wait_for_record(r"raise Exception\('third exception'\)") is not None
), 'exception raise third'
- assert len(self.findall(r'Traceback')) == 3, 'traceback count 3'
+ assert len(findall(r'Traceback')) == 3, 'traceback count 3'
assert self.get(sock=sock) == {}, 'closed connection'
@@ -696,7 +687,7 @@ last line: 987654321
)
if resp:
assert resp[-5:] != '0\r\n\r\n', 'incomplete body'
- assert len(self.findall(r'Traceback')) == 4, 'traceback count 4'
+ assert len(findall(r'Traceback')) == 4, 'traceback count 4'
# Exception in __next__().
@@ -710,10 +701,9 @@ last line: 987654321
)
assert (
- self.wait_for_record(r"raise Exception\('next exception'\)")
- is not None
+ wait_for_record(r"raise Exception\('next exception'\)") is not None
), 'exception raise next'
- assert len(self.findall(r'Traceback')) == 5, 'traceback count 5'
+ assert len(findall(r'Traceback')) == 5, 'traceback count 5'
assert self.get(sock=sock) == {}, 'closed connection 2'
@@ -730,7 +720,7 @@ last line: 987654321
)
if resp:
assert resp[-5:] != '0\r\n\r\n', 'incomplete body 2'
- assert len(self.findall(r'Traceback')) == 6, 'traceback count 6'
+ assert len(findall(r'Traceback')) == 6, 'traceback count 6'
# Exception before start_response() and in close().
@@ -746,10 +736,9 @@ last line: 987654321
), 'error'
assert (
- self.wait_for_record(r"raise Exception\('close exception'\)")
- is not None
+ wait_for_record(r"raise Exception\('close exception'\)") is not None
), 'exception raise close'
- assert len(self.findall(r'Traceback')) == 8, 'traceback count 8'
+ assert len(findall(r'Traceback')) == 8, 'traceback count 8'
def test_python_user_group(self, is_su):
if not is_su: