blob: e8cccc2193c4139617af5170954bb73dc9d065f3 [file] [log] [blame]
tturneyc8e17bf2016-07-12 10:32:42 -07001#/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"""
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
26from acts.test_utils.bt.BluetoothBaseTest import BluetoothBaseTest
27from acts.test_utils.bt.BleEnum import AdvertiseSettingsAdvertiseMode
28from acts.test_utils.bt.BleEnum import ScanSettingsCallbackType
29from acts.test_utils.bt.BleEnum import ScanSettingsScanMode
30from acts.test_utils.bt.bt_test_utils import BtTestUtilsError
31from acts.test_utils.bt.bt_test_utils import adv_succ
32from acts.test_utils.bt.bt_test_utils import generate_ble_advertise_objects
33from acts.test_utils.bt.bt_test_utils import generate_ble_scan_objects
34from acts.test_utils.bt.bt_test_utils import get_advanced_droid_list
35from acts.test_utils.bt.bt_test_utils import reset_bluetooth
36from acts.test_utils.bt.bt_test_utils import scan_result
37from acts.test_utils.bt.bt_test_utils import setup_n_advertisements
38from acts.test_utils.bt.bt_test_utils import take_btsnoop_logs
39from acts.test_utils.bt.bt_test_utils import teardown_n_advertisements
40from acts.test_utils.bt.bt_test_utils import scan_and_verify_n_advertisements
41
42
43class 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):
tturneyf02ac392016-09-21 10:37:35 -070059 super(BluetoothBaseTest, self).setup_test()
tturneyc8e17bf2016-07-12 10:32:42 -070060 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):
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
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