1# Copyright (c) 2013 The Chromium OS Authors. All rights reserved. 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4 5import logging, time 6 7from autotest_lib.client.cros.bluetooth import bluetooth_semiauto_helper 8 9 10class bluetooth_RegressionClient( 11 bluetooth_semiauto_helper.BluetoothSemiAutoHelper): 12 """Implement Bluetooth Regression Tests with some interaction.""" 13 version = 1 14 15 def _test_init(self, test_type): 16 """Init test by collecting intial logs, starting dump, etc. 17 18 @param: test_type: short string label for log files and messages 19 """ 20 self._test_type = test_type 21 logging.info('Beginning test of type %s.', test_type) 22 self.start_dump() 23 self.collect_logs(message=('Before %s.' % test_type)) 24 25 def _power_off(self): 26 self._test_init('power_off') 27 28 def _os_idle(self): 29 self._test_init('os_idle') 30 self.ask_user('OS Idle test: after pressing PASS, the OS will idle ' 31 'after a short delay. Do not prevent it from idling.' 32 '<br>After OS has idled for at least 10 seconds, use ' 33 'a Bluetooth device to wake machine (or use onboard ' 34 'inputs if no Bluetooth device is capable).<br>' 35 'Make sure audio continues to play over Bluetooth.') 36 self.os_idle_time_set() 37 self.tell_user('Going to sleep now...') 38 time.sleep(20) 39 self.check_working() 40 self.os_idle_time_set(reset=True) 41 self.collect_logs(message='After idle.') 42 43 def _suspend(self): 44 self._test_init('suspend') 45 self.ask_user('OS Suspend test: after pressing PASS, the OS will ' 46 'suspend.<br>It will wake on its own after some time.' 47 '<br>Audio will stop playing.') 48 self.os_suspend() 49 self.check_working() 50 self.collect_logs(message='After suspend.') 51 52 def _log_off(self): 53 self._test_init('log_off') 54 self.close_browser() 55 self.login_and_open_browser() 56 self.check_working() 57 self.collect_logs(message='After login.') 58 59 def _disconnect(self): 60 self._test_init('disconnect') 61 self.tell_user('Please disconnect all Bluetooth devices using (x).') 62 self.wait_for_adapter(adapter_status=True) 63 self.wait_for_connections(paired_status=True, connected_status=False) 64 self.ask_user('Audio NOT playing through onboard speakers?<br>' 65 'Audio NOT playing through Bluetooth device?') 66 self.collect_logs(message='After disconnect.') 67 self.check_working() 68 self.collect_logs(message='After reconnect.') 69 70 def _device_off(self): 71 self._test_init('device_off') 72 self.tell_user('Please turn off all Bluetooth devices.<br>' 73 'Disconnect them on the Settings page if needed.') 74 self.wait_for_adapter(adapter_status=True) 75 self.wait_for_connections(paired_status=True, connected_status=False) 76 self.ask_user('Audio NOT playing through onboard speakers?') 77 self.collect_logs(message='After device turned off.') 78 self.check_working(message='Please turn devices back on and connect.') 79 self.collect_logs(message='After device on.') 80 81 def _unpair(self): 82 self._test_init('unpair') 83 self.tell_user('Please unpair all Bluetooth devices (using (x))') 84 self.wait_for_adapter(adapter_status=True) 85 self.wait_for_connections(paired_status=False, connected_status=False) 86 self.ask_user('No Bluetooth devices work.<br> Audio is NOT playing ' 87 'through onboard speakers or wired headphones.') 88 self.collect_logs(message='After unpair.') 89 self.check_working(message='Please re-pair and connect devices.') 90 self.collect_logs(message='After re-pair.') 91 92 def _disable(self): 93 self._test_init('disable') 94 self.tell_user('Please disable Bluetooth (uncheck Enable Bluetooth).') 95 self.wait_for_adapter(adapter_status=False) 96 self.collect_logs(message='While disabled') 97 self.wait_for_connections(paired_status=True, connected_status=False) 98 self.ask_user('No Bluetooth devices work?<br> Audio is NOT playing ' 99 'through onboard speakers or wired headphones?') 100 self.tell_user('Please enable Bluetooth (check Enable Bluetooth).<br>' 101 'Make sure all devices are still listed after enable.') 102 self.wait_for_adapter(adapter_status=True) 103 self.check_working() 104 self.collect_logs(message='After re-enable.') 105 106 def run_once(self): 107 """Runs Regression tests for Bluetooth. 108 109 Two phases: before and after reboot by server. Called by run_test. 110 """ 111 self.check_working() 112 113 if self._test_phase == 'reboot': 114 self._disable() 115 self._power_off() 116 elif self._test_phase == 'client': 117 self._power_off() 118 self._os_idle() 119 self._suspend() 120 self._log_off() 121 self._disconnect() 122 self._device_off() 123 self._unpair() 124 125