diff options
-rw-r--r-- | test/conftest.py | 33 | ||||
-rw-r--r-- | test/test_java_isolation_rootfs.py | 3 | ||||
-rw-r--r-- | test/unit/applications/lang/go.py | 16 | ||||
-rw-r--r-- | test/unit/applications/lang/java.py | 8 | ||||
-rw-r--r-- | test/unit/applications/lang/node.py | 13 | ||||
-rw-r--r-- | test/unit/applications/tls.py | 21 | ||||
-rw-r--r-- | test/unit/check/go.py | 29 | ||||
-rw-r--r-- | test/unit/check/node.py | 6 | ||||
-rw-r--r-- | test/unit/check/tls.py | 13 | ||||
-rw-r--r-- | test/unit/main.py | 23 |
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' |