summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--test/conftest.py33
-rw-r--r--test/test_java_isolation_rootfs.py3
-rw-r--r--test/unit/applications/lang/go.py16
-rw-r--r--test/unit/applications/lang/java.py8
-rw-r--r--test/unit/applications/lang/node.py13
-rw-r--r--test/unit/applications/tls.py21
-rw-r--r--test/unit/check/go.py29
-rw-r--r--test/unit/check/node.py6
-rw-r--r--test/unit/check/tls.py13
-rw-r--r--test/unit/main.py23
10 files changed, 89 insertions, 76 deletions
diff --git a/test/conftest.py b/test/conftest.py
index 6bc871e2..8e9009b6 100644
--- a/test/conftest.py
+++ b/test/conftest.py
@@ -2,6 +2,7 @@ import fcntl
import os
import platform
import pytest
+import shutil
import signal
import stat
import subprocess
@@ -10,6 +11,10 @@ import re
import tempfile
import time
+from unit.check.go import check_go
+from unit.check.node import check_node
+from unit.check.tls import check_openssl
+
def pytest_addoption(parser):
parser.addoption(
@@ -132,6 +137,20 @@ def pytest_sessionstart(session):
else:
option.available['modules'][module[0]].append(module[1])
+ # discover modules from check
+
+ option.available['modules']['openssl'] = check_openssl(unit['unitd'])
+ option.available['modules']['go'] = check_go(
+ option.current_dir, unit['temp_dir'], option.test_dir
+ )
+ option.available['modules']['node'] = check_node(option.current_dir)
+
+ # remove None values
+
+ option.available['modules'] = {
+ k: v for k, v in option.available['modules'].items() if v is not None
+ }
+
unit_stop()
@@ -216,6 +235,7 @@ def unit_stop():
p.kill()
return 'Could not terminate unit'
+ shutil.rmtree(unit_instance['temp_dir'])
def public_dir(path):
os.chmod(path, 0o777)
@@ -265,31 +285,32 @@ def _check_alerts(log):
alerts = [al for al in alerts if re.search(skip, al) is None]
if alerts:
- _print_log(log)
+ _print_log(data=log)
assert not alerts, 'alert(s)'
if not option.skip_sanitizer:
sanitizer_errors = re.findall('.+Sanitizer.+', log)
if sanitizer_errors:
- _print_log(log)
+ _print_log(data=log)
assert not sanitizer_errors, 'sanitizer error(s)'
if found:
print('skipped.')
-def _print_log(data=None):
- unit_log = unit_instance['log']
+def _print_log(path=None, data=None):
+ if path is None:
+ path = unit_instance['log']
- print('Path to unit.log:\n' + unit_log + '\n')
+ print('Path to unit.log:\n' + path + '\n')
if option.print_log:
os.set_blocking(sys.stdout.fileno(), True)
sys.stdout.flush()
if data is None:
- with open(unit_log, 'r', encoding='utf-8', errors='ignore') as f:
+ with open(path, 'r', encoding='utf-8', errors='ignore') as f:
shutil.copyfileobj(f, sys.stdout)
else:
sys.stdout.write(data)
diff --git a/test/test_java_isolation_rootfs.py b/test/test_java_isolation_rootfs.py
index fa227469..df3ccdfa 100644
--- a/test/test_java_isolation_rootfs.py
+++ b/test/test_java_isolation_rootfs.py
@@ -3,6 +3,7 @@ import subprocess
import pytest
from unit.applications.lang.java import TestApplicationJava
+from conftest import option
class TestJavaIsolationRootfs(TestApplicationJava):
@@ -23,7 +24,7 @@ class TestJavaIsolationRootfs(TestApplicationJava):
[
"mount",
"--bind",
- self.pardir + "/build",
+ option.current_dir + "/build",
self.temp_dir + "/jars",
],
stderr=subprocess.STDOUT,
diff --git a/test/unit/applications/lang/go.py b/test/unit/applications/lang/go.py
index 069bdecb..946b5421 100644
--- a/test/unit/applications/lang/go.py
+++ b/test/unit/applications/lang/go.py
@@ -6,26 +6,12 @@ from conftest import option
class TestApplicationGo(TestApplicationProto):
- @classmethod
- def setup_class(cls, complete_check=True):
- unit = super().setup_class(complete_check=False)
-
- # check go module
-
- go_app = TestApplicationGo()
- go_app.temp_dir = unit.temp_dir
- proc = go_app.prepare_env('empty', 'app')
- if proc and proc.returncode == 0:
- cls.available['modules']['go'] = []
-
- return unit if not complete_check else unit.complete()
-
def prepare_env(self, script, name, static=False):
if not os.path.exists(self.temp_dir + '/go'):
os.mkdir(self.temp_dir + '/go')
env = os.environ.copy()
- env['GOPATH'] = self.pardir + '/build/go'
+ env['GOPATH'] = option.current_dir + '/build/go'
if static:
args = [
diff --git a/test/unit/applications/lang/java.py b/test/unit/applications/lang/java.py
index b5511883..93427709 100644
--- a/test/unit/applications/lang/java.py
+++ b/test/unit/applications/lang/java.py
@@ -49,10 +49,12 @@ class TestApplicationJava(TestApplicationProto):
if not os.path.isdir(classes_path):
os.makedirs(classes_path)
- classpath = self.pardir + '/build/tomcat-servlet-api-9.0.13.jar'
+ classpath = (
+ option.current_dir + '/build/tomcat-servlet-api-9.0.13.jar'
+ )
ws_jars = glob.glob(
- self.pardir + '/build/websocket-api-java-*.jar'
+ option.current_dir + '/build/websocket-api-java-*.jar'
)
if not ws_jars:
@@ -78,7 +80,7 @@ class TestApplicationJava(TestApplicationProto):
"listeners": {"*:7080": {"pass": "applications/" + script}},
"applications": {
script: {
- "unit_jars": self.pardir + '/build',
+ "unit_jars": option.current_dir + '/build',
"type": 'java',
"processes": {"spare": 0},
"working_directory": script_path,
diff --git a/test/unit/applications/lang/node.py b/test/unit/applications/lang/node.py
index f510acce..dbb7036b 100644
--- a/test/unit/applications/lang/node.py
+++ b/test/unit/applications/lang/node.py
@@ -7,17 +7,6 @@ from conftest import option, public_dir
class TestApplicationNode(TestApplicationProto):
- @classmethod
- def setup_class(cls, complete_check=True):
- unit = super().setup_class(complete_check=False)
-
- # check node module
-
- if os.path.exists(unit.pardir + '/node/node_modules'):
- cls.available['modules']['node'] = []
-
- return unit if not complete_check else unit.complete()
-
def load(self, script, name='app.js', **kwargs):
# copy application
@@ -28,7 +17,7 @@ class TestApplicationNode(TestApplicationProto):
# copy modules
shutil.copytree(
- self.pardir + '/node/node_modules',
+ option.current_dir + '/node/node_modules',
self.temp_dir + '/node/node_modules',
)
diff --git a/test/unit/applications/tls.py b/test/unit/applications/tls.py
index 5453eef0..7c95f27b 100644
--- a/test/unit/applications/tls.py
+++ b/test/unit/applications/tls.py
@@ -15,27 +15,6 @@ class TestApplicationTLS(TestApplicationProto):
self.context.check_hostname = False
self.context.verify_mode = ssl.CERT_NONE
- @classmethod
- def setup_class(cls, complete_check=True):
- unit = super().setup_class(complete_check=False)
-
- # check tls module
-
- try:
- subprocess.check_output(['which', 'openssl'])
-
- output = subprocess.check_output(
- [unit.unitd, '--version'], stderr=subprocess.STDOUT
- )
-
- if re.search('--openssl', output.decode()):
- cls.available['modules']['openssl'] = []
-
- except:
- pass
-
- return unit if not complete_check else unit.complete()
-
def certificate(self, name='default', load=True):
self.openssl_conf()
diff --git a/test/unit/check/go.py b/test/unit/check/go.py
new file mode 100644
index 00000000..dd2150eb
--- /dev/null
+++ b/test/unit/check/go.py
@@ -0,0 +1,29 @@
+import os
+import subprocess
+
+
+def check_go(current_dir, temp_dir, test_dir):
+ if not os.path.exists(temp_dir + '/go'):
+ os.mkdir(temp_dir + '/go')
+
+ env = os.environ.copy()
+ env['GOPATH'] = current_dir + '/build/go'
+
+ try:
+ process = subprocess.Popen(
+ [
+ 'go',
+ 'build',
+ '-o',
+ temp_dir + '/go/app',
+ test_dir + '/go/empty/app.go',
+ ],
+ env=env,
+ )
+ process.communicate()
+
+ if process.returncode == 0:
+ return True
+
+ except:
+ return None
diff --git a/test/unit/check/node.py b/test/unit/check/node.py
new file mode 100644
index 00000000..236ba7b5
--- /dev/null
+++ b/test/unit/check/node.py
@@ -0,0 +1,6 @@
+import os
+
+
+def check_node(current_dir):
+ if os.path.exists(current_dir + '/node/node_modules'):
+ return True
diff --git a/test/unit/check/tls.py b/test/unit/check/tls.py
new file mode 100644
index 00000000..b878ff7d
--- /dev/null
+++ b/test/unit/check/tls.py
@@ -0,0 +1,13 @@
+import re
+import subprocess
+
+
+def check_openssl(unitd):
+ subprocess.check_output(['which', 'openssl'])
+
+ output = subprocess.check_output(
+ [unitd, '--version'], stderr=subprocess.STDOUT
+ )
+
+ if re.search('--openssl', output.decode()):
+ return True
diff --git a/test/unit/main.py b/test/unit/main.py
index 18ea326e..053ce145 100644
--- a/test/unit/main.py
+++ b/test/unit/main.py
@@ -16,11 +16,6 @@ from multiprocessing import Process
class TestUnit():
-
- pardir = os.path.abspath(
- os.path.join(os.path.dirname(__file__), os.pardir, os.pardir)
- )
-
@classmethod
def setup_class(cls, complete_check=True):
cls.available = option.available
@@ -41,17 +36,9 @@ class TestUnit():
break
if m is None:
- _print_log()
+ _print_log(path=unit.temp_dir + '/unit.log')
exit("Unit is writing log too long")
- # discover available modules from unit.log
-
- for module in re.findall(r'module: ([a-zA-Z]+) (.*) ".*"$', log, re.M):
- if module[0] not in cls.available['modules']:
- cls.available['modules'][module[0]] = [module[1]]
- else:
- cls.available['modules'][module[0]].append(module[1])
-
def check(available, prerequisites):
missed = []
@@ -102,7 +89,7 @@ class TestUnit():
self._run()
def _run(self):
- build_dir = self.pardir + '/build'
+ build_dir = option.current_dir + '/build'
self.unitd = build_dir + '/unitd'
if not os.path.isfile(self.unitd):
@@ -122,7 +109,7 @@ class TestUnit():
[
self.unitd,
'--no-daemon',
- '--modules', self.pardir + '/build',
+ '--modules', build_dir,
'--state', self.temp_dir + '/state',
'--pid', self.temp_dir + '/unit.pid',
'--log', self.temp_dir + '/unit.log',
@@ -135,7 +122,7 @@ class TestUnit():
atexit.register(self.stop)
if not waitforfiles(self.temp_dir + '/control.unit.sock'):
- _print_log()
+ _print_log(path=self.temp_dir + '/unit.log')
exit("Could not start unit")
self._started = True
@@ -155,7 +142,7 @@ class TestUnit():
if not option.save_log:
shutil.rmtree(self.temp_dir)
else:
- _print_log()
+ _print_log(path=self.temp_dir)
assert self.stop_errors == [None, None], 'stop errors'