306 lines
14 KiB
Python
306 lines
14 KiB
Python
|
|
#!/usr/bin/env python3
|
||
|
|
#
|
||
|
|
# Copyright 2018 - 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.
|
||
|
|
|
||
|
|
import time
|
||
|
|
import acts
|
||
|
|
|
||
|
|
from acts import asserts
|
||
|
|
from acts import signals
|
||
|
|
from acts import utils
|
||
|
|
from acts.test_decorators import test_tracker_info
|
||
|
|
from acts_contrib.test_utils.tel.tel_wifi_utils import WIFI_CONFIG_APBAND_2G
|
||
|
|
from acts_contrib.test_utils.tel.tel_wifi_utils import WIFI_CONFIG_APBAND_5G
|
||
|
|
from WifiStaApConcurrencyTest import WifiStaApConcurrencyTest
|
||
|
|
import acts_contrib.test_utils.wifi.wifi_test_utils as wutils
|
||
|
|
|
||
|
|
WifiEnums = wutils.WifiEnums
|
||
|
|
DEFAULT_TIMEOUT = 10
|
||
|
|
|
||
|
|
# Channels to configure the AP for various test scenarios.
|
||
|
|
WIFI_NETWORK_AP_CHANNEL_2G = 1
|
||
|
|
WIFI_NETWORK_AP_CHANNEL_5G = 36
|
||
|
|
WIFI_NETWORK_AP_CHANNEL_5G_DFS = 132
|
||
|
|
|
||
|
|
|
||
|
|
class WifiStaApConcurrencyStressTest(WifiStaApConcurrencyTest):
|
||
|
|
"""Stress tests for STA + AP concurrency scenarios.
|
||
|
|
|
||
|
|
Test Bed Requirement:
|
||
|
|
* At least two Android devices (For AP)
|
||
|
|
* One Wi-Fi network visible to the device (for STA).
|
||
|
|
"""
|
||
|
|
|
||
|
|
def __init__(self, controllers):
|
||
|
|
WifiStaApConcurrencyTest.__init__(self, controllers)
|
||
|
|
self.tests = (
|
||
|
|
"test_stress_wifi_connection_2G_softap_2G",
|
||
|
|
"test_stress_wifi_connection_5G_softap_5G",
|
||
|
|
"test_stress_wifi_connection_5G_DFS_softap_5G",
|
||
|
|
"test_stress_wifi_connection_5G_softap_2G",
|
||
|
|
"test_stress_wifi_connection_5G_DFS_softap_2G",
|
||
|
|
"test_stress_wifi_connection_2G_softap_5G",
|
||
|
|
"test_stress_wifi_connection_5G_softap_2G_with_location_scan_on",
|
||
|
|
"test_stress_softap_2G_wifi_connection_2G",
|
||
|
|
"test_stress_softap_5G_wifi_connection_5G",
|
||
|
|
"test_stress_softap_5G_wifi_connection_5G_DFS",
|
||
|
|
"test_stress_softap_5G_wifi_connection_2G",
|
||
|
|
"test_stress_softap_2G_wifi_connection_5G",
|
||
|
|
"test_stress_softap_2G_wifi_connection_5G_DFS",
|
||
|
|
"test_stress_softap_5G_wifi_connection_2G_with_location_scan_on",
|
||
|
|
"test_2g_sta_mode_and_hotspot_5g_on_off_stress_under_airplane_mode"
|
||
|
|
)
|
||
|
|
|
||
|
|
def setup_class(self):
|
||
|
|
super().setup_class()
|
||
|
|
opt_param = ["stress_count"]
|
||
|
|
self.unpack_userparams(opt_param_names=opt_param)
|
||
|
|
|
||
|
|
def setup_test(self):
|
||
|
|
super().setup_test()
|
||
|
|
for ad in self.android_devices:
|
||
|
|
ad.droid.wakeLockAcquireBright()
|
||
|
|
ad.droid.wakeUpNow()
|
||
|
|
wutils.wifi_toggle_state(self.dut, True)
|
||
|
|
|
||
|
|
def teardown_test(self):
|
||
|
|
super().teardown_test()
|
||
|
|
for ad in self.android_devices:
|
||
|
|
ad.droid.wakeLockRelease()
|
||
|
|
ad.droid.goToSleepNow()
|
||
|
|
if self.dut.droid.wifiIsApEnabled():
|
||
|
|
wutils.stop_wifi_tethering(self.dut)
|
||
|
|
for ad in self.android_devices:
|
||
|
|
wutils.reset_wifi(ad)
|
||
|
|
self.log.debug("Toggling Airplane mode OFF")
|
||
|
|
asserts.assert_true(
|
||
|
|
acts.utils.force_airplane_mode(self.dut, False),
|
||
|
|
"Can not turn airplane mode off: %s" % self.dut.serial)
|
||
|
|
|
||
|
|
"""Helper Functions"""
|
||
|
|
|
||
|
|
def connect_to_wifi_network_and_verify(self, params):
|
||
|
|
"""Connection logic for open and psk wifi networks.
|
||
|
|
Args:
|
||
|
|
params: A tuple of network info and AndroidDevice object.
|
||
|
|
"""
|
||
|
|
network, ad = params
|
||
|
|
SSID = network[WifiEnums.SSID_KEY]
|
||
|
|
wutils.reset_wifi(ad)
|
||
|
|
wutils.connect_to_wifi_network(ad, network)
|
||
|
|
if len(self.android_devices) > 2:
|
||
|
|
wutils.reset_wifi(self.android_devices[2])
|
||
|
|
wutils.connect_to_wifi_network(self.android_devices[2], network)
|
||
|
|
|
||
|
|
def verify_wifi_full_on_off(self, network, softap_config):
|
||
|
|
wutils.wifi_toggle_state(self.dut, True)
|
||
|
|
self.connect_to_wifi_network_and_verify((network, self.dut))
|
||
|
|
if len(self.android_devices) > 2:
|
||
|
|
self.log.info(
|
||
|
|
"Testbed has extra android devices, do more validation")
|
||
|
|
self.verify_traffic_between_dut_clients(self.dut,
|
||
|
|
self.android_devices[2])
|
||
|
|
wutils.wifi_toggle_state(self.dut, False)
|
||
|
|
|
||
|
|
def verify_softap_full_on_off(self, network, softap_band):
|
||
|
|
softap_config = self.start_softap_and_verify(softap_band)
|
||
|
|
if len(self.android_devices) > 2:
|
||
|
|
self.log.info(
|
||
|
|
"Testbed has extra android devices, do more validation")
|
||
|
|
self.verify_traffic_between_dut_clients(self.dut_client,
|
||
|
|
self.android_devices[2])
|
||
|
|
wutils.reset_wifi(self.dut_client)
|
||
|
|
if len(self.android_devices) > 2:
|
||
|
|
wutils.reset_wifi(self.android_devices[2])
|
||
|
|
wutils.stop_wifi_tethering(self.dut)
|
||
|
|
|
||
|
|
"""Tests"""
|
||
|
|
|
||
|
|
@test_tracker_info(uuid="615997cc-8290-4af3-b3ac-1f5bd5af6ed1")
|
||
|
|
def test_stress_wifi_connection_2G_softap_2G(self):
|
||
|
|
"""Tests connection to 2G network the enable/disable SoftAp on 2G N times.
|
||
|
|
"""
|
||
|
|
self.configure_ap(channel_2g=WIFI_NETWORK_AP_CHANNEL_2G)
|
||
|
|
wutils.wifi_toggle_state(self.dut, True)
|
||
|
|
self.connect_to_wifi_network_and_verify((self.open_2g, self.dut))
|
||
|
|
for count in range(self.stress_count):
|
||
|
|
self.log.info("Iteration %d", count + 1)
|
||
|
|
self.verify_softap_full_on_off(self.open_2g, WIFI_CONFIG_APBAND_2G)
|
||
|
|
|
||
|
|
@test_tracker_info(uuid="03362d54-a624-4fb8-ad97-7abb9e6f655c")
|
||
|
|
def test_stress_wifi_connection_5G_softap_5G(self):
|
||
|
|
"""Tests connection to 5G network followed by bringing up SoftAp on 5G.
|
||
|
|
"""
|
||
|
|
self.configure_ap(channel_5g=WIFI_NETWORK_AP_CHANNEL_5G)
|
||
|
|
wutils.wifi_toggle_state(self.dut, True)
|
||
|
|
self.connect_to_wifi_network_and_verify((self.open_5g, self.dut))
|
||
|
|
for count in range(self.stress_count):
|
||
|
|
self.log.info("Iteration %d", count + 1)
|
||
|
|
self.verify_softap_full_on_off(self.open_5g, WIFI_CONFIG_APBAND_5G)
|
||
|
|
|
||
|
|
@test_tracker_info(uuid="fdda4ff2-38d5-4398-9a59-c7cee407a2b3")
|
||
|
|
def test_stress_wifi_connection_5G_DFS_softap_5G(self):
|
||
|
|
"""Tests connection to 5G DFS network followed by bringing up SoftAp on 5G.
|
||
|
|
"""
|
||
|
|
self.configure_ap(channel_5g=WIFI_NETWORK_AP_CHANNEL_5G_DFS)
|
||
|
|
wutils.wifi_toggle_state(self.dut, True)
|
||
|
|
self.connect_to_wifi_network_and_verify((self.open_5g, self.dut))
|
||
|
|
for count in range(self.stress_count):
|
||
|
|
self.log.info("Iteration %d", count + 1)
|
||
|
|
self.verify_softap_full_on_off(self.open_5g, WIFI_CONFIG_APBAND_5G)
|
||
|
|
|
||
|
|
@test_tracker_info(uuid="b3621721-7714-43eb-8438-b578164b9194")
|
||
|
|
def test_stress_wifi_connection_5G_softap_2G(self):
|
||
|
|
"""Tests connection to 5G network followed by bringing up SoftAp on 2G.
|
||
|
|
"""
|
||
|
|
self.configure_ap(channel_5g=WIFI_NETWORK_AP_CHANNEL_5G)
|
||
|
|
wutils.wifi_toggle_state(self.dut, True)
|
||
|
|
self.connect_to_wifi_network_and_verify((self.open_5g, self.dut))
|
||
|
|
for count in range(self.stress_count):
|
||
|
|
self.log.info("Iteration %d", count + 1)
|
||
|
|
self.verify_softap_full_on_off(self.open_5g, WIFI_CONFIG_APBAND_2G)
|
||
|
|
|
||
|
|
@test_tracker_info(uuid="bde1443f-f912-408e-b01a-537548dd023c")
|
||
|
|
def test_stress_wifi_connection_5G_DFS_softap_2G(self):
|
||
|
|
"""Tests connection to 5G DFS network followed by bringing up SoftAp on 2G.
|
||
|
|
"""
|
||
|
|
self.configure_ap(channel_5g=WIFI_NETWORK_AP_CHANNEL_5G_DFS)
|
||
|
|
wutils.wifi_toggle_state(self.dut, True)
|
||
|
|
self.connect_to_wifi_network_and_verify((self.open_5g, self.dut))
|
||
|
|
for count in range(self.stress_count):
|
||
|
|
self.verify_softap_full_on_off(self.open_5g, WIFI_CONFIG_APBAND_2G)
|
||
|
|
|
||
|
|
@test_tracker_info(uuid="2b6a891a-e0d6-4660-abf6-579099ce6924")
|
||
|
|
def test_stress_wifi_connection_2G_softap_5G(self):
|
||
|
|
"""Tests connection to 2G network followed by bringing up SoftAp on 5G.
|
||
|
|
"""
|
||
|
|
self.configure_ap(channel_2g=WIFI_NETWORK_AP_CHANNEL_2G)
|
||
|
|
wutils.wifi_toggle_state(self.dut, True)
|
||
|
|
self.connect_to_wifi_network_and_verify((self.open_2g, self.dut))
|
||
|
|
for count in range(self.stress_count):
|
||
|
|
self.log.info("Iteration %d", count + 1)
|
||
|
|
self.verify_softap_full_on_off(self.open_2g, WIFI_CONFIG_APBAND_5G)
|
||
|
|
|
||
|
|
@test_tracker_info(uuid="f28abf22-9df0-4500-b342-6682ca305e60")
|
||
|
|
def test_stress_wifi_connection_5G_softap_2G_with_location_scan_on(self):
|
||
|
|
"""Tests connection to 5G network followed by bringing up SoftAp on 2G
|
||
|
|
with location scans turned on.
|
||
|
|
"""
|
||
|
|
self.configure_ap(channel_5g=WIFI_NETWORK_AP_CHANNEL_5G)
|
||
|
|
self.turn_location_on_and_scan_toggle_on()
|
||
|
|
wutils.wifi_toggle_state(self.dut, True)
|
||
|
|
self.connect_to_wifi_network_and_verify((self.open_5g, self.dut))
|
||
|
|
for count in range(self.stress_count):
|
||
|
|
self.log.info("Iteration %d", count + 1)
|
||
|
|
self.verify_softap_full_on_off(self.open_5g, WIFI_CONFIG_APBAND_2G)
|
||
|
|
|
||
|
|
@test_tracker_info(uuid="0edb1500-6c60-442e-9268-a2ad9ee2b55c")
|
||
|
|
def test_stress_softap_2G_wifi_connection_2G(self):
|
||
|
|
"""Tests enable SoftAp on 2G then connection/disconnection to 2G network for N times.
|
||
|
|
"""
|
||
|
|
self.configure_ap(channel_2g=WIFI_NETWORK_AP_CHANNEL_2G)
|
||
|
|
softap_config = self.start_softap_and_verify(WIFI_CONFIG_APBAND_2G,
|
||
|
|
check_connectivity=False)
|
||
|
|
for count in range(self.stress_count):
|
||
|
|
self.log.info("Iteration %d", count + 1)
|
||
|
|
self.verify_wifi_full_on_off(self.open_2g, softap_config)
|
||
|
|
|
||
|
|
@test_tracker_info(uuid="162a6679-edd5-4daa-9f25-75d79cf4bb4a")
|
||
|
|
def test_stress_softap_5G_wifi_connection_5G(self):
|
||
|
|
"""Tests enable SoftAp on 5G then connection/disconnection to 5G network for N times.
|
||
|
|
"""
|
||
|
|
self.configure_ap(channel_5g=WIFI_NETWORK_AP_CHANNEL_5G)
|
||
|
|
softap_config = self.start_softap_and_verify(WIFI_CONFIG_APBAND_5G,
|
||
|
|
check_connectivity=False)
|
||
|
|
for count in range(self.stress_count):
|
||
|
|
self.log.info("Iteration %d", count + 1)
|
||
|
|
self.verify_wifi_full_on_off(self.open_5g, softap_config)
|
||
|
|
|
||
|
|
@test_tracker_info(uuid="ee98f2dd-c4f9-4f48-ab59-f577267760d5")
|
||
|
|
def test_stress_softap_5G_wifi_connection_5G_DFS(self):
|
||
|
|
"""Tests enable SoftAp on 5G then connection/disconnection to 5G DFS network for N times.
|
||
|
|
"""
|
||
|
|
self.configure_ap(channel_5g=WIFI_NETWORK_AP_CHANNEL_5G_DFS)
|
||
|
|
softap_config = self.start_softap_and_verify(WIFI_CONFIG_APBAND_5G,
|
||
|
|
check_connectivity=False)
|
||
|
|
for count in range(self.stress_count):
|
||
|
|
self.log.info("Iteration %d", count + 1)
|
||
|
|
self.verify_wifi_full_on_off(self.open_5g, softap_config)
|
||
|
|
|
||
|
|
@test_tracker_info(uuid="b50750b5-d5b9-4687-b9e7-9fb15f54b428")
|
||
|
|
def test_stress_softap_5G_wifi_connection_2G(self):
|
||
|
|
"""Tests enable SoftAp on 5G then connection/disconnection to 2G network for N times.
|
||
|
|
"""
|
||
|
|
self.configure_ap(channel_2g=WIFI_NETWORK_AP_CHANNEL_2G)
|
||
|
|
softap_config = self.start_softap_and_verify(WIFI_CONFIG_APBAND_5G,
|
||
|
|
check_connectivity=False)
|
||
|
|
for count in range(self.stress_count):
|
||
|
|
self.log.info("Iteration %d", count + 1)
|
||
|
|
self.verify_wifi_full_on_off(self.open_2g, softap_config)
|
||
|
|
|
||
|
|
@test_tracker_info(uuid="9a2865db-8e4b-4339-9999-000ce9b6970b")
|
||
|
|
def test_stress_softap_2G_wifi_connection_5G(self):
|
||
|
|
"""Tests enable SoftAp on 2G then connection/disconnection to 5G network for N times.
|
||
|
|
"""
|
||
|
|
self.configure_ap(channel_5g=WIFI_NETWORK_AP_CHANNEL_5G)
|
||
|
|
softap_config = self.start_softap_and_verify(WIFI_CONFIG_APBAND_2G,
|
||
|
|
check_connectivity=False)
|
||
|
|
for count in range(self.stress_count):
|
||
|
|
self.log.info("Iteration %d", count + 1)
|
||
|
|
self.verify_wifi_full_on_off(self.open_5g, softap_config)
|
||
|
|
|
||
|
|
@test_tracker_info(uuid="add6609d-91d6-4b89-94c5-0ad8b941e3d1")
|
||
|
|
def test_stress_softap_2G_wifi_connection_5G_DFS(self):
|
||
|
|
"""Tests enable SoftAp on 2G then connection/disconnection to 5G DFS network for N times.
|
||
|
|
"""
|
||
|
|
self.configure_ap(channel_5g=WIFI_NETWORK_AP_CHANNEL_5G_DFS)
|
||
|
|
softap_config = self.start_softap_and_verify(WIFI_CONFIG_APBAND_2G,
|
||
|
|
check_connectivity=False)
|
||
|
|
for count in range(self.stress_count):
|
||
|
|
self.log.info("Iteration %d", count + 1)
|
||
|
|
self.verify_wifi_full_on_off(self.open_5g, softap_config)
|
||
|
|
|
||
|
|
@test_tracker_info(uuid="ee42afb6-99d0-4330-933f-d4dd8c3626c6")
|
||
|
|
def test_stress_softap_5G_wifi_connection_2G_with_location_scan_on(self):
|
||
|
|
"""Tests enable SoftAp on 5G then connection/disconnection to 2G network for N times
|
||
|
|
with location scans turned on.
|
||
|
|
"""
|
||
|
|
self.configure_ap(channel_2g=WIFI_NETWORK_AP_CHANNEL_2G)
|
||
|
|
self.turn_location_on_and_scan_toggle_on()
|
||
|
|
softap_config = self.start_softap_and_verify(WIFI_CONFIG_APBAND_5G,
|
||
|
|
check_connectivity=False)
|
||
|
|
for count in range(self.stress_count):
|
||
|
|
self.log.info("Iteration %d", count + 1)
|
||
|
|
self.verify_wifi_full_on_off(self.open_2g, softap_config)
|
||
|
|
|
||
|
|
@test_tracker_info(uuid="36c7f847-4b3e-4bb1-a280-cfe2b6afc903")
|
||
|
|
def test_2g_sta_mode_and_hotspot_5g_on_off_stress_under_airplane_mode(
|
||
|
|
self):
|
||
|
|
"""Tests connection to 2G network followed by bringing up SoftAp on 5G
|
||
|
|
under airplane mode
|
||
|
|
"""
|
||
|
|
self.log.debug("Toggling Airplane mode ON")
|
||
|
|
asserts.assert_true(
|
||
|
|
acts.utils.force_airplane_mode(self.dut, True),
|
||
|
|
"Can not turn on airplane mode on: %s" % self.dut.serial)
|
||
|
|
time.sleep(DEFAULT_TIMEOUT)
|
||
|
|
self.configure_ap(channel_2g=WIFI_NETWORK_AP_CHANNEL_2G)
|
||
|
|
wutils.wifi_toggle_state(self.dut, True)
|
||
|
|
self.connect_to_wifi_network_and_verify((self.open_2g, self.dut))
|
||
|
|
time.sleep(DEFAULT_TIMEOUT)
|
||
|
|
for count in range(self.stress_count):
|
||
|
|
self.log.info("Iteration %d", count + 1)
|
||
|
|
self.verify_softap_full_on_off(self.open_2g, WIFI_CONFIG_APBAND_5G)
|