xref: /aosp_15_r20/external/autotest/cli/test.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
1*9c5db199SXin Li#
2*9c5db199SXin Li# Copyright 2008 Google Inc. All Rights Reserved.
3*9c5db199SXin Li
4*9c5db199SXin Li"""
5*9c5db199SXin LiThe test module contains the objects and methods used to
6*9c5db199SXin Limanage tests in Autotest.
7*9c5db199SXin Li
8*9c5db199SXin LiThe valid action is:
9*9c5db199SXin Lilist:       lists test(s)
10*9c5db199SXin Li
11*9c5db199SXin LiThe common options are:
12*9c5db199SXin Li--tlist / -T: file containing a list of tests
13*9c5db199SXin Li
14*9c5db199SXin LiSee topic_common.py for a High Level Design and Algorithm.
15*9c5db199SXin Li"""
16*9c5db199SXin Li
17*9c5db199SXin Li
18*9c5db199SXin Liimport os, sys
19*9c5db199SXin Li
20*9c5db199SXin Lifrom autotest_lib.cli import topic_common, action_common
21*9c5db199SXin Li
22*9c5db199SXin Li
23*9c5db199SXin Liclass test(topic_common.atest):
24*9c5db199SXin Li    """Test class
25*9c5db199SXin Li    atest test list <options>"""
26*9c5db199SXin Li    usage_action = 'list'
27*9c5db199SXin Li    topic = msg_topic = 'test'
28*9c5db199SXin Li    msg_items = '[tests]'
29*9c5db199SXin Li
30*9c5db199SXin Li    def __init__(self):
31*9c5db199SXin Li        """Add to the parser the options common to all the test actions"""
32*9c5db199SXin Li        super(test, self).__init__()
33*9c5db199SXin Li
34*9c5db199SXin Li        self.parser.add_option('-T', '--tlist',
35*9c5db199SXin Li                               help='File listing the tests',
36*9c5db199SXin Li                               type='string',
37*9c5db199SXin Li                               default=None,
38*9c5db199SXin Li                               metavar='TEST_FLIST')
39*9c5db199SXin Li
40*9c5db199SXin Li        self.topic_parse_info = topic_common.item_parse_info(
41*9c5db199SXin Li            attribute_name='tests',
42*9c5db199SXin Li            filename_option='tlist',
43*9c5db199SXin Li            use_leftover=True)
44*9c5db199SXin Li
45*9c5db199SXin Li
46*9c5db199SXin Li    def get_items(self):
47*9c5db199SXin Li        return self.tests
48*9c5db199SXin Li
49*9c5db199SXin Li
50*9c5db199SXin Liclass test_help(test):
51*9c5db199SXin Li    """Just here to get the atest logic working.
52*9c5db199SXin Li    Usage is set by its parent"""
53*9c5db199SXin Li    pass
54*9c5db199SXin Li
55*9c5db199SXin Li
56*9c5db199SXin Liclass test_list(action_common.atest_list, test):
57*9c5db199SXin Li    """atest test list [--description] [--experimental|--all] [<tests>]"""
58*9c5db199SXin Li    def __init__(self):
59*9c5db199SXin Li        super(test_list, self).__init__()
60*9c5db199SXin Li
61*9c5db199SXin Li        self.parser.add_option('-d', '--description',
62*9c5db199SXin Li                               help='Display the test descriptions',
63*9c5db199SXin Li                               action='store_true',
64*9c5db199SXin Li                               default=False)
65*9c5db199SXin Li        self.parser.add_option('--all',
66*9c5db199SXin Li                               help='Display all the tests',
67*9c5db199SXin Li                               action='store_true',
68*9c5db199SXin Li                               default=False)
69*9c5db199SXin Li        self.parser.add_option('-e', '--experimental',
70*9c5db199SXin Li                               help='Display the experimental tests only',
71*9c5db199SXin Li                               action='store_true',
72*9c5db199SXin Li                               default=False)
73*9c5db199SXin Li
74*9c5db199SXin Li
75*9c5db199SXin Li    def parse(self):
76*9c5db199SXin Li        (options, leftover) = super(test_list, self).parse()
77*9c5db199SXin Li
78*9c5db199SXin Li        if self.tests and (options.experimental or options.all):
79*9c5db199SXin Li            self.invalid_syntax('Do not specify a test name with --all or '
80*9c5db199SXin Li                                '--experimental')
81*9c5db199SXin Li
82*9c5db199SXin Li        self.description = options.description
83*9c5db199SXin Li        self.all = options.all
84*9c5db199SXin Li        self.experimental = options.experimental
85*9c5db199SXin Li
86*9c5db199SXin Li        return (options, leftover)
87*9c5db199SXin Li
88*9c5db199SXin Li
89*9c5db199SXin Li    def execute(self):
90*9c5db199SXin Li        filters = {}
91*9c5db199SXin Li        check_results = {}
92*9c5db199SXin Li        if self.tests:
93*9c5db199SXin Li            filters['name__in'] = self.tests
94*9c5db199SXin Li            check_results['name__in'] = 'name'
95*9c5db199SXin Li
96*9c5db199SXin Li        if not self.all:
97*9c5db199SXin Li            filters['experimental'] = self.experimental
98*9c5db199SXin Li            check_results['experimental'] = None
99*9c5db199SXin Li
100*9c5db199SXin Li        return super(test_list, self).execute(op='get_tests',
101*9c5db199SXin Li                                              filters=filters,
102*9c5db199SXin Li                                              check_results=check_results)
103*9c5db199SXin Li
104*9c5db199SXin Li
105*9c5db199SXin Li    def output(self, results):
106*9c5db199SXin Li        keys = ['name', 'test_type', 'test_class']
107*9c5db199SXin Li
108*9c5db199SXin Li        if self.all:
109*9c5db199SXin Li            keys.append('experimental')
110*9c5db199SXin Li
111*9c5db199SXin Li        if self.verbose:
112*9c5db199SXin Li            keys.append('path')
113*9c5db199SXin Li
114*9c5db199SXin Li        if self.description:
115*9c5db199SXin Li            keys.append('description')
116*9c5db199SXin Li
117*9c5db199SXin Li        super(test_list, self).output(results, keys)
118