blob: 767af38da620e81cfdf0ae8dc2f32fae28bd1784 [file] [log] [blame]
"""Tests for Bluetooth connection with Android device and a Bluetooth device."""
import time
from mobly import test_runner
from blueberry.utils import blueberry_base_test
# Connection state change sleep time in seconds.
CONNECTION_STATE_CHANGE_SLEEP_SEC = 5
class BluetoothConnectionTest(blueberry_base_test.BlueberryBaseTest):
"""Test Class for Bluetooth connection testing.
Attributes:
primary_device: A primary device under test.
derived_bt_device: A Bluetooth device which is used to connected to the
primary device in the test.
"""
def setup_class(self):
super().setup_class()
self.primary_device = self.android_devices[0]
self.primary_device.init_setup()
self.derived_bt_device = self.derived_bt_devices[0]
self.derived_bt_device.factory_reset_bluetooth()
self.mac_address = self.derived_bt_device.get_bluetooth_mac_address()
self.derived_bt_device.activate_pairing_mode()
self.primary_device.pair_and_connect_bluetooth(self.mac_address)
def setup_test(self):
super().setup_test()
# Checks if A2DP and HSP profiles are connected.
self.wait_for_a2dp_and_hsp_connection_state(connected=True)
# Buffer between tests.
time.sleep(CONNECTION_STATE_CHANGE_SLEEP_SEC)
def wait_for_a2dp_and_hsp_connection_state(self, connected):
"""Asserts that A2DP and HSP connections are in the expected state.
Args:
connected: bool, True if the expected state is connected else False.
"""
self.primary_device.wait_for_a2dp_connection_state(self.mac_address,
connected)
self.primary_device.wait_for_hsp_connection_state(self.mac_address,
connected)
def test_disconnect_and_connect(self):
"""Test for DUT disconnecting and then connecting to the remote device."""
self.primary_device.log.info('Disconnecting the device "%s"...' %
self.mac_address)
self.primary_device.disconnect_bluetooth(self.mac_address)
self.wait_for_a2dp_and_hsp_connection_state(connected=False)
# Buffer time for connection state change.
time.sleep(CONNECTION_STATE_CHANGE_SLEEP_SEC)
self.primary_device.log.info('Connecting the device "%s"...' %
self.mac_address)
self.primary_device.connect_bluetooth(self.mac_address)
self.wait_for_a2dp_and_hsp_connection_state(connected=True)
def test_reconnect_when_enabling_bluetooth(self):
"""Test for DUT reconnecting to the remote device when Bluetooth enabled."""
self.primary_device.log.info('Turning off Bluetooth...')
self.primary_device.sl4a.bluetoothToggleState(False)
self.primary_device.wait_for_bluetooth_toggle_state(enabled=False)
self.primary_device.wait_for_disconnection_success(self.mac_address)
time.sleep(CONNECTION_STATE_CHANGE_SLEEP_SEC)
self.primary_device.log.info('Turning on Bluetooth...')
self.primary_device.sl4a.bluetoothToggleState(True)
self.primary_device.wait_for_bluetooth_toggle_state(enabled=True)
self.primary_device.wait_for_connection_success(self.mac_address)
self.wait_for_a2dp_and_hsp_connection_state(connected=True)
def test_reconnect_when_connected_device_powered_on(self):
"""Test for the remote device reconnecting to DUT.
Tests that DUT can be disconnected when the remoted device is powerd off,
and then reconnected when the remote device is powered on.
"""
self.primary_device.log.info(
'The connected device "%s" is being powered off...' % self.mac_address)
self.derived_bt_device.power_off()
self.primary_device.wait_for_disconnection_success(self.mac_address)
self.wait_for_a2dp_and_hsp_connection_state(connected=False)
time.sleep(CONNECTION_STATE_CHANGE_SLEEP_SEC)
self.derived_bt_device.power_on()
self.primary_device.log.info(
'The connected device "%s" is being powered on...' % self.mac_address)
self.primary_device.wait_for_connection_success(self.mac_address)
self.wait_for_a2dp_and_hsp_connection_state(connected=True)
if __name__ == '__main__':
test_runner.main()