summaryrefslogtreecommitdiffhomepage
path: root/test/test_python_application.py
diff options
context:
space:
mode:
authorAndrei Zeliankou <zelenkov@nginx.com>2023-02-21 15:35:38 +0000
committerAndrei Zeliankou <zelenkov@nginx.com>2023-02-21 15:35:38 +0000
commit1b7cf1f3d00adbbcd17890f1475c2c36f75c3f68 (patch)
treeda580391bd41d32709ce991672f9b36db92114fe /test/test_python_application.py
parent7d7b5a977c4e461976422c59f4594280b05dde0a (diff)
downloadunit-1b7cf1f3d00adbbcd17890f1475c2c36f75c3f68.tar.gz
unit-1b7cf1f3d00adbbcd17890f1475c2c36f75c3f68.tar.bz2
Tests: added Python tests with encoding.
Diffstat (limited to 'test/test_python_application.py')
-rw-r--r--test/test_python_application.py78
1 files changed, 78 insertions, 0 deletions
diff --git a/test/test_python_application.py b/test/test_python_application.py
index c9483b6a..c9065eae 100644
--- a/test/test_python_application.py
+++ b/test/test_python_application.py
@@ -2,9 +2,12 @@ import grp
import os
import pwd
import re
+import subprocess
import time
+import venv
import pytest
+from packaging import version
from unit.applications.lang.python import TestApplicationPython
@@ -526,6 +529,81 @@ last line: 987654321
assert self.get()['body'] == '0123456789', 'write'
+ def test_python_application_encoding(self):
+ self.load('encoding')
+
+ try:
+ locales = (
+ subprocess.check_output(
+ ['locale', '-a'],
+ stderr=subprocess.STDOUT,
+ )
+ .decode()
+ .splitlines()
+ )
+ except (
+ FileNotFoundError,
+ UnicodeDecodeError,
+ subprocess.CalledProcessError,
+ ):
+ pytest.skip('require locale')
+
+ to_check = [
+ re.compile(r'.*UTF[-_]?8'),
+ re.compile(r'.*ISO[-_]?8859[-_]?1'),
+ ]
+ matches = [
+ loc
+ for loc in locales
+ if any(pattern.match(loc.upper()) for pattern in to_check)
+ ]
+
+ if not matches:
+ pytest.skip('no available locales')
+
+ def unify(str):
+ str.upper().replace('-', '').replace('_', '')
+
+ for loc in matches:
+ assert 'success' in self.conf(
+ {"LC_CTYPE": loc, "LC_ALL": ""},
+ '/config/applications/encoding/environment',
+ )
+ resp = self.get()
+ assert resp['status'] == 200, 'status'
+ assert unify(resp['headers']['X-Encoding']) == unify(
+ loc.split('.')[-1]
+ )
+
+ def test_python_application_unicode(self, temp_dir):
+ try:
+ app_type = self.get_application_type()
+ v = version.Version(app_type.split()[-1])
+ if v.major != 3:
+ raise version.InvalidVersion
+
+ except version.InvalidVersion:
+ pytest.skip('require python module version 3')
+
+ venv_path = temp_dir + '/venv'
+ venv.create(venv_path)
+
+ self.load('unicode')
+ assert 'success' in self.conf(
+ '"' + venv_path + '"',
+ '/config/applications/unicode/home',
+ )
+ assert (
+ self.get(
+ headers={
+ 'Host': 'localhost',
+ 'Temp-dir': temp_dir,
+ 'Connection': 'close',
+ }
+ )['status']
+ == 200
+ )
+
def test_python_application_threading(self):
"""wait_for_record() timeouts after 5s while every thread works at
least 3s. So without releasing GIL test should fail.