summaryrefslogtreecommitdiffhomepage
path: root/test/unit
diff options
context:
space:
mode:
authorAndrei Zeliankou <zelenkov@nginx.com>2020-10-27 04:09:52 +0000
committerAndrei Zeliankou <zelenkov@nginx.com>2020-10-27 04:09:52 +0000
commit8956e668cc3b4088a7bdd3d82ca99ac1445c8814 (patch)
tree0fa7bfbcfb2cde634ed52594159c5d79f806a98b /test/unit
parent434c3228d9bbdc31ff15be470a814344e5f13a4e (diff)
downloadunit-8956e668cc3b4088a7bdd3d82ca99ac1445c8814.tar.gz
unit-8956e668cc3b4088a7bdd3d82ca99ac1445c8814.tar.bz2
Tests: fixed isolation detection.
Diffstat (limited to '')
-rw-r--r--test/unit/applications/lang/java.py12
-rw-r--r--test/unit/applications/lang/node.py5
-rw-r--r--test/unit/feature/isolation.py122
3 files changed, 112 insertions, 27 deletions
diff --git a/test/unit/applications/lang/java.py b/test/unit/applications/lang/java.py
index a034d9a4..0aa1a7af 100644
--- a/test/unit/applications/lang/java.py
+++ b/test/unit/applications/lang/java.py
@@ -9,7 +9,7 @@ from unit.applications.proto import TestApplicationProto
class TestApplicationJava(TestApplicationProto):
- def load(self, script, name='app', **kwargs):
+ def prepare_env(self, script):
app_path = option.temp_dir + '/java'
web_inf_path = app_path + '/WEB-INF/'
classes_path = web_inf_path + 'classes/'
@@ -75,6 +75,9 @@ class TestApplicationJava(TestApplicationProto):
except:
pytest.fail('Cann\'t run javac process.')
+ def load(self, script, **kwargs):
+ self.prepare_env(script)
+
self._load_conf(
{
"listeners": {"*:7080": {"pass": "applications/" + script}},
@@ -83,8 +86,11 @@ class TestApplicationJava(TestApplicationProto):
"unit_jars": option.current_dir + '/build',
"type": 'java',
"processes": {"spare": 0},
- "working_directory": script_path,
- "webapp": app_path,
+ "working_directory": option.test_dir
+ + '/java/'
+ + script
+ + '/',
+ "webapp": option.temp_dir + '/java',
}
},
},
diff --git a/test/unit/applications/lang/node.py b/test/unit/applications/lang/node.py
index 4aa9eb1c..98fd9ffc 100644
--- a/test/unit/applications/lang/node.py
+++ b/test/unit/applications/lang/node.py
@@ -7,7 +7,7 @@ from unit.applications.proto import TestApplicationProto
class TestApplicationNode(TestApplicationProto):
- def load(self, script, name='app.js', **kwargs):
+ def prepare_env(self, script):
# copy application
shutil.copytree(
@@ -23,6 +23,9 @@ class TestApplicationNode(TestApplicationProto):
public_dir(option.temp_dir + '/node')
+ def load(self, script, name='app.js', **kwargs):
+ self.prepare_env(script)
+
self._load_conf(
{
"listeners": {
diff --git a/test/unit/feature/isolation.py b/test/unit/feature/isolation.py
index 235177ab..7877c03a 100644
--- a/test/unit/feature/isolation.py
+++ b/test/unit/feature/isolation.py
@@ -3,11 +3,8 @@ import os
from unit.applications.lang.go import TestApplicationGo
from unit.applications.lang.java import TestApplicationJava
from unit.applications.lang.node import TestApplicationNode
-from unit.applications.lang.perl import TestApplicationPerl
-from unit.applications.lang.php import TestApplicationPHP
-from unit.applications.lang.python import TestApplicationPython
-from unit.applications.lang.ruby import TestApplicationRuby
from unit.applications.proto import TestApplicationProto
+from conftest import option
class TestFeatureIsolation(TestApplicationProto):
@@ -16,40 +13,119 @@ class TestFeatureIsolation(TestApplicationProto):
def check(self, available, temp_dir):
test_conf = {"namespaces": {"credential": True}}
- module = ''
- app = 'empty'
+ conf = ''
if 'go' in available['modules']:
- module = TestApplicationGo()
+ TestApplicationGo().prepare_env('empty', 'app')
+
+ conf = {
+ "listeners": {"*:7080": {"pass": "applications/empty"}},
+ "applications": {
+ "empty": {
+ "type": "external",
+ "processes": {"spare": 0},
+ "working_directory": option.test_dir + "/go/empty",
+ "executable": option.temp_dir + "/go/app",
+ "isolation": {"namespaces": {"credential": True}},
+ },
+ },
+ }
elif 'python' in available['modules']:
- module = TestApplicationPython()
+ conf = {
+ "listeners": {"*:7080": {"pass": "applications/empty"}},
+ "applications": {
+ "empty": {
+ "type": "python",
+ "processes": {"spare": 0},
+ "path": option.test_dir + "/python/empty",
+ "working_directory": option.test_dir + "/python/empty",
+ "module": "wsgi",
+ "isolation": {"namespaces": {"credential": True}},
+ }
+ },
+ }
elif 'php' in available['modules']:
- module = TestApplicationPHP()
- app = 'phpinfo'
+ conf = {
+ "listeners": {"*:7080": {"pass": "applications/phpinfo"}},
+ "applications": {
+ "phpinfo": {
+ "type": "php",
+ "processes": {"spare": 0},
+ "root": option.test_dir + "/php/phpinfo",
+ "working_directory": option.test_dir + "/php/phpinfo",
+ "index": "index.php",
+ "isolation": {"namespaces": {"credential": True}},
+ }
+ },
+ }
elif 'ruby' in available['modules']:
- module = TestApplicationRuby()
+ conf = {
+ "listeners": {"*:7080": {"pass": "applications/empty"}},
+ "applications": {
+ "empty": {
+ "type": "ruby",
+ "processes": {"spare": 0},
+ "working_directory": option.test_dir + "/ruby/empty",
+ "script": option.test_dir + "/ruby/empty/config.ru",
+ "isolation": {"namespaces": {"credential": True}},
+ }
+ },
+ }
elif 'java' in available['modules']:
- module = TestApplicationJava()
+ TestApplicationJava().prepare_env('empty')
+
+ conf = {
+ "listeners": {"*:7080": {"pass": "applications/empty"}},
+ "applications": {
+ "empty": {
+ "unit_jars": option.current_dir + "/build",
+ "type": "java",
+ "processes": {"spare": 0},
+ "working_directory": option.test_dir + "/java/empty/",
+ "webapp": option.temp_dir + "/java",
+ "isolation": {"namespaces": {"credential": True}},
+ }
+ },
+ }
elif 'node' in available['modules']:
- module = TestApplicationNode()
- app = 'basic'
+ TestApplicationNode().prepare_env('basic')
+
+ conf = {
+ "listeners": {"*:7080": {"pass": "applications/basic"}},
+ "applications": {
+ "basic": {
+ "type": "external",
+ "processes": {"spare": 0},
+ "working_directory": option.temp_dir + "/node",
+ "executable": "app.js",
+ "isolation": {"namespaces": {"credential": True}},
+ }
+ },
+ }
elif 'perl' in available['modules']:
- module = TestApplicationPerl()
- app = 'body_empty'
-
- if not module:
+ conf = {
+ "listeners": {"*:7080": {"pass": "applications/body_empty"}},
+ "applications": {
+ "body_empty": {
+ "type": "perl",
+ "processes": {"spare": 0},
+ "working_directory": option.test_dir
+ + "/perl/body_empty",
+ "script": option.test_dir + "/perl/body_empty/psgi.pl",
+ "isolation": {"namespaces": {"credential": True}},
+ }
+ },
+ }
+
+ else:
return
- module.temp_dir = temp_dir
- module.load(app)
-
- resp = module.conf(test_conf, 'applications/' + app + '/isolation')
- if 'success' not in resp:
+ if 'success' not in self.conf(conf):
return
userns = self.getns('user')