xref: /OK3568_Linux_fs/yocto/scripts/oe-test (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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