"""Tests for blueberry.tests.bluetooth_pairing.""" from __future__ import absolute_import from __future__ import division from __future__ import print_function import logging from mobly import test_runner from mobly import signals from blueberry.utils import asserts from blueberry.utils import blueberry_base_test class BluetoothPairingTest(blueberry_base_test.BlueberryBaseTest): """Test Class for Bluetooth Pairing Test. Test will reset the bluetooth settings on the phone and attempt to pair with the derived_bt_device specified in the configuration file. """ def setup_class(self): """Standard Mobly setup class.""" super(BluetoothPairingTest, self).setup_class() # Adds a use case that derived_bt_device initiates a pairing request to # primary_device. Enable this case if allow_pairing_reverse is 1. self.allow_pairing_reverse = int(self.user_params.get( 'allow_pairing_reverse', 0)) if self.android_devices: self.primary_device = self.android_devices[0] self.primary_device.init_setup() self.primary_device.sl4a_setup() if len(self.android_devices) > 1 and not self.derived_bt_devices: # In the case of pairing phone to phone, we need to treat the # secondary phone as a derived_bt_device in order for the generic script # to work with this android phone properly. self.derived_bt_device = self.android_devices[1] self.derived_bt_devices.append(self.derived_bt_device) self.derived_bt_device.init_setup() self.derived_bt_device.sl4a_setup() else: self.derived_bt_device = self.derived_bt_devices[0] self.derived_bt_device.factory_reset_bluetooth() else: # In the case of pairing mock to mock, at least 2 derived_bt_device is # required. The first derived_bt_device is treated as primary_device. self.primary_device = self.derived_bt_devices[0] self.primary_device.init_setup() self.derived_bt_device = self.derived_bt_devices[1] self.derived_bt_device.factory_reset_bluetooth() def setup_test(self): """Setup for pairing test.""" logging.info('Setup Test for test_pair_and_bond') super(BluetoothPairingTest, self).setup_test() def test_pair_and_bond(self): """Test for pairing and bonding a phone with a bluetooth device. Initiates pairing from the phone and checks for 20 seconds that the device is connected. """ device_list = [(self.primary_device, self.derived_bt_device)] if self.allow_pairing_reverse: device_list.append((self.derived_bt_device, self.primary_device)) for initiator, receiver in device_list: # get mac address of device to pair with mac_address = receiver.get_bluetooth_mac_address() logging.info('Receiver BT MAC Address: %s', mac_address) # put device into pairing mode receiver.activate_pairing_mode() # initiate pairing from initiator initiator.set_target(receiver) with asserts.assert_not_raises(signals.ControllerError): initiator.pair_and_connect_bluetooth(mac_address) if self.allow_pairing_reverse and initiator != self.derived_bt_device: logging.info('===== Reversing Pairing =====') # Resets Bluetooth status for two sides. initiator.factory_reset_bluetooth() receiver.factory_reset_bluetooth() if __name__ == '__main__': test_runner.main()