import os import sys import argparse import logging from src.testopiastrategyloader import TestopiaStrategyLoader from src.lib.testopiaconfigparser import TestopiaConfigParser ACTIONS = ('closing_qa', 'setup_qa', 'execution_qa') def _get_args(): parser = argparse.ArgumentParser(description="Update testopia script.") parser.add_argument('--config', dest="config", required=False, help='Configuration file.') parser.add_argument('-a', '--action', required=False, dest='action', choices=ACTIONS, help='Action to be selected from the list (closing_qa, setup_qa or execution_qa). ' 'Compulsory arguments for closing_qa: -a -st -dt -spv -dpv. ' 'Compulsory arguments for setup_qa: -a -st -spv -dpv. ' 'Compulsory arguments for execution_qa: -a -st -spv -dpvm -drl -drv -dpd. ') parser.add_argument('-p', '--product', required=False, dest="product_name", help='Specific product to be used instead of the predefined product list inside testopia.config') parser.add_argument('-pid', '--product-id', required=False, dest="product_id", help='Specific product id to be used instead of the predefined product list inside testopia.config') parser.add_argument('-st', '--source-testplan', required=False, dest="source_testplan", help='Source testplan name (eg. master, rocko, pyro, morty, etc)') parser.add_argument('-dt', '--dest-testplan', required=False, dest="dest_testplan", help='Destination testplan name (eg. master, rocko, pyro, morty, etc)') parser.add_argument('-spv', '--source-project-version', required=False, dest="source_project_version", help='Source version (eg. 2.5, 2.4. 2.3, etc) of the project.') parser.add_argument('-dpv', '--dest-project-version', required=False, dest="dest_project_version", help='Destination version (eg. 2.5, 2.4. 2.3, etc) of the project.') parser.add_argument('-dpvm', '--dest-project-version-milestone', required=False, dest="dest_project_version_milestone", help='Destination version and milestone (eg. 2.4 M1, 2.4 M2, 2.4.1, 2.4.2, etc).') parser.add_argument('-drl', '--dest-release', required=False, dest="dest_release", help='Destination release (eg. rc1, rc2, rc3, rc4).') parser.add_argument('-drv', '--dest-revision', required=False, dest="dest_revision", help='Destination revision (eg. poky commit or revision).') parser.add_argument('-dpd', '--dest-project-date', required=False, dest="dest_project_date", help='Destination date of the execution (eg. 2017-12-29).') parser.add_argument('--verbose', required=False, action="store_true", dest="verbose", default=False, help='Enable verbose mode.') parser.add_argument('--debug', required=False, action="store_true", dest="debug", default=False, help='Enable debug mode.') return parser.parse_args() def _setup_logger(args): if args.verbose or args.debug: logging.basicConfig(stream=sys.stdout) root = logging.getLogger() root.setLevel(logging.DEBUG if args.debug else logging.INFO) else: logging.basicConfig(stream=sys.stderr) return logging.getLogger() def _check_if_run_user_specified_product(args): if args.product_name and args.product_id: return True else: return False if __name__ == '__main__': args = _get_args() logger = _setup_logger(args) if not args.config: args.config = "./conf/testopia.config" if not os.path.exists(args.config): logger.error("Config, %s, does not exist." % (args.config)) sys.exit(1) if _check_if_run_user_specified_product(args): args.product_id = int(args.product_id) loader = TestopiaStrategyLoader(args) strategy = loader.get_strategy() strategy.run(logger) else: parser = TestopiaConfigParser(args.config) products = parser.get_testopia_config_items("Products") for p in products: args.product_name = p[0] args.product_id = int(p[1]) loader = TestopiaStrategyLoader(args) strategy = loader.get_strategy() strategy.run(logger)