summaryrefslogtreecommitdiffhomepage
path: root/test/unit.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/unit.py')
-rw-r--r--test/unit.py83
1 files changed, 80 insertions, 3 deletions
diff --git a/test/unit.py b/test/unit.py
index a5f96968..e88ed684 100644
--- a/test/unit.py
+++ b/test/unit.py
@@ -7,6 +7,7 @@ import time
import shutil
import socket
import select
+import argparse
import platform
import tempfile
import unittest
@@ -19,6 +20,31 @@ class TestUnit(unittest.TestCase):
architecture = platform.architecture()[0]
maxDiff = None
+ detailed = False
+ save_log = False
+
+ def __init__(self, methodName='runTest'):
+ super().__init__(methodName)
+
+ if re.match(r'.*\/run\.py$', sys.argv[0]):
+ args, rest = TestUnit._parse_args()
+
+ TestUnit._set_args(args)
+
+ @classmethod
+ def main(cls):
+ args, rest = TestUnit._parse_args()
+
+ for i, arg in enumerate(rest):
+ if arg[:5] == 'test_':
+ rest[i] = cls.__name__ + '.' + arg
+
+ sys.argv = sys.argv[:1] + rest
+
+ TestUnit._set_args(args)
+
+ unittest.main()
+
def setUp(self):
self._run()
@@ -49,7 +75,7 @@ class TestUnit(unittest.TestCase):
# remove unit.log
- if '--leave' not in sys.argv and success:
+ if not TestUnit.save_log and success:
shutil.rmtree(self.testdir)
else:
@@ -91,6 +117,12 @@ class TestUnit(unittest.TestCase):
except:
m = None
+ elif module == 'node':
+ if os.path.isdir(self.pardir + '/node/node_modules'):
+ m = module
+ else:
+ m = None
+
elif module == 'openssl':
try:
subprocess.check_output(['which', 'openssl'])
@@ -227,6 +259,22 @@ class TestUnit(unittest.TestCase):
return ret
+ @staticmethod
+ def _parse_args():
+ parser = argparse.ArgumentParser(add_help=False)
+
+ parser.add_argument('-d', '--detailed', dest='detailed',
+ action='store_true', help='Detailed output for tests')
+ parser.add_argument('-l', '--log', dest='save_log',
+ action='store_true', help='Save unit.log after the test execution')
+
+ return parser.parse_known_args()
+
+ @staticmethod
+ def _set_args(args):
+ TestUnit.detailed = args.detailed
+ TestUnit.save_log = args.save_log
+
def _print_path_to_log(self):
print('Path to unit.log:\n' + self.testdir + '/unit.log')
@@ -296,7 +344,7 @@ class TestUnitHTTP(TestUnit):
sock.sendall(req)
- if '--verbose' in sys.argv:
+ if TestUnit.detailed:
print('>>>', req, sep='\n')
resp = ''
@@ -305,7 +353,7 @@ class TestUnitHTTP(TestUnit):
enc = 'utf-8' if 'encoding' not in kwargs else kwargs['encoding']
resp = self.recvall(sock).decode(enc)
- if '--verbose' in sys.argv:
+ if TestUnit.detailed:
print('<<<', resp.encode('utf-8'), sep='\n')
if 'raw_resp' not in kwargs:
@@ -516,6 +564,35 @@ class TestUnitApplicationGo(TestUnitApplicationProto):
}
})
+class TestUnitApplicationNode(TestUnitApplicationProto):
+ def load(self, script, name='app.js'):
+
+ # copy application
+
+ shutil.copytree(self.current_dir + '/node/' + script,
+ self.testdir + '/node')
+
+ # link modules
+
+ os.symlink(self.pardir + '/node/node_modules',
+ self.testdir + '/node/node_modules')
+
+ self.conf({
+ "listeners": {
+ "*:7080": {
+ "application": script
+ }
+ },
+ "applications": {
+ script: {
+ "type": "external",
+ "processes": { "spare": 0 },
+ "working_directory": self.testdir + '/node',
+ "executable": name
+ }
+ }
+ })
+
class TestUnitApplicationPerl(TestUnitApplicationProto):
def load(self, script, name='psgi.pl'):
self.conf({