Remove unused wifi_power_test_utils module
Change-Id: I0649d3764cd2b552824a433730c8987e3130faba
Reviewed-on: https://fuchsia-review.googlesource.com/c/antlion/+/867540
Commit-Queue: Auto-Submit <auto-submit@fuchsia-infra.iam.gserviceaccount.com>
Reviewed-by: Jonathan Chang <jnchang@google.com>
Fuchsia-Auto-Submit: Sam Balana <sbalana@google.com>
diff --git a/BUILD.gn b/BUILD.gn
index 773b96a..01a7d53 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -217,7 +217,6 @@
"test_utils/wifi/wifi_performance_test_utils/brcm_utils.py",
"test_utils/wifi/wifi_performance_test_utils/ping_utils.py",
"test_utils/wifi/wifi_performance_test_utils/qcom_utils.py",
- "test_utils/wifi/wifi_power_test_utils.py",
"test_utils/wifi/wifi_test_utils.py",
"tracelogger.py",
"utils.py",
diff --git a/packages/antlion/test_utils/wifi/wifi_power_test_utils.py b/packages/antlion/test_utils/wifi/wifi_power_test_utils.py
deleted file mode 100644
index d817c86..0000000
--- a/packages/antlion/test_utils/wifi/wifi_power_test_utils.py
+++ /dev/null
@@ -1,414 +0,0 @@
-#!/usr/bin/env python3
-#
-# Copyright 2022 The Fuchsia Authors
-#
-# 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 logging
-import time
-
-# http://www.secdev.org/projects/scapy/
-# On ubuntu, sudo pip3 install scapy
-import scapy.all as scapy
-
-from antlion.controllers.adb_lib.error import AdbCommandError
-from antlion.controllers.ap_lib import bridge_interface as bi
-from antlion.controllers.ap_lib import hostapd_ap_preset, hostapd_security
-from antlion.libs.proc import job
-from antlion.test_utils.wifi import wifi_test_utils as wutils
-
-GET_FROM_PHONE = "get_from_dut"
-GET_FROM_AP = "get_from_ap"
-ENABLED_MODULATED_DTIM = "gEnableModulatedDTIM="
-MAX_MODULATED_DTIM = "gMaxLIModulatedDTIM="
-
-
-def change_dtim(ad, gEnableModulatedDTIM, gMaxLIModulatedDTIM=10):
- """Function to change the DTIM setting in the phone.
-
- Args:
- ad: the target android device, AndroidDevice object
- gEnableModulatedDTIM: Modulated DTIM, int
- gMaxLIModulatedDTIM: Maximum modulated DTIM, int
- """
- ad.log.info(f"Sets dtim to {gEnableModulatedDTIM}")
-
- # In P21 the dtim setting method changed and an AdbCommandError will take
- # place to get ini_file_phone. Thus add try/except block for the old method.
- # If error occurs, use change_dtim_adb method later. Otherwise, first trying
- # to find the ini file with DTIM settings
- try:
- ini_file_phone = ad.adb.shell("ls /vendor/firmware/wlan/*/*.ini")
-
- except AdbCommandError as e:
- # Gets AdbCommandError, change dtim later with change_dtim_adb merthod.
- # change_dtim_adb requires that wifi connection is on.
- ad.log.info(
- f"Gets AdbCommandError, change dtim with change_dtim_adb. Error: {e}"
- )
- change_dtim_adb(ad, gEnableModulatedDTIM)
- return 0
-
- ini_file_local = ini_file_phone.split("/")[-1]
-
- # Pull the file and change the DTIM to desired value
- ad.adb.pull(f"{ini_file_phone} {ini_file_local}")
-
- with open(ini_file_local, "r") as fin:
- for line in fin:
- if ENABLED_MODULATED_DTIM in line:
- gE_old = line.strip("\n")
- gEDTIM_old = line.strip(ENABLED_MODULATED_DTIM).strip("\n")
- if MAX_MODULATED_DTIM in line:
- gM_old = line.strip("\n")
- gMDTIM_old = line.strip(MAX_MODULATED_DTIM).strip("\n")
- fin.close()
- if (
- int(gEDTIM_old) == gEnableModulatedDTIM
- and int(gMDTIM_old) == gMaxLIModulatedDTIM
- ):
- ad.log.info("Current DTIM is already the desired value," "no need to reset it")
- return 0
-
- gE_new = ENABLED_MODULATED_DTIM + str(gEnableModulatedDTIM)
- gM_new = MAX_MODULATED_DTIM + str(gMaxLIModulatedDTIM)
-
- sed_gE = f"sed -i 's/{gE_old}/{gE_new}/g' {ini_file_local}"
- sed_gM = f"sed -i 's/{gM_old}/{gM_new}/g' {ini_file_local}"
- job.run(sed_gE)
- job.run(sed_gM)
-
- # Push the file to the phone
- push_file_to_phone(ad, ini_file_local, ini_file_phone)
- ad.log.info("DTIM changes checked in and rebooting...")
- ad.reboot()
- # Wait for auto-wifi feature to start
- time.sleep(20)
- ad.adb.shell("dumpsys battery set level 100")
- ad.log.info("DTIM updated and device back from reboot")
- return 1
-
-
-def change_dtim_adb(ad, gEnableModulatedDTIM):
- """Function to change the DTIM setting in the P21 phone.
-
- This method should be run after connecting wifi.
-
- Args:
- ad: the target android device, AndroidDevice object
- gEnableModulatedDTIM: Modulated DTIM, int
- """
- ad.log.info(f"Changes DTIM to {gEnableModulatedDTIM} with adb")
- ad.adb.root()
- screen_status = ad.adb.shell("dumpsys nfc | grep Screen")
- screen_is_on = "ON_UNLOCKED" in screen_status
-
- # To read the dtim with 'adb shell wl bcn_li_dtim', the screen should be off
- if screen_is_on:
- ad.log.info("The screen is on. Set it to off before change dtim")
- ad.droid.goToSleepNow()
- time_limit_seconds = 60
- _wait_screen_off(ad, time_limit_seconds)
-
- old_dtim = _read_dtim_adb(ad)
- ad.log.info(f"The dtim before change is {old_dtim}")
- try:
- if int(old_dtim) == gEnableModulatedDTIM:
- ad.log.info(
- "Current DTIM is already the desired value," "no need to reset it"
- )
- if screen_is_on:
- ad.log.info("Changes the screen to the original on status")
- ad.droid.wakeUpNow()
- return
- except Exception as e:
- ad.log.info(f"old_dtim is not available from adb: {e}")
-
- current_dtim = _set_dtim(ad, gEnableModulatedDTIM)
- ad.log.info(f"Old DTIM is {old_dtim}, current DTIM is {current_dtim}")
- if screen_is_on:
- ad.log.info("Changes the screen to the original on status")
- ad.droid.wakeUpNow()
-
-
-def _set_dtim(ad, gEnableModulatedDTIM):
- out = ad.adb.shell(f"halutil -dtim_config {gEnableModulatedDTIM}")
- ad.log.info(f"set dtim to {gEnableModulatedDTIM}, stdout: {out}")
- return _read_dtim_adb(ad)
-
-
-def _read_dtim_adb(ad):
- try:
- old_dtim = ad.adb.shell("wl bcn_li_dtim")
- return old_dtim
- except Exception as e:
- ad.log.info(f"When reading dtim get error {e}")
- return "The dtim value is not available from adb"
-
-
-def _wait_screen_off(ad, time_limit_seconds):
- while time_limit_seconds > 0:
- screen_status = ad.adb.shell("dumpsys nfc | grep Screen")
- if "OFF_UNLOCKED" in screen_status:
- ad.log.info(f"The screen status is {screen_status}")
- return
- time.sleep(1)
- time_limit_seconds -= 1
- raise TimeoutError(
- f"Timed out while waiting the screen off after {time_limit_seconds} seconds."
- )
-
-
-def push_file_to_phone(ad, file_local, file_phone):
- """Function to push local file to android phone.
-
- Args:
- ad: the target android device
- file_local: the locla file to push
- file_phone: the file/directory on the phone to be pushed
- """
- ad.adb.root()
- cmd_out = ad.adb.remount()
- if "Permission denied" in cmd_out:
- ad.log.info("Need to disable verity first and reboot")
- ad.adb.disable_verity()
- time.sleep(1)
- ad.reboot()
- ad.log.info("Verity disabled and device back from reboot")
- ad.adb.root()
- ad.adb.remount()
- time.sleep(1)
- ad.adb.push(f"{file_local} {file_phone}")
-
-
-def ap_setup(ap, network, bandwidth=80, dtim_period=None):
- """Set up the whirlwind AP with provided network info.
-
- Args:
- ap: access_point object of the AP
- network: dict with information of the network, including ssid, password
- bssid, channel etc.
- bandwidth: the operation bandwidth for the AP, default 80MHz
- dtim_period: the dtim period of access point
- Returns:
- brconfigs: the bridge interface configs
- """
- log = logging.getLogger()
- bss_settings = []
- ssid = network[wutils.WifiEnums.SSID_KEY]
- if "password" in network.keys():
- password = network["password"]
- security = hostapd_security.Security(security_mode="wpa", password=password)
- else:
- security = hostapd_security.Security(security_mode=None, password=None)
- channel = network["channel"]
- config = hostapd_ap_preset.create_ap_preset(
- channel=channel,
- ssid=ssid,
- dtim_period=dtim_period,
- security=security,
- bss_settings=bss_settings,
- vht_bandwidth=bandwidth,
- profile_name="whirlwind",
- iface_wlan_2g=ap.wlan_2g,
- iface_wlan_5g=ap.wlan_5g,
- )
- config_bridge = ap.generate_bridge_configs(channel)
- brconfigs = bi.BridgeInterfaceConfigs(
- config_bridge[0], config_bridge[1], config_bridge[2]
- )
- ap.bridge.startup(brconfigs)
- ap.start_ap(config)
- log.info(f"AP started on channel {channel} with SSID {ssid}")
- return brconfigs
-
-
-def run_iperf_client_nonblocking(ad, server_host, extra_args=""):
- """Start iperf client on the device with nohup.
-
- Return status as true if iperf client start successfully.
- And data flow information as results.
-
- Args:
- ad: the android device under test
- server_host: Address of the iperf server.
- extra_args: A string representing extra arguments for iperf client,
- e.g. "-i 1 -t 30".
-
- """
- log = logging.getLogger()
- ad.adb.shell_nb(
- f"nohup >/dev/null 2>&1 sh -c 'iperf3 -c {server_host} {extra_args} &'"
- )
- log.info("IPerf client started")
-
-
-def get_wifi_rssi(ad):
- """Get the RSSI of the device.
-
- Args:
- ad: the android device under test
- Returns:
- RSSI: the rssi level of the device
- """
- RSSI = ad.droid.wifiGetConnectionInfo()["rssi"]
- return RSSI
-
-
-def get_phone_ip(ad):
- """Get the WiFi IP address of the phone.
-
- Args:
- ad: the android device under test
- Returns:
- IP: IP address of the phone for WiFi, as a string
- """
- IP = ad.droid.connectivityGetIPv4Addresses("wlan0")[0]
-
- return IP
-
-
-def get_phone_mac(ad):
- """Get the WiFi MAC address of the phone.
-
- Args:
- ad: the android device under test
- Returns:
- mac: MAC address of the phone for WiFi, as a string
- """
- mac = ad.droid.wifiGetConnectionInfo()["mac_address"]
-
- return mac
-
-
-def get_phone_ipv6(ad):
- """Get the WiFi IPV6 address of the phone.
-
- Args:
- ad: the android device under test
- Returns:
- IPv6: IPv6 address of the phone for WiFi, as a string
- """
- IPv6 = ad.droid.connectivityGetLinkLocalIpv6Address("wlan0")[:-6]
-
- return IPv6
-
-
-def wait_for_dhcp(interface_name):
- """Wait the DHCP address assigned to desired interface.
-
- Getting DHCP address takes time and the wait time isn't constant. Utilizing
- utils.timeout to keep trying until success
-
- Args:
- interface_name: desired interface name
- Returns:
- ip: ip address of the desired interface name
- Raise:
- TimeoutError: After timeout, if no DHCP assigned, raise
- """
- log = logging.getLogger()
- reset_host_interface(interface_name)
- start_time = time.time()
- time_limit_seconds = 60
- ip = "0.0.0.0"
- while start_time + time_limit_seconds > time.time():
- ip = scapy.get_if_addr(interface_name)
- if ip == "0.0.0.0":
- time.sleep(1)
- else:
- log.info(f"DHCP address assigned to {interface_name} as {ip}")
- return ip
- raise TimeoutError(
- f"Timed out while getting if_addr after {time_limit_seconds} seconds."
- )
-
-
-def reset_host_interface(intferface_name):
- """Reset the host interface.
-
- Args:
- intferface_name: the desired interface to reset
- """
- log = logging.getLogger()
- intf_down_cmd = f"ifconfig {intferface_name} down"
- intf_up_cmd = f"ifconfig {intferface_name} up"
- try:
- job.run(intf_down_cmd)
- time.sleep(10)
- job.run(intf_up_cmd)
- log.info(f"{intferface_name} has been reset")
- except job.Error:
- raise Exception("No such interface")
-
-
-def bringdown_host_interface(intferface_name):
- """Reset the host interface.
-
- Args:
- intferface_name: the desired interface to reset
- """
- log = logging.getLogger()
- intf_down_cmd = f"ifconfig {intferface_name} down"
- try:
- job.run(intf_down_cmd)
- time.sleep(2)
- log.info(f"{intferface_name} has been brought down")
- except job.Error:
- raise Exception("No such interface")
-
-
-def create_pkt_config(test_class):
- """Creates the config for generating multicast packets
-
- Args:
- test_class: object with all networking paramters
-
- Returns:
- Dictionary with the multicast packet config
- """
- addr_type = (
- scapy.IPV6_ADDR_LINKLOCAL
- if test_class.ipv6_src_type == "LINK_LOCAL"
- else scapy.IPV6_ADDR_GLOBAL
- )
-
- mac_dst = test_class.mac_dst
- if GET_FROM_PHONE in test_class.mac_dst:
- mac_dst = get_phone_mac(test_class.dut)
-
- ipv4_dst = test_class.ipv4_dst
- if GET_FROM_PHONE in test_class.ipv4_dst:
- ipv4_dst = get_phone_ip(test_class.dut)
-
- ipv6_dst = test_class.ipv6_dst
- if GET_FROM_PHONE in test_class.ipv6_dst:
- ipv6_dst = get_phone_ipv6(test_class.dut)
-
- ipv4_gw = test_class.ipv4_gwt
- if GET_FROM_AP in test_class.ipv4_gwt:
- ipv4_gw = test_class.access_point.ssh_settings.hostname
-
- pkt_gen_config = {
- "interf": test_class.pkt_sender.interface,
- "subnet_mask": test_class.sub_mask,
- "src_mac": test_class.mac_src,
- "dst_mac": mac_dst,
- "src_ipv4": test_class.ipv4_src,
- "dst_ipv4": ipv4_dst,
- "src_ipv6": test_class.ipv6_src,
- "src_ipv6_type": addr_type,
- "dst_ipv6": ipv6_dst,
- "gw_ipv4": ipv4_gw,
- }
- return pkt_gen_config