Home | History | Annotate | Download | only in stress
      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