tturney | c8e17bf | 2016-07-12 10:32:42 -0700 | [diff] [blame] | 1 | #/usr/bin/env python3.4 |
| 2 | # |
| 3 | # Copyright (C) 2016 The Android Open Source Project |
| 4 | # |
| 5 | # Licensed under the Apache License, Version 2.0 (the "License"); you may not |
| 6 | # use this file except in compliance with the License. You may obtain a copy of |
| 7 | # the License at |
| 8 | # |
| 9 | # http://www.apache.org/licenses/LICENSE-2.0 |
| 10 | # |
| 11 | # Unless required by applicable law or agreed to in writing, software |
| 12 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| 13 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| 14 | # License for the specific language governing permissions and limitations under |
| 15 | # the License. |
| 16 | """ |
| 17 | Test script to test the integrity of LE scan results upon resetting the |
| 18 | Bluetooth stack. |
| 19 | """ |
| 20 | |
| 21 | import concurrent |
| 22 | import os |
| 23 | import time |
| 24 | |
| 25 | from queue import Empty |
| 26 | from acts.test_utils.bt.BluetoothBaseTest import BluetoothBaseTest |
| 27 | from acts.test_utils.bt.BleEnum import AdvertiseSettingsAdvertiseMode |
| 28 | from acts.test_utils.bt.BleEnum import ScanSettingsCallbackType |
| 29 | from acts.test_utils.bt.BleEnum import ScanSettingsScanMode |
| 30 | from acts.test_utils.bt.bt_test_utils import BtTestUtilsError |
| 31 | from acts.test_utils.bt.bt_test_utils import adv_succ |
| 32 | from acts.test_utils.bt.bt_test_utils import generate_ble_advertise_objects |
| 33 | from acts.test_utils.bt.bt_test_utils import generate_ble_scan_objects |
| 34 | from acts.test_utils.bt.bt_test_utils import get_advanced_droid_list |
| 35 | from acts.test_utils.bt.bt_test_utils import reset_bluetooth |
| 36 | from acts.test_utils.bt.bt_test_utils import scan_result |
| 37 | from acts.test_utils.bt.bt_test_utils import setup_n_advertisements |
| 38 | from acts.test_utils.bt.bt_test_utils import take_btsnoop_logs |
| 39 | from acts.test_utils.bt.bt_test_utils import teardown_n_advertisements |
| 40 | from acts.test_utils.bt.bt_test_utils import scan_and_verify_n_advertisements |
| 41 | |
| 42 | |
| 43 | class ConcurrentBleAdvertisementDiscoveryTest(BluetoothBaseTest): |
| 44 | default_timeout = 10 |
| 45 | max_advertisements = -1 |
| 46 | advertise_callback_list = [] |
| 47 | |
| 48 | def __init__(self, controllers): |
| 49 | BluetoothBaseTest.__init__(self, controllers) |
| 50 | self.droid_list = get_advanced_droid_list(self.android_devices) |
| 51 | self.scn_ad = self.android_devices[0] |
| 52 | self.adv_ad = self.android_devices[1] |
| 53 | self.max_advertisements = self.droid_list[1]['max_advertisements'] |
| 54 | |
| 55 | def setup_test(self): |
| 56 | return reset_bluetooth(self.android_devices) |
| 57 | |
| 58 | def setup_test(self): |
tturney | f02ac39 | 2016-09-21 10:37:35 -0700 | [diff] [blame^] | 59 | super(BluetoothBaseTest, self).setup_test() |
tturney | c8e17bf | 2016-07-12 10:32:42 -0700 | [diff] [blame] | 60 | self.log.info("Setting up advertisements") |
| 61 | try: |
| 62 | self.advertise_callback_list = setup_n_advertisements( |
| 63 | self.adv_ad, self.max_advertisements) |
| 64 | except BtTestUtilsError: |
| 65 | return False |
| 66 | return True |
| 67 | |
| 68 | def teardown_test(self): |
tturney | f02ac39 | 2016-09-21 10:37:35 -0700 | [diff] [blame^] | 69 | super(BluetoothBaseTest, self).teardown_test() |
tturney | c8e17bf | 2016-07-12 10:32:42 -0700 | [diff] [blame] | 70 | self.log.info("Tearing down advertisements") |
| 71 | teardown_n_advertisements(self.adv_ad, |
| 72 | len(self.advertise_callback_list), |
| 73 | self.advertise_callback_list) |
| 74 | return True |
| 75 | |
| 76 | @BluetoothBaseTest.bt_test_wrap |
| 77 | def test_max_advertisements_defaults(self): |
| 78 | """Test scan integrity after BT state is reset |
| 79 | |
| 80 | This test is to verify that LE devices are found |
| 81 | successfully after the Bluetooth stack is |
| 82 | reset. This is repeated multiple times in order |
| 83 | to verify that LE devices are not lost in scanning |
| 84 | when the stack is brought back up. |
| 85 | |
| 86 | Steps: |
| 87 | 1. Pre-Condition: Max advertisements are active |
| 88 | 2. With the DUT android device, scan for all advertisements |
| 89 | and verify that all expected advertisements are found. |
| 90 | 3. Reset Bluetooth on DUT. |
| 91 | 4. Repeat steps 2-3 for defined iterations |
| 92 | |
| 93 | Expected Result: |
| 94 | All expected advertisements should be found on all iterations. |
| 95 | |
| 96 | Returns: |
| 97 | Pass if True |
| 98 | Fail if False |
| 99 | |
| 100 | TAGS: LE, Advertising, Concurrency, Scanning |
| 101 | Priority: 2 |
| 102 | """ |
| 103 | self.scn_ad.droid.bleBuildScanFilter(filter_list) |
| 104 | self.scn_ad.droid.bleSetScanSettingsCallbackType( |
| 105 | ScanSettingsCallbackType.CALLBACK_TYPE_ALL_MATCHES.value) |
| 106 | self.scn_ad.droid.bleSetScanSettingsScanMode( |
| 107 | ScanSettingsScanMode.SCAN_MODE_LOW_LATENCY.value) |
| 108 | iterations = 20 |
| 109 | for _ in range(iterations): |
| 110 | self.log.info("Verify all advertisements found") |
| 111 | try: |
| 112 | if not scan_and_verify_n_advertisements( |
| 113 | self.scn_ad, self.max_advertisements): |
| 114 | self.log.error("Failed to find all advertisements") |
| 115 | return False |
| 116 | except BtTestUtilsError: |
| 117 | return False |
| 118 | if not reset_bluetooth([self.scn_ad]): |
| 119 | self.log.error("Failed to reset Bluetooth state") |
| 120 | return False |
| 121 | return True |