# Copyright (c) 2013 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, time
from autotest_lib.client.cros.bluetooth import bluetooth_semiauto_helper
class bluetooth_RegressionClient(
bluetooth_semiauto_helper.BluetoothSemiAutoHelper):
"""Implement Bluetooth Regression Tests with some interaction."""
version = 1
def _test_init(self, test_type):
"""Init test by collecting intial logs, starting dump, etc.
@param: test_type: short string label for log files and messages
"""
self._test_type = test_type
logging.info('Beginning test of type %s.', test_type)
self.start_dump()
self.collect_logs(message=('Before %s.' % test_type))
def _power_off(self):
self._test_init('power_off')
def _os_idle(self):
self._test_init('os_idle')
self.ask_user('OS Idle test: after pressing PASS, the OS will idle '
'after a short delay. Do not prevent it from idling.'
'
After OS has idled for at least 10 seconds, use '
'a Bluetooth device to wake machine (or use onboard '
'inputs if no Bluetooth device is capable).
'
'Make sure audio continues to play over Bluetooth.')
self.os_idle_time_set()
self.tell_user('Going to sleep now...')
time.sleep(20)
self.check_working()
self.os_idle_time_set(reset=True)
self.collect_logs(message='After idle.')
def _suspend(self):
self._test_init('suspend')
self.ask_user('OS Suspend test: after pressing PASS, the OS will '
'suspend.
It will wake on its own after some time.'
'
Audio will stop playing.')
self.os_suspend()
self.check_working()
self.collect_logs(message='After suspend.')
def _log_off(self):
self._test_init('log_off')
self.close_browser()
self.login_and_open_browser()
self.check_working()
self.collect_logs(message='After login.')
def _disconnect(self):
self._test_init('disconnect')
self.tell_user('Please disconnect all Bluetooth devices using (x).')
self.wait_for_adapter(adapter_status=True)
self.wait_for_connections(paired_status=True, connected_status=False)
self.ask_user('Audio NOT playing through onboard speakers?
'
'Audio NOT playing through Bluetooth device?')
self.collect_logs(message='After disconnect.')
self.check_working()
self.collect_logs(message='After reconnect.')
def _device_off(self):
self._test_init('device_off')
self.tell_user('Please turn off all Bluetooth devices.
'
'Disconnect them on the Settings page if needed.')
self.wait_for_adapter(adapter_status=True)
self.wait_for_connections(paired_status=True, connected_status=False)
self.ask_user('Audio NOT playing through onboard speakers?')
self.collect_logs(message='After device turned off.')
self.check_working(message='Please turn devices back on and connect.')
self.collect_logs(message='After device on.')
def _unpair(self):
self._test_init('unpair')
self.tell_user('Please unpair all Bluetooth devices (using (x))')
self.wait_for_adapter(adapter_status=True)
self.wait_for_connections(paired_status=False, connected_status=False)
self.ask_user('No Bluetooth devices work.
Audio is NOT playing '
'through onboard speakers or wired headphones.')
self.collect_logs(message='After unpair.')
self.check_working(message='Please re-pair and connect devices.')
self.collect_logs(message='After re-pair.')
def _disable(self):
self._test_init('disable')
self.tell_user('Please disable Bluetooth (uncheck Enable Bluetooth).')
self.wait_for_adapter(adapter_status=False)
self.collect_logs(message='While disabled')
self.wait_for_connections(paired_status=True, connected_status=False)
self.ask_user('No Bluetooth devices work?
Audio is NOT playing '
'through onboard speakers or wired headphones?')
self.tell_user('Please enable Bluetooth (check Enable Bluetooth).
'
'Make sure all devices are still listed after enable.')
self.wait_for_adapter(adapter_status=True)
self.check_working()
self.collect_logs(message='After re-enable.')
def run_once(self):
"""Runs Regression tests for Bluetooth.
Two phases: before and after reboot by server. Called by run_test.
"""
self.check_working()
if self._test_phase == 'reboot':
self._disable()
self._power_off()
elif self._test_phase == 'client':
self._power_off()
self._os_idle()
self._suspend()
self._log_off()
self._disconnect()
self._device_off()
self._unpair()