• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
17import time
18
19from acts import asserts
20from acts.test_utils.wifi.aware import aware_const as aconsts
21from acts.test_utils.wifi.aware import aware_test_utils as autils
22from acts.test_utils.wifi.aware.AwareBaseTest import AwareBaseTest
23
24
25class 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(
76            dut, 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'",
80                      mac[0:2], mac[2:4], mac[4:6], mac[6:8], mac[8:10],
81                      mac[10:12])
82
83        time.sleep(5)  # get some samples pre-discovery
84
85        # start 4 discovery session (one of each type)
86        self.start_discovery_session(dut, session_id, True,
87                                     aconsts.PUBLISH_TYPE_UNSOLICITED,
88                                     "GoogleTestService-Pub-Unsolicited")
89        self.start_discovery_session(dut, session_id, True,
90                                     aconsts.PUBLISH_TYPE_SOLICITED,
91                                     "GoogleTestService-Pub-Solicited")
92        self.start_discovery_session(dut, session_id, False,
93                                     aconsts.SUBSCRIBE_TYPE_ACTIVE,
94                                     "GoogleTestService-Sub-Active")
95        self.start_discovery_session(dut, session_id, False,
96                                     aconsts.SUBSCRIBE_TYPE_PASSIVE,
97                                     "GoogleTestService-Sub-Passive")
98
99        time.sleep(15)  # get some samples while discovery is alive
100
101        self.log.info("Reminder: stop sniffer")
102