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