Home | History | Annotate | Download | only in ota
      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 time
     18 
     19 from acts import asserts
     20 from acts.test_utils.wifi.aware import aware_const as aconsts
     21 from acts.test_utils.wifi.aware import aware_test_utils as autils
     22 from acts.test_utils.wifi.aware.AwareBaseTest import AwareBaseTest
     23 
     24 
     25 class ServiceIdsTest(AwareBaseTest):
     26   """Set of tests for Wi-Fi Aware to verify that beacons include service IDs
     27   for discovery.
     28 
     29   Note: this test is an OTA (over-the-air) and requires a Sniffer.
     30   """
     31 
     32   def __init__(self, controllers):
     33     AwareBaseTest.__init__(self, controllers)
     34 
     35   def start_discovery_session(self, dut, session_id, is_publish, dtype,
     36                               service_name):
     37     """Start a discovery session
     38 
     39     Args:
     40       dut: Device under test
     41       session_id: ID of the Aware session in which to start discovery
     42       is_publish: True for a publish session, False for subscribe session
     43       dtype: Type of the discovery session
     44       service_name: Service name to use for the discovery session
     45 
     46     Returns:
     47       Discovery session ID.
     48     """
     49     config = {}
     50     config[aconsts.DISCOVERY_KEY_DISCOVERY_TYPE] = dtype
     51     config[aconsts.DISCOVERY_KEY_SERVICE_NAME] = service_name
     52 
     53     if is_publish:
     54       disc_id = dut.droid.wifiAwarePublish(session_id, config)
     55       event_name = aconsts.SESSION_CB_ON_PUBLISH_STARTED
     56     else:
     57       disc_id = dut.droid.wifiAwareSubscribe(session_id, config)
     58       event_name = aconsts.SESSION_CB_ON_SUBSCRIBE_STARTED
     59 
     60     autils.wait_for_event(dut, event_name)
     61     return disc_id
     62 
     63   ####################################################################
     64 
     65   def test_service_ids_in_beacon(self):
     66     """Verify that beacons include service IDs for both publish and subscribe
     67     sessions of all types: solicited/unsolicited/active/passive."""
     68     dut = self.android_devices[0]
     69 
     70     self.log.info("Reminder: start a sniffer before running test")
     71 
     72     # attach
     73     session_id = dut.droid.wifiAwareAttach(True)
     74     autils.wait_for_event(dut, aconsts.EVENT_CB_ON_ATTACHED)
     75     ident_event = autils.wait_for_event(dut,
     76                                         aconsts.EVENT_CB_ON_IDENTITY_CHANGED)
     77     mac = ident_event["data"]["mac"]
     78     self.log.info("Source MAC Address of 'interesting' packets = %s", mac)
     79     self.log.info("Wireshark filter = 'wlan.ta == %s:%s:%s:%s:%s:%s'", mac[0:2],
     80                   mac[2:4], mac[4:6], mac[6:8], mac[8:10], mac[10:12])
     81 
     82     time.sleep(5)  # get some samples pre-discovery
     83 
     84     # start 4 discovery session (one of each type)
     85     self.start_discovery_session(dut, session_id, True,
     86                                  aconsts.PUBLISH_TYPE_UNSOLICITED,
     87                                  "GoogleTestService-Pub-Unsolicited")
     88     self.start_discovery_session(dut, session_id, True,
     89                                  aconsts.PUBLISH_TYPE_SOLICITED,
     90                                  "GoogleTestService-Pub-Solicited")
     91     self.start_discovery_session(dut, session_id, False,
     92                                  aconsts.SUBSCRIBE_TYPE_ACTIVE,
     93                                  "GoogleTestService-Sub-Active")
     94     self.start_discovery_session(dut, session_id, False,
     95                                  aconsts.SUBSCRIBE_TYPE_PASSIVE,
     96                                  "GoogleTestService-Sub-Passive")
     97 
     98     time.sleep(15)  # get some samples while discovery is alive
     99 
    100     self.log.info("Reminder: stop sniffer")
    101