| # Lint as: python2, python3 |
| # Copyright 2021 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. |
| |
| """A Batch of of Bluetooth enterprise policy health tests""" |
| |
| from __future__ import absolute_import |
| from __future__ import division |
| from __future__ import print_function |
| |
| import time |
| |
| from six.moves import zip |
| |
| from autotest_lib.client.common_lib import error |
| from autotest_lib.client.cros.bluetooth.bluetooth_audio_test_data import A2DP |
| from autotest_lib.server.cros.bluetooth.bluetooth_adapter_quick_tests import ( |
| BluetoothAdapterQuickTests) |
| from autotest_lib.server.cros.bluetooth.bluetooth_adapter_audio_tests import ( |
| BluetoothAdapterAudioTests) |
| from autotest_lib.server.cros.bluetooth.bluetooth_adapter_hidreports_tests \ |
| import BluetoothAdapterHIDReportTests |
| |
| from autotest_lib.server.cros.bluetooth.bluetooth_test_utils import ( |
| BluetoothPolicy) |
| |
| |
| class bluetooth_AdapterEPHealth(BluetoothAdapterQuickTests, |
| BluetoothAdapterAudioTests, |
| BluetoothAdapterHIDReportTests): |
| """A Batch of Bluetooth enterprise policy health tests.""" |
| |
| # A delay for disconnection to finish. |
| DISCONNECT_SLEEP_SECS = 2 |
| |
| # With raspberry pi peer, it takes a moment before the device is |
| # registered as an input device. Without delay, the input recorder |
| # doesn't find the device |
| CONNECT_SLEEP_SECS = 1 |
| |
| test_wrapper = BluetoothAdapterQuickTests.quick_test_test_decorator |
| batch_wrapper = BluetoothAdapterQuickTests.quick_test_batch_decorator |
| |
| |
| def get_device_verifier(self, device): |
| """Helper function to get a proper test method for verifying device |
| avalibility depending on its type |
| |
| @param device: a peer device |
| @returns: a test method if the device type can be recongnized, |
| None otherwise. |
| """ |
| if device.device_type == 'KEYBOARD': |
| return self.run_keyboard_tests |
| elif device.device_type == 'MOUSE': |
| return self.test_mouse_left_click |
| elif device.device_type == 'BLUETOOTH_AUDIO': |
| return lambda device: self.test_a2dp_sinewaves(device, A2DP, 0) |
| else: |
| raise error.TestError('Failed to find verifier for device type %s' % |
| device.device_type) |
| |
| |
| def ep_outgoing_connection(self, device, expected_pass): |
| """Run outoging connection tests |
| |
| @param device: the peer device |
| @param expected_pass: True if the test is expected to pass |
| """ |
| self.test_discover_device(device.address) |
| time.sleep(self.TEST_SLEEP_SECS) |
| |
| self.test_pairing(device.address, device.pin, trusted=True) |
| time.sleep(self.CONNECT_SLEEP_SECS) |
| |
| |
| def ep_incoming_connection(self, device, expected_pass): |
| """Run incoming connection tests |
| |
| @param device: the peer device |
| @param expected_pass: True if the test is expected to pass |
| """ |
| self.test_discover_device(device.address) |
| time.sleep(self.TEST_SLEEP_SECS) |
| |
| self.test_pairing(device.address, device.pin, trusted=True) |
| time.sleep(self.CONNECT_SLEEP_SECS) |
| |
| self.test_disconnection_by_device(device) |
| time.sleep(self.DISCONNECT_SLEEP_SECS) |
| |
| if expected_pass: |
| self.test_connection_by_device(device) |
| else: |
| # ignore the result of connection by device since bluez could |
| # disconnect the device connection if there is no service |
| # available |
| adapter_address = self.bluetooth_facade.address |
| device.ConnectToRemoteAddress(adapter_address) |
| time.sleep(self.CONNECT_SLEEP_SECS) |
| |
| |
| def ep_auto_reconnection(self, device, expected_pass): |
| """Run auto reconnection tests |
| |
| @param device: the peer device |
| @param expected_pass: True if the test is expected to pass |
| """ |
| self.test_discover_device(device.address) |
| time.sleep(self.TEST_SLEEP_SECS) |
| |
| self.test_pairing(device.address, device.pin, trusted=True) |
| time.sleep(self.CONNECT_SLEEP_SECS) |
| |
| device.AdapterPowerOff() |
| time.sleep(self.TEST_SLEEP_SECS) |
| # device should be connected after power on |
| device.AdapterPowerOn() |
| |
| |
| def reset_allowlist_and_raise_fail(self, err_msg): |
| """Reset the allowlist and raise TestFail. |
| |
| @param err_msg: the error message |
| """ |
| self.test_reset_allowlist() |
| raise error.TestFail(err_msg) |
| |
| |
| def post_test_method(self, device): |
| """Run tests to make sure the device is not connected and not paired to |
| host |
| |
| @param device: the peer device |
| """ |
| |
| self.test_disconnection_by_adapter(device.address) |
| self.test_remove_pairing(device.address) |
| |
| def run_test_method(self, pre_test_method, devices, uuids='', |
| expected_passes=True): |
| """Run specified pre_test_method and verify devices can be used. |
| |
| @param pre_test_method: the test method to run before verification |
| @param devices: a peer device or a list of peer devices |
| @param uuids: the uuids in the allowlist to set. |
| If uuids is None, it means not to set Allowlist. |
| The default value is '' which means to allow all UUIDs. |
| @param expected_passes: a boolean value or a list of boolean value, |
| each element is True if the ep_test_method is expected to pass. |
| The default value is a single value of True. |
| """ |
| if uuids is not None: |
| self.test_check_set_allowlist(uuids, True) |
| |
| if type(devices) is not list: |
| devices = [devices] |
| |
| if type(expected_passes) is not list: |
| expected_passes = [expected_passes] |
| |
| for device, expected_pass in zip(devices, expected_passes): |
| if device.device_type == 'BLUETOOTH_AUDIO': |
| self.initialize_bluetooth_audio(device, A2DP) |
| pre_test_method(device, expected_pass) |
| |
| for device, expected_pass in zip(devices, expected_passes): |
| self.check_if_blocked_by_policy(device, not expected_pass) |
| verifier = self.get_device_verifier(device) |
| # Whether the test should pass or fail depends on expected_pass. |
| self.expect_test(expected_pass, verifier, device) |
| |
| for device in devices: |
| self.post_test_method(device) |
| if device.device_type == 'BLUETOOTH_AUDIO': |
| self.cleanup_bluetooth_audio(device, A2DP) |
| |
| |
| @test_wrapper('Set Allowlist with Different UUIDs') |
| def ep_check_set_allowlist(self): |
| """The Enterprise Policy set valid and invalid allowlists test.""" |
| # Duplicate valid UUIDs |
| self.test_check_set_allowlist('abcd,0xabcd', True) |
| |
| # Mix of valid UUID16, UUID32, and UUID128 |
| self.test_check_set_allowlist( |
| '0xabcd,abcd1234,' |
| 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee', True) |
| |
| # Mix of valid UUID16, UUID32, and UUID128 with duplicate UUIUDs |
| self.test_check_set_allowlist( |
| 'abcd,0xabcd,abcd1234,0xabcd1234,' |
| 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee', True) |
| |
| # Single valid classic HID UUID |
| self.test_check_set_allowlist(BluetoothPolicy.UUID_HID, True) |
| |
| # Empty allowlist |
| self.test_check_set_allowlist('', True) |
| |
| # Invalid UUID should fail. |
| self.test_check_set_allowlist( |
| 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee-ffff', False) |
| |
| # Invalid UUID should fail. |
| self.test_check_set_allowlist('aaaaaaaa-bbbb-cccc-dddd', False) |
| |
| |
| @test_wrapper('Outgoing: HID: Service in Allowlist', devices={'KEYBOARD':1}) |
| def ep_outgoing_hid_service_in_allowlist(self): |
| """The test with service in allowlist for outgoing connection.""" |
| device = self.devices['KEYBOARD'][0] |
| self.run_test_method(self.ep_outgoing_connection, device, |
| uuids=BluetoothPolicy.UUID_HID, expected_passes=True) |
| |
| |
| @test_wrapper('Outgoing: Audio: Service in Allowlist', |
| devices={'BLUETOOTH_AUDIO':1}) |
| def ep_outgoing_audio_services_in_allowlist(self): |
| """The test with service in allowlist for outgoing connection.""" |
| device = self.devices['BLUETOOTH_AUDIO'][0] |
| self.run_test_method(self.ep_outgoing_connection, device, |
| uuids=BluetoothPolicy.ALLOWLIST_AUDIO, |
| expected_passes=True) |
| |
| |
| @test_wrapper('Outgoing: HID: Service not in Allowlist', |
| devices={'KEYBOARD':1}) |
| def ep_outgoing_hid_service_not_in_allowlist(self): |
| """The test with service not in allowlist for outgoing connection.""" |
| device = self.devices['KEYBOARD'][0] |
| self.run_test_method(self.ep_outgoing_connection, device, |
| uuids='0xaabb', expected_passes=False) |
| |
| |
| @test_wrapper('Outgoing: Audio: Service not in Allowlist', |
| devices={'BLUETOOTH_AUDIO':1}) |
| def ep_outgoing_audio_services_not_in_allowlist(self): |
| """The test with service not in allowlist for outgoing connection.""" |
| device = self.devices['BLUETOOTH_AUDIO'][0] |
| self.run_test_method(self.ep_outgoing_connection, |
| device, |
| uuids=BluetoothPolicy.ALLOWLIST_BLE_HID, |
| expected_passes=False) |
| |
| |
| @test_wrapper('Outgoing: HID: Empty Allowlist', |
| devices={'KEYBOARD':1}) |
| def ep_outgoing_hid_empty_allowlist(self): |
| """The test with an empty allowlist for outgoing connection.""" |
| device = self.devices['KEYBOARD'][0] |
| self.run_test_method(self.ep_outgoing_connection, device, |
| uuids='', expected_passes=True) |
| |
| |
| @test_wrapper('Outgoing: Audio: Empty Allowlist', |
| devices={'BLUETOOTH_AUDIO':1}) |
| def ep_outgoing_audio_empty_allowlist(self): |
| """The test with an empty allowlist for outgoing connection.""" |
| device = self.devices['BLUETOOTH_AUDIO'][0] |
| self.run_test_method(self.ep_outgoing_connection, device, |
| uuids='', expected_passes=True) |
| |
| |
| @test_wrapper('Incoming: HID: Service in Allowlist', |
| devices={'KEYBOARD':1}) |
| def ep_incoming_hid_service_in_allowlist(self): |
| """Service in allowlist for incoming reconnection from device.""" |
| device = self.devices['KEYBOARD'][0] |
| self.run_test_method(self.ep_incoming_connection, device, |
| uuids=BluetoothPolicy.UUID_HID, expected_passes=True) |
| |
| |
| @test_wrapper('Incoming: Audio: Service in Allowlist', |
| devices={'BLUETOOTH_AUDIO':1}) |
| def ep_incoming_audio_service_in_allowlist(self): |
| """Service in allowlist for incoming reconnection from device.""" |
| device = self.devices['BLUETOOTH_AUDIO'][0] |
| self.run_test_method(self.ep_incoming_connection, device, |
| uuids=BluetoothPolicy.ALLOWLIST_AUDIO, |
| expected_passes=True) |
| |
| |
| @test_wrapper('Incoming: HID: Service not in Allowlist', |
| devices={'KEYBOARD':1}) |
| def ep_incoming_hid_service_not_in_allowlist(self): |
| """Service not in allowlist for incoming reconnection from device.""" |
| device = self.devices['KEYBOARD'][0] |
| self.run_test_method(self.ep_incoming_connection, device, |
| uuids='0xaabb', expected_passes=False) |
| |
| |
| @test_wrapper('Incoming: Audio: Service not in Allowlist', |
| devices={'BLUETOOTH_AUDIO':1}) |
| def ep_incoming_audio_service_not_in_allowlist(self): |
| """Service not in allowlist for incoming reconnection from device.""" |
| device = self.devices['BLUETOOTH_AUDIO'][0] |
| self.run_test_method(self.ep_incoming_connection, |
| device, |
| uuids=BluetoothPolicy.ALLOWLIST_BLE_HID, |
| expected_passes=False) |
| |
| |
| @test_wrapper('Incoming: HID: Service empty Allowlist', |
| devices={'KEYBOARD':1}) |
| def ep_incoming_hid_service_empty_allowlist(self): |
| """The test with an empty allowlist for incoming connection.""" |
| device = self.devices['KEYBOARD'][0] |
| self.run_test_method(self.ep_incoming_connection, device, |
| uuids='', |
| expected_passes=True) |
| |
| |
| @test_wrapper('Incoming: Audio: Service empty Allowlist', |
| devices={'BLUETOOTH_AUDIO':1}) |
| def ep_incoming_audio_service_empty_allowlist(self): |
| """The test with an empty allowlist for incoming connection.""" |
| device = self.devices['BLUETOOTH_AUDIO'][0] |
| self.run_test_method(self.ep_incoming_connection, device, |
| uuids='', |
| expected_passes=True) |
| |
| |
| @test_wrapper('Outgoing: BLE Keyboard: Services in Allowlist', |
| devices={'BLE_KEYBOARD':1}) |
| def ep_outgoing_ble_hid_services_in_allowlist(self): |
| """The test for BLE gatt services in allowlist.""" |
| device = self.devices['BLE_KEYBOARD'][0] |
| self.run_test_method(self.ep_outgoing_connection, device, |
| uuids=BluetoothPolicy.ALLOWLIST_BLE_HID, |
| expected_passes=True) |
| |
| |
| @test_wrapper('Outgoing: BLE Keyboard: Services not in Allowlist', |
| devices={'BLE_KEYBOARD':1}) |
| def ep_outgoing_ble_hid_services_not_in_allowlist(self): |
| """The test for BLE gatt services not in allowlist.""" |
| device = self.devices['BLE_KEYBOARD'][0] |
| self.run_test_method(self.ep_outgoing_connection, |
| device, |
| uuids=BluetoothPolicy.ALLOWLIST_AUDIO, |
| expected_passes=False) |
| |
| |
| @test_wrapper('Outgoing: BLE Keyboard: Empty Allowlist', |
| devices={'BLE_KEYBOARD':1}) |
| def ep_outgoing_ble_hid_empty_allowlist(self): |
| """The test for BLE gatt services and an empty allowlist.""" |
| device = self.devices['BLE_KEYBOARD'][0] |
| self.run_test_method(self.ep_outgoing_connection, device, |
| uuids='', expected_passes=True) |
| |
| |
| @test_wrapper('Reconnection: BLE Keyboard: Service in Allowlist', |
| devices={'BLE_KEYBOARD':1}) |
| def ep_reconnection_ble_hid_service_in_allowlist(self): |
| """Service in allowlist for auto reconnection from device.""" |
| device = self.devices['BLE_KEYBOARD'][0] |
| self.run_test_method(self.ep_auto_reconnection, device, |
| uuids=BluetoothPolicy.ALLOWLIST_BLE_HID, |
| expected_passes=True) |
| |
| |
| @test_wrapper('Reconnection: BLE Keyboard: Service not in Allowlist', |
| devices={'BLE_KEYBOARD':1}) |
| def ep_reconnection_ble_hid_service_not_in_allowlist(self): |
| """Service in allowlist for auto reconnection from device.""" |
| device = self.devices['BLE_KEYBOARD'][0] |
| self.run_test_method(self.ep_auto_reconnection, |
| device, |
| uuids=BluetoothPolicy.ALLOWLIST_AUDIO, |
| expected_passes=False) |
| |
| |
| @test_wrapper('Combo: Set Allowlist and Disconnect', devices={'KEYBOARD':1}) |
| def ep_combo_set_allowlist_and_disconnect(self): |
| """Set a new allowlist and current connection should be terminated.""" |
| device = self.devices['KEYBOARD'][0] |
| self.run_test_method(self.ep_outgoing_connection, device, |
| uuids=BluetoothPolicy.UUID_HID, expected_passes=True) |
| |
| # Setting a non-HID UUID should disconnect the device. |
| self.test_check_set_allowlist('abcd', True) |
| time.sleep(self.DISCONNECT_SLEEP_SECS) |
| self.test_device_is_not_connected(device.address) |
| |
| |
| @test_wrapper('Combo: Successive Allowlist', devices={'KEYBOARD':1}) |
| def ep_combo_successive_allowlists(self): |
| """A new allowlist overwrites previoius one and allows connection.""" |
| device = self.devices['KEYBOARD'][0] |
| |
| # Setting a non-HID UUID initially. |
| self.test_check_set_allowlist('abcd', True) |
| |
| # A subsequent HID UUID should supersede the previous setting. |
| self.run_test_method(self.ep_outgoing_connection, device, |
| uuids=BluetoothPolicy.UUID_HID, expected_passes=True) |
| |
| |
| @test_wrapper('Combo: HID Allowlist Persists Adapter Reset', |
| devices={'KEYBOARD':1}) |
| def ep_combo_hid_persists_adapter_reset(self): |
| """The Allowlist with HID UUID should persist adapter reset.""" |
| device = self.devices['KEYBOARD'][0] |
| self.test_check_set_allowlist(BluetoothPolicy.UUID_HID, True) |
| self.test_reset_on_adapter() |
| self.run_test_method(self.ep_outgoing_connection, device, |
| uuids=None, expected_passes=True) |
| |
| |
| @test_wrapper('Combo: Non-HID Allowlist Persists Adapter Reset', |
| devices={'KEYBOARD':1}) |
| def ep_combo_non_hid_persists_adapter_reset(self): |
| """The Allowlist with non-HID UUID should persist adapter reset.""" |
| device = self.devices['KEYBOARD'][0] |
| self.test_check_set_allowlist('abcd', True) |
| self.test_reset_on_adapter() |
| self.run_test_method(self.ep_outgoing_connection, device, |
| uuids=None, expected_passes=False) |
| |
| |
| @test_wrapper('Combo: HID Allowlist Persists bluetoothd restart', |
| devices={'KEYBOARD':1}) |
| def ep_combo_hid_persists_bluetoothd_restart(self): |
| """The Allowlist with HID UUID should persist bluetoothd restart.""" |
| device = self.devices['KEYBOARD'][0] |
| self.test_check_set_allowlist(BluetoothPolicy.UUID_HID, True) |
| self.test_stop_bluetoothd() |
| self.test_start_bluetoothd() |
| self.run_test_method(self.ep_outgoing_connection, device, |
| uuids=None, expected_passes=True) |
| |
| |
| @test_wrapper('Combo: Non-HID Allowlist Persists bluetoothd restart', |
| devices={'KEYBOARD':1}) |
| def ep_combo_non_hid_persists_bluetoothd_restart(self): |
| """The Allowlist with non-HID UUID should persist bluetoothd restart.""" |
| device = self.devices['KEYBOARD'][0] |
| self.test_check_set_allowlist('abcd', True) |
| self.test_stop_bluetoothd() |
| self.test_start_bluetoothd() |
| self.run_test_method(self.ep_outgoing_connection, device, |
| uuids=None, expected_passes=False) |
| |
| |
| @test_wrapper('Combo: HID Allowlist Persists reboot', |
| devices={'KEYBOARD':1}) |
| def ep_combo_hid_persists_reboot(self): |
| """The Allowlist with HID UUID should persist reboot.""" |
| device = self.devices['KEYBOARD'][0] |
| self.test_check_set_allowlist(BluetoothPolicy.UUID_HID, True) |
| self.reboot() |
| self.run_test_method(self.ep_outgoing_connection, device, |
| uuids=None, expected_passes=True) |
| |
| |
| @test_wrapper('Combo: Non-HID Allowlist Persists reboot', |
| devices={'KEYBOARD':1}) |
| def ep_combo_non_hid_persists_reboot(self): |
| """The Allowlist with non-HID UUID should persist reboot.""" |
| device = self.devices['KEYBOARD'][0] |
| self.test_check_set_allowlist('aaaa', True) |
| self.reboot() |
| self.run_test_method(self.ep_outgoing_connection, device, |
| uuids=None, expected_passes=False) |
| |
| |
| @test_wrapper('MD: BLE HID and Audio: Services in Allowlist', |
| devices={'BLE_MOUSE':1, 'BLUETOOTH_AUDIO':1}) |
| def ep_md_ble_hid_and_audio_in_allowlist(self): |
| """The multi-device test for BLE HID and audio services in allowlist.""" |
| hid_device = self.devices['BLE_MOUSE'][0] |
| audio_device = self.devices['BLUETOOTH_AUDIO'][0] |
| |
| self.run_test_method(self.ep_outgoing_connection, |
| [hid_device, audio_device], |
| uuids=BluetoothPolicy.ALLOWLIST_BLE_HID_AUDIO, |
| expected_passes=[True, True]) |
| |
| |
| @test_wrapper('MD: BLE HID and Audio: Only Audio in Allowlist', |
| devices={'BLE_MOUSE':1, 'BLUETOOTH_AUDIO':1}) |
| def ep_md_audio_in_allowlist(self): |
| """The multi-device test for audio services in allowlist.""" |
| hid_device = self.devices['BLE_MOUSE'][0] |
| audio_device = self.devices['BLUETOOTH_AUDIO'][0] |
| |
| self.run_test_method(self.ep_outgoing_connection, |
| [hid_device, audio_device], |
| uuids=BluetoothPolicy.ALLOWLIST_AUDIO, |
| expected_passes=[False, True]) |
| |
| |
| @test_wrapper('MD: BLE HID and Audio: Only BLE HID in Allowlist', |
| devices={'BLE_KEYBOARD':1, 'BLUETOOTH_AUDIO':1}) |
| def ep_md_ble_hid_in_allowlist(self): |
| """The multi-device test for audio services in allowlist.""" |
| hid_device = self.devices['BLE_KEYBOARD'][0] |
| audio_device = self.devices['BLUETOOTH_AUDIO'][0] |
| |
| self.run_test_method(self.ep_outgoing_connection, |
| [hid_device, audio_device], |
| uuids=BluetoothPolicy.ALLOWLIST_BLE_HID, |
| expected_passes=[True, False]) |
| |
| |
| @test_wrapper('MD: Classic and BLE HID: Services in Allowlist', |
| devices={'BLE_KEYBOARD':1, 'MOUSE':1}) |
| def ep_md_hid_and_ble_hid_in_allowlist(self): |
| """The multi-device test for Classic and BLE HID in the allowlist.""" |
| keyboard_device = self.devices['BLE_KEYBOARD'][0] |
| mouse_device = self.devices['MOUSE'][0] |
| |
| self.run_test_method(self.ep_outgoing_connection, |
| [keyboard_device, mouse_device], |
| uuids=BluetoothPolicy.ALLOWLIST_CLASSIC_BLE_HID, |
| expected_passes=[True, True]) |
| |
| |
| @test_wrapper('MD: BLE HID and Audio: Empty Allowlist', |
| devices={'BLE_KEYBOARD':1, 'BLUETOOTH_AUDIO':1}) |
| def ep_md_ble_hid_and_audio_empty_allowlist(self): |
| """The multi-device test for BLE HID and Audio with empty allowlist.""" |
| hid_device = self.devices['BLE_KEYBOARD'][0] |
| audio_device = self.devices['BLUETOOTH_AUDIO'][0] |
| |
| self.run_test_method(self.ep_outgoing_connection, |
| [hid_device, audio_device], |
| uuids='', |
| expected_passes=[True, True]) |
| |
| |
| @batch_wrapper('EP Health') |
| def ep_health_batch_run(self, num_iterations=1, test_name=None): |
| """Run the EP health test batch or a specific given test. |
| |
| @param num_iterations: how many iterations to run |
| @param test_name: specific test to run otherwise None to run the |
| whole batch |
| """ |
| |
| self.ep_check_set_allowlist() |
| |
| self.ep_outgoing_hid_service_in_allowlist() |
| self.ep_outgoing_hid_service_not_in_allowlist() |
| self.ep_outgoing_hid_empty_allowlist() |
| |
| self.ep_outgoing_ble_hid_services_in_allowlist() |
| self.ep_outgoing_ble_hid_services_not_in_allowlist() |
| self.ep_outgoing_ble_hid_empty_allowlist() |
| |
| self.ep_incoming_hid_service_in_allowlist() |
| self.ep_incoming_hid_service_not_in_allowlist() |
| self.ep_incoming_hid_service_empty_allowlist() |
| |
| self.ep_outgoing_audio_services_in_allowlist() |
| self.ep_outgoing_audio_services_not_in_allowlist() |
| self.ep_outgoing_audio_empty_allowlist() |
| |
| self.ep_incoming_audio_service_in_allowlist() |
| self.ep_incoming_audio_service_not_in_allowlist() |
| self.ep_incoming_audio_service_empty_allowlist() |
| |
| self.ep_reconnection_ble_hid_service_in_allowlist() |
| self.ep_reconnection_ble_hid_service_not_in_allowlist() |
| |
| self.ep_combo_set_allowlist_and_disconnect() |
| self.ep_combo_successive_allowlists() |
| self.ep_combo_hid_persists_adapter_reset() |
| self.ep_combo_non_hid_persists_adapter_reset() |
| self.ep_combo_hid_persists_bluetoothd_restart() |
| self.ep_combo_non_hid_persists_bluetoothd_restart() |
| self.ep_combo_hid_persists_reboot() |
| self.ep_combo_non_hid_persists_reboot() |
| |
| self.ep_md_ble_hid_and_audio_in_allowlist() |
| self.ep_md_audio_in_allowlist() |
| self.ep_md_ble_hid_in_allowlist() |
| self.ep_md_hid_and_ble_hid_in_allowlist() |
| self.ep_md_ble_hid_and_audio_empty_allowlist() |
| |
| def run_once(self, |
| host, |
| num_iterations=1, |
| args_dict=None, |
| test_name=None, |
| flag='Quick Health'): |
| """Run the batch of Bluetooth enterprise policy health tests |
| |
| @param host: the DUT, usually a chromebook |
| @param num_iterations: the number of rounds to execute the test |
| @param test_name: the test to run, or None for all tests |
| """ |
| |
| # Initialize and run the test batch or the requested specific test |
| self.quick_test_init(host, |
| use_btpeer=True, |
| flag=flag, |
| args_dict=args_dict) |
| self.ep_health_batch_run(num_iterations, test_name) |
| self.quick_test_cleanup() |