summaryrefslogtreecommitdiff
path: root/tests/cloud_tests/__main__.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/cloud_tests/__main__.py')
-rw-r--r--tests/cloud_tests/__main__.py93
1 files changed, 93 insertions, 0 deletions
diff --git a/tests/cloud_tests/__main__.py b/tests/cloud_tests/__main__.py
new file mode 100644
index 00000000..ef7d1878
--- /dev/null
+++ b/tests/cloud_tests/__main__.py
@@ -0,0 +1,93 @@
+# This file is part of cloud-init. See LICENSE file for license information.
+
+import argparse
+import logging
+import shutil
+import sys
+import tempfile
+
+from tests.cloud_tests import (args, collect, manage, verify)
+from tests.cloud_tests import LOG
+
+
+def configure_log(args):
+ """
+ configure logging
+ """
+ level = logging.INFO
+ if args.verbose:
+ level = logging.DEBUG
+ elif args.quiet:
+ level = logging.WARN
+ LOG.setLevel(level)
+
+
+def run(args):
+ """
+ run full test suite
+ """
+ failed = 0
+ args.data_dir = tempfile.mkdtemp(prefix='cloud_test_data_')
+ LOG.debug('using tmpdir %s', args.data_dir)
+ try:
+ failed += collect.collect(args)
+ failed += verify.verify(args)
+ except Exception:
+ failed += 1
+ raise
+ finally:
+ # TODO: make this configurable via environ or cmdline
+ if failed:
+ LOG.warn('some tests failed, leaving data in %s', args.data_dir)
+ else:
+ shutil.rmtree(args.data_dir)
+ return failed
+
+
+def main():
+ """
+ entry point for cloud test suite
+ """
+ # configure parser
+ parser = argparse.ArgumentParser(prog='cloud_tests')
+ subparsers = parser.add_subparsers(dest="subcmd")
+ subparsers.required = True
+
+ def add_subparser(name, description, arg_sets):
+ """
+ add arguments to subparser
+ """
+ subparser = subparsers.add_parser(name, help=description)
+ for (_args, _kwargs) in (a for arg_set in arg_sets for a in arg_set):
+ subparser.add_argument(*_args, **_kwargs)
+
+ # configure subparsers
+ for (name, (description, arg_sets)) in args.SUBCMDS.items():
+ add_subparser(name, description,
+ [args.ARG_SETS[arg_set] for arg_set in arg_sets])
+
+ # parse arguments
+ parsed = parser.parse_args()
+
+ # process arguments
+ configure_log(parsed)
+ (_, arg_sets) = args.SUBCMDS[parsed.subcmd]
+ for normalizer in [args.NORMALIZERS[arg_set] for arg_set in arg_sets]:
+ parsed = normalizer(parsed)
+ if not parsed:
+ return -1
+
+ # run handler
+ LOG.debug('running with args: %s\n', parsed)
+ return {
+ 'collect': collect.collect,
+ 'create': manage.create,
+ 'run': run,
+ 'verify': verify.verify,
+ }[parsed.subcmd](parsed)
+
+
+if __name__ == "__main__":
+ sys.exit(main())
+
+# vi: ts=4 expandtab