blob: a31812f3cc349f8d8d3cf2c8cc07ced61b692318 [file] [log] [blame]
#!/usr/bin/env python3.4
#
# 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 collections
import logging
import os
from acts import base_test
from acts import utils
from acts.controllers import iperf_server as ipf
from acts.controllers import iperf_client as ipc
from acts.metrics.loggers.blackbox import BlackboxMappedMetricLogger
from acts.test_utils.wifi import wifi_test_utils as wutils
from acts.test_utils.wifi import wifi_performance_test_utils as wputils
from WifiRvrTest import WifiRvrTest
AccessPointTuple = collections.namedtuple(('AccessPointTuple'),
['ap_settings'])
class WifiSoftApRvrTest(WifiRvrTest):
def __init__(self, controllers):
base_test.BaseTestClass.__init__(self, controllers)
self.tests = ("test_rvr_TCP_DL_2GHz", "test_rvr_TCP_UL_2GHz",
"test_rvr_TCP_DL_5GHz", "test_rvr_TCP_UL_5GHz")
self.testcase_metric_logger = (
BlackboxMappedMetricLogger.for_test_case())
self.testclass_metric_logger = (
BlackboxMappedMetricLogger.for_test_class())
self.publish_testcase_metrics = True
def setup_class(self):
"""Initializes common test hardware and parameters.
This function initializes hardwares and compiles parameters that are
common to all tests in this class.
"""
self.dut = self.android_devices[-1]
req_params = ['sap_test_params', 'testbed_params', 'AndroidDevice']
opt_params = ['main_network', 'golden_files_list']
self.unpack_userparams(req_params, opt_params)
self.testclass_params = self.sap_test_params
self.num_atten = self.attenuators[0].instrument.num_atten
self.iperf_server = ipf.create([{
"AndroidDevice":
self.android_devices[0].serial,
"port":
"5201"
}])[0]
self.iperf_client = ipc.create([{
"AndroidDevice":
self.android_devices[1].serial,
"port":
"5201"
}])[0]
self.log_path = os.path.join(logging.log_path, 'results')
utils.create_dir(self.log_path)
if not hasattr(self, 'golden_files_list'):
self.golden_files_list = [
os.path.join(self.testbed_params['golden_results_path'], file)
for file in os.listdir(
self.testbed_params['golden_results_path'])
]
if hasattr(self, 'bdf'):
self.log.info('Pushing WiFi BDF to DUT.')
wputils.push_bdf(self.dut, self.bdf)
if hasattr(self, 'firmware'):
self.log.info('Pushing WiFi firmware to DUT.')
wlanmdsp = [
file for file in self.firmware if "wlanmdsp.mbn" in file
][0]
data_msc = [file for file in self.firmware
if "Data.msc" in file][0]
wputils.push_firmware(self.dut, wlanmdsp, data_msc)
self.testclass_results = []
# Turn WiFi ON
for dev in self.android_devices:
wutils.wifi_toggle_state(dev, True)
def teardown_class(self):
# Turn WiFi OFF
wutils.stop_wifi_tethering(self.android_devices[0])
for dev in self.android_devices:
wutils.wifi_toggle_state(dev, False)
self.process_testclass_results()
def teardown_test(self):
wutils.stop_wifi_tethering(self.android_devices[0])
def get_sap_connection_info(self):
info = {}
info["client_ip_address"] = self.android_devices[
1].droid.connectivityGetIPv4Addresses('wlan0')[0]
info["ap_ip_address"] = self.android_devices[
0].droid.connectivityGetIPv4Addresses('wlan1')[0]
info["frequency"] = self.android_devices[1].adb.shell(
"wpa_cli status | grep freq").split("=")[1]
info["channel"] = wutils.WifiEnums.freq_to_channel[int(
info["frequency"])]
return info
def setup_sap_rvr_test(self, testcase_params):
"""Function that gets devices ready for the test.
Args:
testcase_params: dict containing test-specific parameters
"""
# Reset WiFi on all devices
for dev in self.android_devices:
wutils.reset_wifi(dev)
dev.droid.wifiSetCountryCode(wutils.WifiEnums.CountryCode.US)
# Setup Soft AP
sap_config = wutils.create_softap_config()
self.log.info("SoftAP Config: {}".format(sap_config))
wutils.start_wifi_tethering(self.android_devices[0],
sap_config[wutils.WifiEnums.SSID_KEY],
sap_config[wutils.WifiEnums.PWD_KEY],
testcase_params['sap_band_enum'])
# Set attenuator to 0 dB
[self.attenuators[i].set_atten(0) for i in range(self.num_atten)]
# Connect DUT to Network
network = {
"SSID": sap_config[wutils.WifiEnums.SSID_KEY],
"password": sap_config[wutils.WifiEnums.PWD_KEY]
}
wutils.wifi_connect(
self.android_devices[1],
network,
num_of_tries=5,
check_connectivity=False)
# Compile meta data
self.access_point = AccessPointTuple(sap_config)
testcase_params['connection_info'] = self.get_sap_connection_info()
testcase_params["channel"] = testcase_params['connection_info'][
'channel']
if testcase_params["channel"] < 13:
testcase_params["mode"] = "VHT20"
else:
testcase_params["mode"] = "VHT80"
testcase_params["iperf_server_address"] = testcase_params[
'connection_info']["ap_ip_address"]
def compile_test_params(self, testcase_params):
"""Function that completes all test params based on the test name.
Args:
testcase_params: dict containing test-specific parameters
"""
num_atten_steps = int((self.testclass_params['atten_stop'] -
self.testclass_params['atten_start']) /
self.testclass_params['atten_step'])
testcase_params['atten_range'] = [
self.testclass_params['atten_start'] +
x * self.testclass_params['atten_step']
for x in range(0, num_atten_steps)
]
if testcase_params['traffic_direction'] == 'DL':
testcase_params['iperf_args'] = wputils.get_iperf_arg_string(
duration=self.testclass_params['iperf_duration'],
reverse_direction=1,
traffic_type=testcase_params['traffic_type'])
testcase_params['use_client_output'] = True
else:
testcase_params['iperf_args'] = wputils.get_iperf_arg_string(
duration=self.testclass_params['iperf_duration'],
reverse_direction=0,
traffic_type=testcase_params['traffic_type'])
testcase_params['use_client_output'] = False
return testcase_params
def _test_sap_rvr(self, testcase_params):
""" Function that gets called for each test case
Args:
testcase_params: dict containing test-specific parameters
"""
# Compile test parameters from config and test name
testcase_params = self.compile_test_params(testcase_params)
self.setup_sap_rvr_test(testcase_params)
result = self.run_rvr_test(testcase_params)
self.testclass_results.append(result)
self.process_test_results(result)
self.pass_fail_check(result)
#Test cases
def test_rvr_TCP_DL_2GHz(self):
testcase_params = collections.OrderedDict(
sap_band='2GHz',
sap_band_enum=wutils.WifiEnums.WIFI_CONFIG_APBAND_2G,
traffic_type='TCP',
traffic_direction='DL')
self._test_sap_rvr(testcase_params)
def test_rvr_TCP_UL_2GHz(self):
testcase_params = collections.OrderedDict(
sap_band='2GHz',
sap_band_enum=wutils.WifiEnums.WIFI_CONFIG_APBAND_2G,
traffic_type='TCP',
traffic_direction='UL')
self._test_sap_rvr(testcase_params)
def test_rvr_TCP_DL_5GHz(self):
testcase_params = collections.OrderedDict(
sap_band='5GHz',
sap_band_enum=wutils.WifiEnums.WIFI_CONFIG_APBAND_5G,
traffic_type='TCP',
traffic_direction='DL')
self._test_sap_rvr(testcase_params)
def test_rvr_TCP_UL_5GHz(self):
testcase_params = collections.OrderedDict(
sap_band='5GHz',
sap_band_enum=wutils.WifiEnums.WIFI_CONFIG_APBAND_5G,
traffic_type='TCP',
traffic_direction='UL')
self._test_sap_rvr(testcase_params)