86 lines
3.3 KiB
Python
86 lines
3.3 KiB
Python
|
"""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()
|