summaryrefslogtreecommitdiffhomepage
path: root/test/test_python_application.py
diff options
context:
space:
mode:
authorAndrei Belov <defan@nginx.com>2021-02-04 18:40:45 +0300
committerAndrei Belov <defan@nginx.com>2021-02-04 18:40:45 +0300
commit0997fa324ca523ab282f595ac9f44b3e4daff86a (patch)
tree37424fff265780f34f9a9adb7ddd7501a67843f1 /test/test_python_application.py
parent2bc99c614d5547e773bda73364efada47f0a37bf (diff)
parent774a6034d9daf32ac6c98da7e4c0ca9e820536b4 (diff)
downloadunit-0997fa324ca523ab282f595ac9f44b3e4daff86a.tar.gz
unit-0997fa324ca523ab282f595ac9f44b3e4daff86a.tar.bz2
Merged with the default branch.
Diffstat (limited to 'test/test_python_application.py')
-rw-r--r--test/test_python_application.py64
1 files changed, 43 insertions, 21 deletions
diff --git a/test/test_python_application.py b/test/test_python_application.py
index 83b0c8f4..709df3ff 100644
--- a/test/test_python_application.py
+++ b/test/test_python_application.py
@@ -1,14 +1,12 @@
import grp
+import os
import pwd
import re
import time
import pytest
-
-from conftest import option
-from conftest import skip_alert
-from conftest import unit_stop
from unit.applications.lang.python import TestApplicationPython
+from unit.option import option
class TestPythonApplication(TestApplicationPython):
@@ -156,9 +154,7 @@ custom-header: BLAH
assert resp['status'] == 200, 'ctx iter status'
assert resp['body'] == '0123456789', 'ctx iter body'
- self.conf({"listeners": {}, "applications": {}})
-
- unit_stop()
+ assert 'success' in self.conf({"listeners": {}, "applications": {}})
assert (
self.wait_for_record(r'RuntimeError') is not None
@@ -336,9 +332,7 @@ Connection: close
self.get()
- self.conf({"listeners": {}, "applications": {}})
-
- unit_stop()
+ assert 'success' in self.conf({"listeners": {}, "applications": {}})
assert self.wait_for_record(r'At exit called\.') is not None, 'atexit'
@@ -497,8 +491,6 @@ last line: 987654321
self.get()
- unit_stop()
-
assert (
self.wait_for_record(r'\[error\].+Error in application\.')
is not None
@@ -520,13 +512,13 @@ last line: 987654321
assert self.get()['body'] == 'body\n', 'body io file'
@pytest.mark.skip('not yet')
- def test_python_application_syntax_error(self):
+ def test_python_application_syntax_error(self, skip_alert):
skip_alert(r'Python failed to import module "wsgi"')
self.load('syntax_error')
assert self.get()['status'] == 500, 'syntax error'
- def test_python_application_loading_error(self):
+ def test_python_application_loading_error(self, skip_alert):
skip_alert(r'Python failed to import module "blah"')
self.load('empty', module="blah")
@@ -538,8 +530,6 @@ last line: 987654321
self.get()
- unit_stop()
-
assert self.wait_for_record(r'Close called\.') is not None, 'close'
def test_python_application_close_error(self):
@@ -547,8 +537,6 @@ last line: 987654321
self.get()
- unit_stop()
-
assert (
self.wait_for_record(r'Close called\.') is not None
), 'close error'
@@ -558,8 +546,6 @@ last line: 987654321
self.get()
- unit_stop()
-
assert (
self.wait_for_record(
r'\[error\].+the application returned not an iterable object'
@@ -791,7 +777,7 @@ last line: 987654321
assert obj['UID'] == nobody_uid, 'root uid group=root'
assert obj['GID'] == 0, 'root gid group=root'
- def test_python_application_callable(self):
+ def test_python_application_callable(self, skip_alert):
skip_alert(r'Python failed to get "blah" from module')
self.load('callable')
@@ -805,6 +791,42 @@ last line: 987654321
assert self.get()['status'] not in [200, 204], 'callable response inv'
+ def test_python_application_path(self):
+ self.load('path')
+
+ def set_path(path):
+ assert 'success' in self.conf(path, 'applications/path/path')
+
+ def get_path():
+ return self.get()['body'].split(os.pathsep)
+
+ default_path = self.conf_get('/config/applications/path/path')
+ assert 'success' in self.conf(
+ {"PYTHONPATH": default_path},
+ '/config/applications/path/environment',
+ )
+
+ self.conf_delete('/config/applications/path/path')
+ sys_path = get_path()
+
+ set_path('"/blah"')
+ assert ['/blah', *sys_path] == get_path(), 'check path'
+
+ set_path('"/new"')
+ assert ['/new', *sys_path] == get_path(), 'check path update'
+
+ set_path('["/blah1", "/blah2"]')
+ assert ['/blah1', '/blah2', *sys_path] == get_path(), 'check path array'
+
+ def test_python_application_path_invalid(self):
+ self.load('path')
+
+ def check_path(path):
+ assert 'error' in self.conf(path, 'applications/path/path')
+
+ check_path('{}')
+ check_path('["/blah", []]')
+
def test_python_application_threads(self):
self.load('threads', threads=4)