From d3dc09ce945e9a66d09b179c55176b7f6a4f78ea Mon Sep 17 00:00:00 2001 From: mathieui Date: Fri, 4 Dec 2020 23:02:24 +0100 Subject: [PATCH] CI: add a script to run integration tests (same as run_tests.py, but use adifferent directory) --- run_integration_tests.py | 71 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100755 run_integration_tests.py 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("" % ( + "xmlns='http//andyet.net/protocol/tests'", + result.testsRun, len(result.errors), + len(result.failures), result.wasSuccessful())) + + sys.exit(not result.wasSuccessful())