1 #!/usr/bin/python3.4 2 # 3 # Copyright 2017 - The Android Open Source Project 4 # 5 # Licensed under the Apache License, Version 2.0 (the "License"); 6 # you may not use this file except in compliance with the License. 7 # You may obtain a copy of 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, 13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 # See the License for the specific language governing permissions and 15 # limitations under the License. 16 17 import queue 18 19 from acts import asserts 20 from acts.test_decorators import test_tracker_info 21 from acts.test_utils.wifi.aware import aware_const as aconsts 22 from acts.test_utils.wifi.aware import aware_test_utils as autils 23 from acts.test_utils.wifi.aware.AwareBaseTest import AwareBaseTest 24 25 26 class DiscoveryStressTest(AwareBaseTest): 27 """Stress tests for Discovery sessions""" 28 29 # Number of iterations on create/destroy Attach sessions. 30 ATTACH_ITERATIONS = 2 31 32 # Number of iterations on create/destroy Discovery sessions 33 DISCOVERY_ITERATIONS = 40 34 35 def __init__(self, controllers): 36 AwareBaseTest.__init__(self, controllers) 37 38 #################################################################### 39 40 @test_tracker_info(uuid="783791e5-7726-44e0-ac5b-98c1dbf493cb") 41 def test_discovery_stress(self): 42 """Create and destroy a random array of discovery sessions, up to the 43 limit of capabilities.""" 44 dut = self.android_devices[0] 45 46 discovery_setup_success = 0 47 discovery_setup_fail = 0 48 49 for attach_iter in range(self.ATTACH_ITERATIONS): 50 # attach 51 session_id = dut.droid.wifiAwareAttach(True) 52 autils.wait_for_event(dut, aconsts.EVENT_CB_ON_ATTACHED) 53 54 p_discovery_ids = [] 55 s_discovery_ids = [] 56 for discovery_iter in range(self.DISCOVERY_ITERATIONS): 57 service_name = 'GoogleTestService-%d-%d' % (attach_iter, discovery_iter) 58 59 p_config = None 60 s_config = None 61 62 if discovery_iter % 4 == 0: # publish/unsolicited 63 p_config = autils.create_discovery_config( 64 service_name, aconsts.PUBLISH_TYPE_UNSOLICITED) 65 elif discovery_iter % 4 == 1: # publish/solicited 66 p_config = autils.create_discovery_config( 67 service_name, aconsts.PUBLISH_TYPE_SOLICITED) 68 elif discovery_iter % 4 == 2: # subscribe/passive 69 s_config = autils.create_discovery_config( 70 service_name, aconsts.SUBSCRIBE_TYPE_PASSIVE) 71 elif discovery_iter % 4 == 3: # subscribe/active 72 s_config = autils.create_discovery_config( 73 service_name, aconsts.SUBSCRIBE_TYPE_ACTIVE) 74 75 if p_config is not None: 76 if len(p_discovery_ids) == dut.aware_capabilities[ 77 aconsts.CAP_MAX_PUBLISHES]: 78 dut.droid.wifiAwareDestroyDiscoverySession( 79 p_discovery_ids.pop(dut.aware_capabilities[ 80 aconsts.CAP_MAX_PUBLISHES] // 2)) 81 disc_id = dut.droid.wifiAwarePublish(session_id, p_config) 82 event_name = aconsts.SESSION_CB_ON_PUBLISH_STARTED 83 p_discovery_ids.append(disc_id) 84 else: 85 if len(s_discovery_ids) == dut.aware_capabilities[ 86 aconsts.CAP_MAX_SUBSCRIBES]: 87 dut.droid.wifiAwareDestroyDiscoverySession( 88 s_discovery_ids.pop(dut.aware_capabilities[ 89 aconsts.CAP_MAX_SUBSCRIBES] // 2)) 90 disc_id = dut.droid.wifiAwareSubscribe(session_id, s_config) 91 event_name = aconsts.SESSION_CB_ON_SUBSCRIBE_STARTED 92 s_discovery_ids.append(disc_id) 93 94 try: 95 dut.ed.pop_event(event_name, autils.EVENT_TIMEOUT) 96 discovery_setup_success = discovery_setup_success + 1 97 except queue.Empty: 98 discovery_setup_fail = discovery_setup_fail + 1 99 100 dut.droid.wifiAwareDestroy(session_id) 101 102 results = {} 103 results['discovery_setup_success'] = discovery_setup_success 104 results['discovery_setup_fail'] = discovery_setup_fail 105 asserts.assert_equal(discovery_setup_fail, 0, 106 'Discovery setup failures', extras=results) 107 asserts.explicit_pass('test_discovery_stress done', extras=results) 108