blob: 2e2be83587e7bfceafa275575cb81b812d74d18c [file] [log] [blame]
Mark De Ruyterd9c540a2018-05-04 11:21:55 -07001#!/usr/bin/env python3
tturneyc8e17bf2016-07-12 10:32:42 -07002#
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"""
17Test script to test the integrity of LE scan results upon resetting the
18Bluetooth stack.
19"""
20
21import concurrent
22import os
23import time
24
25from queue import Empty
tturney31ae5b62017-07-21 15:48:35 -070026from acts.test_decorators import test_tracker_info
Xianyuan Jia63751fb2020-11-17 00:07:40 +000027from acts_contrib.test_utils.bt.BluetoothBaseTest import BluetoothBaseTest
28from acts_contrib.test_utils.bt.bt_constants import ble_advertise_settings_modes
29from acts_contrib.test_utils.bt.bt_constants import ble_scan_settings_callback_types
30from acts_contrib.test_utils.bt.bt_constants import ble_scan_settings_modes
31from acts_contrib.test_utils.bt.bt_constants import adv_succ
32from acts_contrib.test_utils.bt.bt_constants import scan_result
33from acts_contrib.test_utils.bt.bt_test_utils import BtTestUtilsError
34from acts_contrib.test_utils.bt.bt_test_utils import generate_ble_advertise_objects
35from acts_contrib.test_utils.bt.bt_test_utils import generate_ble_scan_objects
36from acts_contrib.test_utils.bt.bt_test_utils import get_advanced_droid_list
37from acts_contrib.test_utils.bt.bt_test_utils import reset_bluetooth
38from acts_contrib.test_utils.bt.bt_test_utils import setup_n_advertisements
39from acts_contrib.test_utils.bt.bt_test_utils import take_btsnoop_logs
40from acts_contrib.test_utils.bt.bt_test_utils import teardown_n_advertisements
41from acts_contrib.test_utils.bt.bt_test_utils import scan_and_verify_n_advertisements
tturneyc8e17bf2016-07-12 10:32:42 -070042
43
44class ConcurrentBleAdvertisementDiscoveryTest(BluetoothBaseTest):
45 default_timeout = 10
Aidan Holloway-bidwell35220552019-07-09 18:20:16 -070046 droid_list = []
tturneyc8e17bf2016-07-12 10:32:42 -070047 max_advertisements = -1
48 advertise_callback_list = []
49
Aidan Holloway-bidwell35220552019-07-09 18:20:16 -070050 def setup_class(self):
51 super().setup_class()
Xianyuan Jiaa31e5812019-09-05 17:16:23 -070052 self.scn_ad = self.android_devices[0]
53 self.adv_ad = self.android_devices[1]
Aidan Holloway-bidwell35220552019-07-09 18:20:16 -070054 self.droid_list = get_advanced_droid_list(self.android_devices)
tturneyc8e17bf2016-07-12 10:32:42 -070055 self.max_advertisements = self.droid_list[1]['max_advertisements']
56
57 def setup_test(self):
Aidan Holloway-bidwell35220552019-07-09 18:20:16 -070058 super().setup_test()
tturneyc8e17bf2016-07-12 10:32:42 -070059 self.log.info("Setting up advertisements")
Aidan Holloway-bidwell35220552019-07-09 18:20:16 -070060 reset_bluetooth(self.android_devices)
tturneyc8e17bf2016-07-12 10:32:42 -070061 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):
tturneyf02ac392016-09-21 10:37:35 -070069 super(BluetoothBaseTest, self).teardown_test()
tturneyc8e17bf2016-07-12 10:32:42 -070070 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
tturney31ae5b62017-07-21 15:48:35 -070077 @test_tracker_info(uuid='e02d6ca6-4db3-4a1d-adaf-98db7c7c2c7a')
tturneyc8e17bf2016-07-12 10:32:42 -070078 def test_max_advertisements_defaults(self):
79 """Test scan integrity after BT state is reset
80
81 This test is to verify that LE devices are found
82 successfully after the Bluetooth stack is
83 reset. This is repeated multiple times in order
84 to verify that LE devices are not lost in scanning
85 when the stack is brought back up.
86
87 Steps:
88 1. Pre-Condition: Max advertisements are active
89 2. With the DUT android device, scan for all advertisements
90 and verify that all expected advertisements are found.
91 3. Reset Bluetooth on DUT.
92 4. Repeat steps 2-3 for defined iterations
93
94 Expected Result:
95 All expected advertisements should be found on all iterations.
96
97 Returns:
98 Pass if True
99 Fail if False
100
101 TAGS: LE, Advertising, Concurrency, Scanning
102 Priority: 2
103 """
tturney31ae5b62017-07-21 15:48:35 -0700104 filter_list = self.scn_ad.droid.bleGenFilterList()
tturneyc8e17bf2016-07-12 10:32:42 -0700105 self.scn_ad.droid.bleBuildScanFilter(filter_list)
106 self.scn_ad.droid.bleSetScanSettingsCallbackType(
tturney31ae5b62017-07-21 15:48:35 -0700107 ble_scan_settings_callback_types['all_matches'])
108 self.scn_ad.droid.bleSetScanSettingsScanMode(ble_scan_settings_modes[
109 'low_latency'])
tturneyc8e17bf2016-07-12 10:32:42 -0700110 iterations = 20
111 for _ in range(iterations):
112 self.log.info("Verify all advertisements found")
113 try:
114 if not scan_and_verify_n_advertisements(
115 self.scn_ad, self.max_advertisements):
116 self.log.error("Failed to find all advertisements")
117 return False
118 except BtTestUtilsError:
119 return False
120 if not reset_bluetooth([self.scn_ad]):
121 self.log.error("Failed to reset Bluetooth state")
122 return False
123 return True