1*4882a593Smuzhiyun#!/usr/bin/env python3 2*4882a593Smuzhiyun 3*4882a593Smuzhiyun# OpenEmbedded test tool 4*4882a593Smuzhiyun# 5*4882a593Smuzhiyun# Copyright (C) 2016 Intel Corporation 6*4882a593Smuzhiyun# 7*4882a593Smuzhiyun# SPDX-License-Identifier: MIT 8*4882a593Smuzhiyun# 9*4882a593Smuzhiyun 10*4882a593Smuzhiyunimport os 11*4882a593Smuzhiyunimport sys 12*4882a593Smuzhiyunimport argparse 13*4882a593Smuzhiyunimport logging 14*4882a593Smuzhiyun 15*4882a593Smuzhiyunscripts_path = os.path.dirname(os.path.realpath(__file__)) 16*4882a593Smuzhiyunlib_path = scripts_path + '/lib' 17*4882a593Smuzhiyunsys.path = sys.path + [lib_path] 18*4882a593Smuzhiyunimport argparse_oe 19*4882a593Smuzhiyunimport scriptutils 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun# oe-test is used for testexport and it doesn't have oe lib 22*4882a593Smuzhiyun# so we just skip adding these libraries (not used in testexport) 23*4882a593Smuzhiyuntry: 24*4882a593Smuzhiyun import scriptpath 25*4882a593Smuzhiyun scriptpath.add_oe_lib_path() 26*4882a593Smuzhiyunexcept ImportError: 27*4882a593Smuzhiyun pass 28*4882a593Smuzhiyun 29*4882a593Smuzhiyunfrom oeqa.utils import load_test_components 30*4882a593Smuzhiyunfrom oeqa.core.exception import OEQAPreRun 31*4882a593Smuzhiyun 32*4882a593Smuzhiyunlogger = scriptutils.logger_create('oe-test', stream=sys.stdout) 33*4882a593Smuzhiyun 34*4882a593Smuzhiyundef main(): 35*4882a593Smuzhiyun parser = argparse_oe.ArgumentParser(description="OpenEmbedded test tool", 36*4882a593Smuzhiyun add_help=False, 37*4882a593Smuzhiyun epilog="Use %(prog)s <subcommand> --help to get help on a specific command") 38*4882a593Smuzhiyun parser.add_argument('-d', '--debug', help='Enable debug output', action='store_true') 39*4882a593Smuzhiyun parser.add_argument('-q', '--quiet', help='Print only errors', action='store_true') 40*4882a593Smuzhiyun global_args, unparsed_args = parser.parse_known_args() 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun # Help is added here rather than via add_help=True, as we don't want it to 43*4882a593Smuzhiyun # be handled by parse_known_args() 44*4882a593Smuzhiyun parser.add_argument('-h', '--help', action='help', default=argparse.SUPPRESS, 45*4882a593Smuzhiyun help='show this help message and exit') 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun if global_args.debug: 48*4882a593Smuzhiyun logger.setLevel(logging.DEBUG) 49*4882a593Smuzhiyun elif global_args.quiet: 50*4882a593Smuzhiyun logger.setLevel(logging.ERROR) 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun components = load_test_components(logger, 'oe-test') 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun subparsers = parser.add_subparsers(dest="subparser_name", title='subcommands', metavar='<subcommand>') 55*4882a593Smuzhiyun subparsers.add_subparser_group('components', 'Test components') 56*4882a593Smuzhiyun subparsers.required = True 57*4882a593Smuzhiyun for comp_name in sorted(components.keys()): 58*4882a593Smuzhiyun comp = components[comp_name] 59*4882a593Smuzhiyun comp.register_commands(logger, subparsers) 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun try: 62*4882a593Smuzhiyun args = parser.parse_args(unparsed_args, namespace=global_args) 63*4882a593Smuzhiyun results = args.func(logger, args) 64*4882a593Smuzhiyun ret = 0 if results.wasSuccessful() else 1 65*4882a593Smuzhiyun except SystemExit as err: 66*4882a593Smuzhiyun if err.code != 0: 67*4882a593Smuzhiyun raise err 68*4882a593Smuzhiyun ret = err.code 69*4882a593Smuzhiyun except argparse_oe.ArgumentUsageError as ae: 70*4882a593Smuzhiyun parser.error_subcommand(ae.message, ae.subcommand) 71*4882a593Smuzhiyun except OEQAPreRun as pr: 72*4882a593Smuzhiyun ret = 1 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun return ret 75*4882a593Smuzhiyun 76*4882a593Smuzhiyunif __name__ == '__main__': 77*4882a593Smuzhiyun try: 78*4882a593Smuzhiyun ret = main() 79*4882a593Smuzhiyun except Exception: 80*4882a593Smuzhiyun ret = 1 81*4882a593Smuzhiyun import traceback 82*4882a593Smuzhiyun traceback.print_exc() 83*4882a593Smuzhiyun sys.exit(ret) 84