blob: 52dea86068f3d2ce13a5c8f753a217faa3019e3d [file] [log] [blame]
#!/usr/bin/env 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.
import logging
import os
import time
from acts import base_test
from acts import utils
from acts.controllers.ap_lib import hostapd_constants as hc
from acts.test_decorators import test_tracker_info
from acts.test_utils.wifi import wifi_test_utils as wutils
from acts.test_utils.wifi import wifi_power_test_utils as wputils
from acts.controllers import packet_sender as pkt_utils
RA_SHORT_LIFETIME = 3
RA_LONG_LIFETIME = 1000
DNS_LONG_LIFETIME = 300
DNS_SHORT_LIFETIME = 3
class PowermulticastTest(base_test.BaseTestClass):
def __init__(self, controllers):
base_test.BaseTestClass.__init__(self, controllers)
def setup_class(self):
self.log = logging.getLogger()
self.dut = self.android_devices[0]
self.access_point = self.access_points[0]
req_params = ['multicast_params', 'custom_files']
self.unpack_userparams(req_params)
self.unpack_testparams(self.multicast_params)
self.num_atten = self.attenuators[0].instrument.num_atten
self.mon_data_path = os.path.join(self.log_path, 'Monsoon')
self.mon = self.monsoons[0]
self.mon.set_max_current(8.0)
self.mon.set_voltage(4.2)
self.mon.attach_device(self.dut)
self.mon_info = wputils.create_monsoon_info(self)
self.pkt_sender = self.packet_senders[0]
for file in self.custom_files:
if 'pass_fail_threshold' in file:
self.threshold_file = file
elif 'attenuator_setting' in file:
self.attenuation_file = file
elif 'network_config' in file:
self.network_file = file
self.threshold = wputils.unpack_custom_file(self.threshold_file,
self.TAG)
self.atten_level = wputils.unpack_custom_file(self.attenuation_file,
self.TAG)
self.networks = wputils.unpack_custom_file(self.network_file)
self.main_network = self.networks['main_network']
def unpack_testparams(self, bulk_params):
"""Unpack all the test specific parameters.
Args:
bulk_params: dict with all test specific params in the config file
"""
for key in bulk_params.keys():
setattr(self, key, bulk_params[key])
def teardown_test(self):
"""Tear down necessary objects after test case is finished.
Bring down the AP interface, delete the bridge interface, stop the
packet sender, and reset the ethernet interface for the packet sender
"""
self.log.info('Tearing down the test case')
self.pkt_sender.stop_sending(ignore_status=True)
self.access_point.bridge.teardown(self.brconfigs)
self.access_point.close()
wputils.reset_host_interface(self.pkt_sender.interface)
self.mon.usb('on')
def teardown_class(self):
"""Clean up the test class after tests finish running
"""
self.log.info('Tearing down the test class')
self.mon.usb('on')
self.pkt_sender.stop_sending(ignore_status=True)
self.access_point.close()
def set_connection(self, screen_status, network):
"""Setup connection between AP and client.
Setup connection between AP and phone, change DTIMx1 and get information
such as IP addresses to prepare packet construction.
Args:
screen_status: screen on or off
network: network selection, 2g/5g
"""
# Change DTIMx1 on the phone to receive all Multicast packets
wputils.change_dtim(
self.dut, gEnableModulatedDTIM=1, gMaxLIModulatedDTIM=10)
self.dut.log.info('DTIM value of the phone is now DTIMx1')
# Initialize the dut to rock-bottom state
wputils.dut_rockbottom(self.dut)
wutils.wifi_toggle_state(self.dut, True)
# Set attenuation and connect to AP
for attn in range(self.num_atten):
self.attenuators[attn].set_atten(
self.atten_level['zero_atten'][attn])
self.log.info('Set attenuation level to all zero')
iface_eth = self.pkt_sender.interface
self.brconfigs = wputils.ap_setup(self.access_point, network)
wutils.wifi_connect(self.dut, network)
# Wait for DHCP with timeout of 60 seconds
wputils.wait_for_dhcp(iface_eth)
# Set the desired screen status
if screen_status == 'OFF':
self.dut.droid.goToSleepNow()
self.dut.log.info('Screen is OFF')
time.sleep(5)
def sendPacketAndMeasure(self, packet):
"""Packet injection template function
Args:
packet: packet to be sent/inject
"""
# Start sending packets
self.pkt_sender.start_sending(packet, self.interval)
# Measure current and plot
begin_time = utils.get_current_epoch_time()
file_path, avg_current = wputils.monsoon_data_collect_save(
self.dut, self.mon_info, self.current_test_name)
wputils.monsoon_data_plot(self.mon_info, file_path)
# Take Bugreport
if bool(self.bug_report) == True:
self.dut.take_bug_report(self.test_name, begin_time)
# Compute pass or fail check
wputils.pass_fail_check(self, avg_current)
# Test cases - screen OFF
@test_tracker_info(uuid='b5378aaf-7949-48ac-95fb-ee94c85d49c3')
def test_screenoff_directed_arp(self):
network = self.main_network[hc.BAND_5G]
self.set_connection('OFF', network)
self.pkt_gen_config = wputils.create_pkt_config(self)
pkt_gen = pkt_utils.ArpGenerator(**self.pkt_gen_config)
packet = pkt_gen.generate()
self.sendPacketAndMeasure(packet)
@test_tracker_info(uuid='3b5d348d-70bf-483d-8736-13da569473aa')
def test_screenoff_misdirected_arp(self):
network = self.main_network[hc.BAND_5G]
self.set_connection('OFF', network)
self.pkt_gen_config = wputils.create_pkt_config(self)
pkt_gen = pkt_utils.ArpGenerator(**self.pkt_gen_config)
packet = pkt_gen.generate(self.ipv4_dst_fake)
self.sendPacketAndMeasure(packet)
@test_tracker_info(uuid='8e534d3b-5a25-429a-a1bb-8119d7d28b5a')
def test_screenoff_directed_ns(self):
network = self.main_network[hc.BAND_5G]
self.set_connection('OFF', network)
self.pkt_gen_config = wputils.create_pkt_config(self)
pkt_gen = pkt_utils.NsGenerator(**self.pkt_gen_config)
packet = pkt_gen.generate()
self.sendPacketAndMeasure(packet)
@test_tracker_info(uuid='536d716d-f30b-4d20-9976-e2cbc36c3415')
def test_screenoff_misdirected_ns(self):
network = self.main_network[hc.BAND_5G]
self.set_connection('OFF', network)
self.pkt_gen_config = wputils.create_pkt_config(self)
pkt_gen = pkt_utils.NsGenerator(**self.pkt_gen_config)
packet = pkt_gen.generate(self.ipv6_dst_fake)
self.sendPacketAndMeasure(packet)
@test_tracker_info(uuid='5eed3174-8e94-428e-8527-19a9b5a90322')
def test_screenoff_ra_short(self):
network = self.main_network[hc.BAND_5G]
self.set_connection('OFF', network)
self.pkt_gen_config = wputils.create_pkt_config(self)
pkt_gen = pkt_utils.RaGenerator(**self.pkt_gen_config)
packet = pkt_gen.generate(RA_SHORT_LIFETIME)
self.sendPacketAndMeasure(packet)
@test_tracker_info(uuid='67867bae-f1c5-44a4-9bd0-2b832ac8059c')
def test_screenoff_ra_long(self):
network = self.main_network[hc.BAND_5G]
self.set_connection('OFF', network)
self.pkt_gen_config = wputils.create_pkt_config(self)
pkt_gen = pkt_utils.RaGenerator(**self.pkt_gen_config)
packet = pkt_gen.generate(RA_LONG_LIFETIME)
self.sendPacketAndMeasure(packet)
@test_tracker_info(uuid='db19bc94-3513-45c4-b3a5-d6219649d0bb')
def test_screenoff_directed_dhcp_offer(self):
network = self.main_network[hc.BAND_5G]
self.set_connection('OFF', network)
self.pkt_gen_config = wputils.create_pkt_config(self)
pkt_gen = pkt_utils.DhcpOfferGenerator(**self.pkt_gen_config)
packet = pkt_gen.generate()
self.sendPacketAndMeasure(packet)
@test_tracker_info(uuid='a8059869-40ee-4cf3-a957-4b7aed03fcf9')
def test_screenoff_misdirected_dhcp_offer(self):
network = self.main_network[hc.BAND_5G]
self.set_connection('OFF', network)
self.pkt_gen_config = wputils.create_pkt_config(self)
pkt_gen = pkt_utils.DhcpOfferGenerator(**self.pkt_gen_config)
packet = pkt_gen.generate(self.mac_dst_fake, self.ipv4_dst_fake)
self.sendPacketAndMeasure(packet)
@test_tracker_info(uuid='6e663f0a-3eb5-46f6-a79e-311baebd5d2a')
def test_screenoff_ra_rnds_short(self):
network = self.main_network[hc.BAND_5G]
self.set_connection('OFF', network)
self.pkt_gen_config = wputils.create_pkt_config(self)
pkt_gen = pkt_utils.RaGenerator(**self.pkt_gen_config)
packet = pkt_gen.generate(
RA_LONG_LIFETIME, enableDNS=True, dns_lifetime=DNS_SHORT_LIFETIME)
self.sendPacketAndMeasure(packet)
@test_tracker_info(uuid='84d2f1ff-bd4f-46c6-9b06-826d9b14909c')
def test_screenoff_ra_rnds_long(self):
network = self.main_network[hc.BAND_5G]
self.set_connection('OFF', network)
self.pkt_gen_config = wputils.create_pkt_config(self)
pkt_gen = pkt_utils.RaGenerator(**self.pkt_gen_config)
packet = pkt_gen.generate(
RA_LONG_LIFETIME, enableDNS=True, dns_lifetime=DNS_LONG_LIFETIME)
self.sendPacketAndMeasure(packet)
@test_tracker_info(uuid='4a17e74f-3e7f-4e90-ac9e-884a7c13cede')
def test_screenoff_directed_ping6(self):
network = self.main_network[hc.BAND_5G]
self.set_connection('OFF', network)
self.pkt_gen_config = wputils.create_pkt_config(self)
pkt_gen = pkt_utils.Ping6Generator(**self.pkt_gen_config)
packet = pkt_gen.generate()
self.sendPacketAndMeasure(packet)
@test_tracker_info(uuid='ab249e0d-58ba-4b55-8a81-e1e4fb04780a')
def test_screenoff_misdirected_ping6(self):
network = self.main_network[hc.BAND_5G]
self.set_connection('OFF', network)
self.pkt_gen_config = wputils.create_pkt_config(self)
pkt_gen = pkt_utils.Ping6Generator(**self.pkt_gen_config)
packet = pkt_gen.generate(self.ipv6_dst_fake, pkt_utils.MAC_BROADCAST)
self.sendPacketAndMeasure(packet)
@test_tracker_info(uuid='e37112e6-5c35-4c89-8d15-f5a44e69be0b')
def test_screenoff_directed_ping4(self):
network = self.main_network[hc.BAND_5G]
self.set_connection('OFF', network)
self.pkt_gen_config = wputils.create_pkt_config(self)
pkt_gen = pkt_utils.Ping4Generator(**self.pkt_gen_config)
packet = pkt_gen.generate()
self.sendPacketAndMeasure(packet)
@test_tracker_info(uuid='afd4a011-63a9-46c3-8a75-13f515ba8475')
def test_screenoff_misdirected_ping4(self):
network = self.main_network[hc.BAND_5G]
self.set_connection('OFF', network)
self.pkt_gen_config = wputils.create_pkt_config(self)
pkt_gen = pkt_utils.Ping4Generator(**self.pkt_gen_config)
packet = pkt_gen.generate(self.ipv4_dst_fake, pkt_utils.MAC_BROADCAST)
self.sendPacketAndMeasure(packet)
@test_tracker_info(uuid='03f0e845-fd66-4120-a79d-5eb64d49b6cd')
def test_screenoff_mdns6(self):
network = self.main_network[hc.BAND_5G]
self.set_connection('OFF', network)
self.pkt_gen_config = wputils.create_pkt_config(self)
pkt_gen = pkt_utils.Mdns6Generator(**self.pkt_gen_config)
packet = pkt_gen.generate()
self.sendPacketAndMeasure(packet)
@test_tracker_info(uuid='dcbb0aec-512d-48bd-b743-024697ce511b')
def test_screenoff_mdns4(self):
network = self.main_network[hc.BAND_5G]
self.set_connection('OFF', network)
self.pkt_gen_config = wputils.create_pkt_config(self)
pkt_gen = pkt_utils.Mdns4Generator(**self.pkt_gen_config)
packet = pkt_gen.generate()
self.sendPacketAndMeasure(packet)
# Test cases: screen ON
@test_tracker_info(uuid='b9550149-bf36-4f86-9b4b-6e900756a90e')
def test_screenon_directed_arp(self):
network = self.main_network[hc.BAND_5G]
self.set_connection('ON', network)
self.pkt_gen_config = wputils.create_pkt_config(self)
pkt_gen = pkt_utils.ArpGenerator(**self.pkt_gen_config)
packet = pkt_gen.generate()
self.sendPacketAndMeasure(packet)
@test_tracker_info(uuid='406dffae-104e-46cb-9ec2-910aac7aca39')
def test_screenon_misdirected_arp(self):
network = self.main_network[hc.BAND_5G]
self.set_connection('ON', network)
self.pkt_gen_config = wputils.create_pkt_config(self)
pkt_gen = pkt_utils.ArpGenerator(**self.pkt_gen_config)
packet = pkt_gen.generate(self.ipv4_dst_fake)
self.sendPacketAndMeasure(packet)
@test_tracker_info(uuid='be4cb543-c710-4041-a770-819e82a6d164')
def test_screenon_directed_ns(self):
network = self.main_network[hc.BAND_5G]
self.set_connection('ON', network)
self.pkt_gen_config = wputils.create_pkt_config(self)
pkt_gen = pkt_utils.NsGenerator(**self.pkt_gen_config)
packet = pkt_gen.generate()
self.sendPacketAndMeasure(packet)
@test_tracker_info(uuid='de21d24f-e03e-47a1-8bbb-11953200e870')
def test_screenon_misdirected_ns(self):
network = self.main_network[hc.BAND_5G]
self.set_connection('ON', network)
self.pkt_gen_config = wputils.create_pkt_config(self)
pkt_gen = pkt_utils.NsGenerator(**self.pkt_gen_config)
packet = pkt_gen.generate(self.ipv6_dst_fake)
self.sendPacketAndMeasure(packet)
@test_tracker_info(uuid='b424a170-5095-4b47-82eb-50f7b7fdf35d')
def test_screenon_ra_short(self):
network = self.main_network[hc.BAND_5G]
self.set_connection('ON', network)
self.pkt_gen_config = wputils.create_pkt_config(self)
pkt_gen = pkt_utils.RaGenerator(**self.pkt_gen_config)
packet = pkt_gen.generate(RA_SHORT_LIFETIME)
self.sendPacketAndMeasure(packet)
@test_tracker_info(uuid='ab627e59-2ee8-4c0d-970b-eeb1d1cecdc1')
def test_screenon_ra_long(self):
network = self.main_network[hc.BAND_5G]
self.set_connection('ON', network)
self.pkt_gen_config = wputils.create_pkt_config(self)
pkt_gen = pkt_utils.RaGenerator(**self.pkt_gen_config)
packet = pkt_gen.generate(RA_LONG_LIFETIME)
self.sendPacketAndMeasure(packet)
@test_tracker_info(uuid='ee6514ab-1814-44b9-ba01-63f77ba77c34')
def test_screenon_directed_dhcp_offer(self):
network = self.main_network[hc.BAND_5G]
self.set_connection('ON', network)
self.pkt_gen_config = wputils.create_pkt_config(self)
pkt_gen = pkt_utils.DhcpOfferGenerator(**self.pkt_gen_config)
packet = pkt_gen.generate()
self.sendPacketAndMeasure(packet)
@test_tracker_info(uuid='eaebfe98-32da-4ebc-bca7-3b7026d99a4f')
def test_screenon_misdirected_dhcp_offer(self):
network = self.main_network[hc.BAND_5G]
self.set_connection('ON', network)
self.pkt_gen_config = wputils.create_pkt_config(self)
pkt_gen = pkt_utils.DhcpOfferGenerator(**self.pkt_gen_config)
packet = pkt_gen.generate(self.mac_dst_fake, self.ipv4_dst_fake)
self.sendPacketAndMeasure(packet)
@test_tracker_info(uuid='f0e2193f-bf6a-441b-b9c1-bb7b65787cd5')
def test_screenon_ra_rnds_short(self):
network = self.main_network[hc.BAND_5G]
self.set_connection('ON', network)
self.pkt_gen_config = wputils.create_pkt_config(self)
pkt_gen = pkt_utils.RaGenerator(**self.pkt_gen_config)
packet = pkt_gen.generate(
RA_LONG_LIFETIME, enableDNS=True, dns_lifetime=DNS_SHORT_LIFETIME)
self.sendPacketAndMeasure(packet)
@test_tracker_info(uuid='62b99cd7-75bf-45be-b93f-bb037a13b3e2')
def test_screenon_ra_rnds_long(self):
network = self.main_network[hc.BAND_5G]
self.set_connection('ON', network)
self.pkt_gen_config = wputils.create_pkt_config(self)
pkt_gen = pkt_utils.RaGenerator(**self.pkt_gen_config)
packet = pkt_gen.generate(
RA_LONG_LIFETIME, enableDNS=True, dns_lifetime=DNS_LONG_LIFETIME)
self.sendPacketAndMeasure(packet)
@test_tracker_info(uuid='4088af4c-a64b-4fc1-848c-688936cc6c12')
def test_screenon_directed_ping6(self):
network = self.main_network[hc.BAND_5G]
self.set_connection('ON', network)
self.pkt_gen_config = wputils.create_pkt_config(self)
pkt_gen = pkt_utils.Ping6Generator(**self.pkt_gen_config)
packet = pkt_gen.generate()
self.sendPacketAndMeasure(packet)
@test_tracker_info(uuid='3179e327-e6ac-4dae-bb8a-f3940f21094d')
def test_screenon_misdirected_ping6(self):
network = self.main_network[hc.BAND_5G]
self.set_connection('ON', network)
self.pkt_gen_config = wputils.create_pkt_config(self)
pkt_gen = pkt_utils.Ping6Generator(**self.pkt_gen_config)
packet = pkt_gen.generate(self.ipv6_dst_fake, pkt_utils.MAC_BROADCAST)
self.sendPacketAndMeasure(packet)
@test_tracker_info(uuid='90c70e8a-74fd-4878-89c6-5e15c3ede318')
def test_screenon_directed_ping4(self):
network = self.main_network[hc.BAND_5G]
self.set_connection('ON', network)
self.pkt_gen_config = wputils.create_pkt_config(self)
pkt_gen = pkt_utils.Ping4Generator(**self.pkt_gen_config)
packet = pkt_gen.generate()
self.sendPacketAndMeasure(packet)
@test_tracker_info(uuid='dcfabbc7-a7e1-4a92-a38d-8ebe7aa2e063')
def test_screenon_misdirected_ping4(self):
network = self.main_network[hc.BAND_5G]
self.set_connection('ON', network)
self.pkt_gen_config = wputils.create_pkt_config(self)
pkt_gen = pkt_utils.Ping4Generator(**self.pkt_gen_config)
packet = pkt_gen.generate(self.ipv4_dst_fake, pkt_utils.MAC_BROADCAST)
self.sendPacketAndMeasure(packet)
@test_tracker_info(uuid='117814db-f94d-4239-a7ab-033482b1da52')
def test_screenon_mdns6(self):
network = self.main_network[hc.BAND_5G]
self.set_connection('ON', network)
self.pkt_gen_config = wputils.create_pkt_config(self)
pkt_gen = pkt_utils.Mdns6Generator(**self.pkt_gen_config)
packet = pkt_gen.generate()
self.sendPacketAndMeasure(packet)
@test_tracker_info(uuid='ce6ad7e2-21f3-4e68-9c0d-d0e14e0a7c53')
def test_screenon_mdns4(self):
network = self.main_network[hc.BAND_5G]
self.set_connection('ON', network)
self.pkt_gen_config = wputils.create_pkt_config(self)
pkt_gen = pkt_utils.Mdns4Generator(**self.pkt_gen_config)
packet = pkt_gen.generate()
self.sendPacketAndMeasure(packet)