#!/usr/bin/python3.4
#
# Copyright 2017 - The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from acts import asserts
from acts.test_utils.wifi import wifi_test_utils as wutils
from acts.test_utils.wifi.aware import aware_const as aconsts
from acts.test_utils.wifi.aware import aware_test_utils as autils
from acts.test_utils.wifi.aware.AwareBaseTest import AwareBaseTest
class NonConcurrencyTest(AwareBaseTest):
"""Tests lack of concurrency scenarios Wi-Fi Aware with WFD (p2p) and
SoftAP
Note: these tests should be modified if the concurrency behavior changes!"""
SERVICE_NAME = "GoogleTestXYZ"
TETHER_SSID = "GoogleTestSoftApXYZ"
def __init__(self, controllers):
AwareBaseTest.__init__(self, controllers)
def teardown_test(self):
AwareBaseTest.teardown_test(self)
for ad in self.android_devices:
ad.droid.wifiP2pClose()
def run_aware_then_incompat_service(self, is_p2p):
"""Run test to validate that a running Aware session terminates when an
Aware-incompatible service is started.
Args:
is_p2p: True for p2p, False for SoftAP
"""
dut = self.android_devices[0]
# start Aware
id = dut.droid.wifiAwareAttach()
autils.wait_for_event(dut, aconsts.EVENT_CB_ON_ATTACHED)
# start other service
if is_p2p:
dut.droid.wifiP2pInitialize()
else:
wutils.start_wifi_tethering(dut, self.TETHER_SSID, password=None)
# expect an announcement about Aware non-availability
autils.wait_for_event(dut, aconsts.BROADCAST_WIFI_AWARE_NOT_AVAILABLE)
# local clean-up
if not is_p2p:
wutils.stop_wifi_tethering(dut)
def run_incompat_service_then_aware(self, is_p2p):
"""Validate that if an Aware-incompatible service is already up then any
Aware operation fails"""
dut = self.android_devices[0]
# start other service
if is_p2p:
dut.droid.wifiP2pInitialize()
else:
wutils.start_wifi_tethering(dut, self.TETHER_SSID, password=None)
# expect an announcement about Aware non-availability
autils.wait_for_event(dut, aconsts.BROADCAST_WIFI_AWARE_NOT_AVAILABLE)
# try starting anyway (expect failure)
dut.droid.wifiAwareAttach()
autils.wait_for_event(dut, aconsts.EVENT_CB_ON_ATTACH_FAILED)
# stop other service
if is_p2p:
dut.droid.wifiP2pClose()
else:
wutils.stop_wifi_tethering(dut)
# expect an announcement about Aware availability
autils.wait_for_event(dut, aconsts.BROADCAST_WIFI_AWARE_AVAILABLE)
# try starting Aware
dut.droid.wifiAwareAttach()
autils.wait_for_event(dut, aconsts.EVENT_CB_ON_ATTACHED)
##########################################################################
def test_run_p2p_then_aware(self):
"""Validate that if p2p is already up then any Aware operation fails"""
self.run_incompat_service_then_aware(is_p2p=True)
def test_run_aware_then_p2p(self):
"""Validate that a running Aware session terminates when p2p is started"""
self.run_aware_then_incompat_service(is_p2p=True)
def test_run_softap_then_aware(self):
"""Validate that if SoftAp is already up then any Aware operation fails"""
self.run_incompat_service_then_aware(is_p2p=False)
def test_run_aware_then_softap(self):
"""Validate that a running Aware session terminates when softAp is
started"""
self.run_aware_then_incompat_service(is_p2p=False)