summaryrefslogtreecommitdiff
path: root/run_integration_tests.py
diff options
context:
space:
mode:
authormathieui <mathieui@mathieui.net>2020-12-04 23:02:24 +0100
committermathieui <mathieui@mathieui.net>2020-12-04 23:04:21 +0100
commitd3dc09ce945e9a66d09b179c55176b7f6a4f78ea (patch)
treec8b8b4a2df80fe56e8990bcffe93d74ff1dfb9b5 /run_integration_tests.py
parente6d1badb81f7bacf78f57b83d0f06271f3e99d9a (diff)
downloadslixmpp-d3dc09ce945e9a66d09b179c55176b7f6a4f78ea.tar.gz
slixmpp-d3dc09ce945e9a66d09b179c55176b7f6a4f78ea.tar.bz2
slixmpp-d3dc09ce945e9a66d09b179c55176b7f6a4f78ea.tar.xz
slixmpp-d3dc09ce945e9a66d09b179c55176b7f6a4f78ea.zip
CI: add a script to run integration tests
(same as run_tests.py, but use adifferent directory)
Diffstat (limited to 'run_integration_tests.py')
-rwxr-xr-xrun_integration_tests.py71
1 files changed, 71 insertions, 0 deletions
diff --git a/run_integration_tests.py b/run_integration_tests.py
new file mode 100755
index 00000000..9f670b5c
--- /dev/null
+++ b/run_integration_tests.py
@@ -0,0 +1,71 @@
+#!/usr/bin/env python3
+
+import sys
+import logging
+import unittest
+
+from argparse import ArgumentParser
+from distutils.core import Command
+from importlib import import_module
+from pathlib import Path
+
+
+def run_tests(filenames=None):
+ """
+ Find and run all tests in the tests/ directory.
+
+ Excludes live tests (tests/live_*).
+ """
+ if sys.version_info < (3, 8):
+ raise ValueError('Your python version is too old to run these tests')
+ if not filenames:
+ filenames = [i for i in Path('itests').glob('test_*')]
+ else:
+ filenames = [Path(i) for i in filenames]
+
+ modules = ['.'.join(test.parts[:-1] + (test.stem,)) for test in filenames]
+
+ suites = []
+ for filename in modules:
+ module = import_module(filename)
+ suites.append(module.suite)
+
+ tests = unittest.TestSuite(suites)
+ runner = unittest.TextTestRunner(verbosity=2)
+
+ # Disable logging output
+ logging.basicConfig(level=100)
+ logging.disable(100)
+
+ result = runner.run(tests)
+ return result
+
+
+# Add a 'test' command for setup.py
+
+class TestCommand(Command):
+
+ user_options = []
+
+ def initialize_options(self):
+ pass
+
+ def finalize_options(self):
+ pass
+
+ def run(self):
+ run_tests()
+
+
+if __name__ == '__main__':
+ parser = ArgumentParser(description='Run unit tests.')
+ parser.add_argument('tests', metavar='TEST', nargs='*', help='list of tests to run, or nothing to run them all')
+ args = parser.parse_args()
+
+ result = run_tests(args.tests)
+ print("<tests %s ran='%s' errors='%s' fails='%s' success='%s'/>" % (
+ "xmlns='http//andyet.net/protocol/tests'",
+ result.testsRun, len(result.errors),
+ len(result.failures), result.wasSuccessful()))
+
+ sys.exit(not result.wasSuccessful())