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