xref: /aosp_15_r20/external/autotest/server/cros/tradefed/tradefed_prerequisite.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
1*9c5db199SXin Li# Lint as: python2, python3
2*9c5db199SXin Li# Copyright 2019 The Chromium OS Authors. All rights reserved.
3*9c5db199SXin Li# Use of this source code is governed by a BSD-style license that can be
4*9c5db199SXin Li# found in the LICENSE file.
5*9c5db199SXin Li
6*9c5db199SXin Liimport logging
7*9c5db199SXin Li
8*9c5db199SXin Li_ERROR_PREFIX = 'CTS Test Precondition Failed'
9*9c5db199SXin Li
10*9c5db199SXin Lidef bluetooth(hosts):
11*9c5db199SXin Li    """Check for missing bluetooth hardware.
12*9c5db199SXin Li    """
13*9c5db199SXin Li    # TODO(ianrlee): Reenable, once a nice check is found in b/148621587.
14*9c5db199SXin Li    # for host in hosts:
15*9c5db199SXin Li    #    output = host.run('hcitool dev').stdout
16*9c5db199SXin Li    #    lines = output.splitlines()
17*9c5db199SXin Li    #    if len(lines) < 2 or not lines[0].startswith('Devices:'):
18*9c5db199SXin Li    #        return False, '%s: Bluetooth device is missing.'\
19*9c5db199SXin Li    #                      'Stdout of the command "hcitool dev"'\
20*9c5db199SXin Li    #                      'on host %s was %s' % (_ERROR_PREFIX, host, output)
21*9c5db199SXin Li    return True, ''
22*9c5db199SXin Li
23*9c5db199SXin Li
24*9c5db199SXin Lidef region_us(hosts):
25*9c5db199SXin Li    """Check that region is set to "us".
26*9c5db199SXin Li    """
27*9c5db199SXin Li    for host in hosts:
28*9c5db199SXin Li        output = host.run('vpd -g region', ignore_status=True).stdout
29*9c5db199SXin Li        if output not in ['us', '']:
30*9c5db199SXin Li            return False, '%s: Region is not "us" or empty. '\
31*9c5db199SXin Li                          'STDOUT of the command "vpd -l '\
32*9c5db199SXin Li                          'region" on host %s was %s'\
33*9c5db199SXin Li                          % (_ERROR_PREFIX, host, output)
34*9c5db199SXin Li    return True, ''
35*9c5db199SXin Li
36*9c5db199SXin Liprerequisite_map = {
37*9c5db199SXin Li    'bluetooth': bluetooth,
38*9c5db199SXin Li    'region_us': region_us,
39*9c5db199SXin Li}
40*9c5db199SXin Li
41*9c5db199SXin Lidef check(prereq, hosts):
42*9c5db199SXin Li    """Execute the prerequisite check.
43*9c5db199SXin Li
44*9c5db199SXin Li    @return boolean indicating if check passes.
45*9c5db199SXin Li    @return string error message if check fails.
46*9c5db199SXin Li    """
47*9c5db199SXin Li    if prereq not in prerequisite_map:
48*9c5db199SXin Li        logging.info('%s is not a valid prerequisite.', prereq)
49*9c5db199SXin Li        return True, ''
50*9c5db199SXin Li    return prerequisite_map[prereq](hosts)
51