Tests: added Python tests with encoding.
This commit is contained in:
12
test/python/encoding/wsgi.py
Normal file
12
test/python/encoding/wsgi.py
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
def application(environ, start_response):
|
||||||
|
start_response(
|
||||||
|
'200',
|
||||||
|
[
|
||||||
|
('Content-Length', '0'),
|
||||||
|
('X-Encoding', sys.getfilesystemencoding()),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
return []
|
||||||
8
test/python/unicode/wsgi.py
Normal file
8
test/python/unicode/wsgi.py
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
def application(environ, start_response):
|
||||||
|
temp_dir = environ.get('HTTP_TEMP_DIR')
|
||||||
|
|
||||||
|
with open(temp_dir + '/tempfile', 'w') as f:
|
||||||
|
f.write('\u26a0\ufe0f')
|
||||||
|
|
||||||
|
start_response('200', [('Content-Length', '0')])
|
||||||
|
return []
|
||||||
@@ -2,9 +2,12 @@ import grp
|
|||||||
import os
|
import os
|
||||||
import pwd
|
import pwd
|
||||||
import re
|
import re
|
||||||
|
import subprocess
|
||||||
import time
|
import time
|
||||||
|
import venv
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
from packaging import version
|
||||||
from unit.applications.lang.python import TestApplicationPython
|
from unit.applications.lang.python import TestApplicationPython
|
||||||
|
|
||||||
|
|
||||||
@@ -526,6 +529,81 @@ last line: 987654321
|
|||||||
|
|
||||||
assert self.get()['body'] == '0123456789', 'write'
|
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):
|
def test_python_application_threading(self):
|
||||||
"""wait_for_record() timeouts after 5s while every thread works at
|
"""wait_for_record() timeouts after 5s while every thread works at
|
||||||
least 3s. So without releasing GIL test should fail.
|
least 3s. So without releasing GIL test should fail.
|
||||||
|
|||||||
Reference in New Issue
Block a user