| # Copyright (c) 2014 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import logging |
| |
| from autotest_lib.client.bin import utils |
| from autotest_lib.client.common_lib import error |
| from autotest_lib.client.cros.bluetooth import bluetooth_semiauto_helper |
| |
| |
| class bluetooth_AdapterSanity( |
| bluetooth_semiauto_helper.BluetoothSemiAutoHelper): |
| """Checks whether the Bluetooth adapter is present and working.""" |
| version = 1 |
| |
| def _find_kernel_errors(self): |
| """Fail test for any suspicious log entries from kernel. |
| |
| Ignore some known errors in order to find new ones. |
| |
| """ |
| fail_terms = ['[^a-z]err[^a-z]'] |
| ignore_terms = ['RFKILL control', '"Service Changed" characteristic'] |
| |
| log_cmd = 'grep -i bluetooth /var/log/messages' |
| for term in ignore_terms: |
| log_cmd += ' | grep -v \'%s\'' % term |
| |
| for term in fail_terms: |
| search_cmd = '%s | grep -i \'%s\'' % (log_cmd, term) |
| log_entries = utils.run(search_cmd, ignore_status=True).stdout |
| if len(log_entries) > 0: |
| log_entries.split('\n') |
| logging.info(log_entries) |
| self.collect_logs('Bluetooth kernel error') |
| raise error.TestFail('Bluetooth kernel error found!') |
| |
| def warmup(self): |
| """Overwrite parent warmup; no need to log in.""" |
| pass |
| |
| def run_once(self): |
| """Entry point of this test.""" |
| if not self.supports_bluetooth(): |
| return |
| |
| # Start btmon running. |
| self.start_dump() |
| |
| self.poll_adapter_presence() |
| |
| # Enable then disable adapter. |
| self.set_adapter_power(True) |
| self.set_adapter_power(False) |
| |
| # Check for errors in logs. |
| self._find_kernel_errors() |