blob: f9278d3bb0770d72b267eb5689108b4b65f4e90e [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.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
class PowermulticastTest(base_test.BaseTestClass):
def __init__(self, controllers):
base_test.BaseTestClass.__init__(self, controllers)
self.tests = ('test_screenoff_direct_arp',
'test_screenoff_misdirect_arp',
'test_screenoff_direct_ns',
'test_screenoff_misdirect_ns', 'test_screenoff_ra_short',
'test_screenoff_ra_long',
'test_screenoff_directed_dhcp_offer'
'test_screenoff_misdirected_dhcp_offer'
'test_screenon_direct_arp',
'test_screenon_misdirect_arp', 'test_screenon_direct_ns',
'test_screenon_misdirect_ns', 'test_screenon_ra_short',
'test_screenon_ra_long',
'test_screenon_directed_dhcp_offer'
'test_screenon_misdirected_dhcp_offer')
def setup_class(self):
self.log = logging.getLogger()
self.dut = self.android_devices[0]
self.access_point = self.access_points[0]
req_params = ['main_network', 'multicast_params']
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_gen_config = wputils.create_pkt_config(self)
self.pkt_sender = self.packet_senders[0]
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_class(self):
"""Clean up the test class after tests finish running
"""
self.mon.usb('on')
def sendPacketAndMeasure(self, screen_status, network, packet):
"""Packet injection template function
Args:
screen_status: screen on or off
network: 2G or 5G
pkt_gen: desired packet to transmit
"""
# 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['main_AP'][attn])
self.log.info('Set attenuation level to connect the main AP')
wputils.ap_setup(self.access_point, network)
wutils.wifi_connect(self.dut, network)
# Set the desired screen status
if screen_status == 'OFF':
self.dut.droid.goToSleepNow()
self.dut.log.info('Screen is OFF')
time.sleep(5)
# Start sending packets
self.pkt_sender.start_sending(packet, self.interval)
# Measure current and plot
file_path, avg_current = wputils.monsoon_data_collect_save(
self.dut, self.mon_info, self.current_test_name, self.bug_report)
wputils.monsoon_data_plot(self.mon_info, file_path)
# Close AP
self.access_point.close()
# 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]
pkt_gen = pkt_utils.ArpGenerator(**self.pkt_gen_config)
packet = pkt_gen.generate()
self.sendPacketAndMeasure('OFF', network, packet)
@test_tracker_info(uuid="3b5d348d-70bf-483d-8736-13da569473aa")
def test_screenoff_misdirected_arp(self):
network = self.main_network[hc.BAND_5G]
pkt_gen = pkt_utils.ArpGenerator(**self.pkt_gen_config)
packet = pkt_gen.generate(self.ipv4_dst_fake)
self.sendPacketAndMeasure('OFF', network, packet)
@test_tracker_info(uuid="8e534d3b-5a25-429a-a1bb-8119d7d28b5a")
def test_screenoff_directed_ns(self):
network = self.main_network[hc.BAND_5G]
pkt_gen = pkt_utils.NsGenerator(**self.pkt_gen_config)
packet = pkt_gen.generate()
self.sendPacketAndMeasure('OFF', network, packet)
@test_tracker_info(uuid="536d716d-f30b-4d20-9976-e2cbc36c3415")
def test_screenoff_misdirected_ns(self):
network = self.main_network[hc.BAND_5G]
pkt_gen = pkt_utils.NsGenerator(**self.pkt_gen_config)
packet = pkt_gen.generate(self.ipv6_dst_fake)
self.sendPacketAndMeasure('OFF', network, packet)
@test_tracker_info(uuid="5eed3174-8e94-428e-8527-19a9b5a90322")
def test_screenoff_ra_short(self):
network = self.main_network[hc.BAND_5G]
pkt_gen = pkt_utils.RaGenerator(**self.pkt_gen_config)
packet = pkt_gen.generate(RA_SHORT_LIFETIME)
self.sendPacketAndMeasure('OFF', network, packet)
@test_tracker_info(uuid="67867bae-f1c5-44a4-9bd0-2b832ac8059c")
def test_screenoff_ra_long(self):
network = self.main_network[hc.BAND_5G]
pkt_gen = pkt_utils.RaGenerator(**self.pkt_gen_config)
packet = pkt_gen.generate(RA_LONG_LIFETIME)
self.sendPacketAndMeasure('OFF', network, packet)
@test_tracker_info(uuid="db19bc94-3513-45c4-b3a5-d6219649d0bb")
def test_screenoff_directed_dhcp_offer(self):
network = self.main_network[hc.BAND_5G]
pkt_gen = pkt_utils.DhcpOfferGenerator(**self.pkt_gen_config)
packet = pkt_gen.generate()
self.sendPacketAndMeasure('OFF', network, packet)
@test_tracker_info(uuid="a8059869-40ee-4cf3-a957-4b7aed03fcf9")
def test_screenoff_misdirected_dhcp_offer(self):
network = self.main_network[hc.BAND_5G]
pkt_gen = pkt_utils.DhcpOfferGenerator(**self.pkt_gen_config)
packet = pkt_gen.generate(self.mac_dst_fake, self.ipv4_dst_fake)
self.sendPacketAndMeasure('OFF', network, 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]
pkt_gen = pkt_utils.ArpGenerator(**self.pkt_gen_config)
packet = pkt_gen.generate()
self.sendPacketAndMeasure('ON', network, packet)
@test_tracker_info(uuid="406dffae-104e-46cb-9ec2-910aac7aca39")
def test_screenon_misdirected_arp(self):
network = self.main_network[hc.BAND_5G]
pkt_gen = pkt_utils.ArpGenerator(**self.pkt_gen_config)
packet = pkt_gen.generate(self.ipv4_dst_fake)
self.sendPacketAndMeasure('ON', network, packet)
@test_tracker_info(uuid="be4cb543-c710-4041-a770-819e82a6d164")
def test_screenon_directed_ns(self):
network = self.main_network[hc.BAND_5G]
pkt_gen = pkt_utils.NsGenerator(**self.pkt_gen_config)
packet = pkt_gen.generate()
self.sendPacketAndMeasure('ON', network, packet)
@test_tracker_info(uuid="de21d24f-e03e-47a1-8bbb-11953200e870")
def test_screenon_misdirected_ns(self):
network = self.main_network[hc.BAND_5G]
pkt_gen = pkt_utils.NsGenerator(**self.pkt_gen_config)
packet = pkt_gen.generate(self.ipv6_dst_fake)
self.sendPacketAndMeasure('ON', network, packet)
@test_tracker_info(uuid="b424a170-5095-4b47-82eb-50f7b7fdf35d")
def test_screenon_ra_short(self):
network = self.main_network[hc.BAND_5G]
pkt_gen = pkt_utils.RaGenerator(**self.pkt_gen_config)
packet = pkt_gen.generate(RA_SHORT_LIFETIME)
self.sendPacketAndMeasure('ON', network, packet)
@test_tracker_info(uuid="ab627e59-2ee8-4c0d-970b-eeb1d1cecdc1")
def test_screenon_ra_long(self):
network = self.main_network[hc.BAND_5G]
pkt_gen = pkt_utils.RaGenerator(**self.pkt_gen_config)
packet = pkt_gen.generate(RA_LONG_LIFETIME)
self.sendPacketAndMeasure('ON', network, packet)
@test_tracker_info(uuid="ee6514ab-1814-44b9-ba01-63f77ba77c34")
def test_screenon_directed_dhcp_offer(self):
network = self.main_network[hc.BAND_5G]
pkt_gen = pkt_utils.DhcpOfferGenerator(**self.pkt_gen_config)
packet = pkt_gen.generate()
self.sendPacketAndMeasure('ON', network, packet)
@test_tracker_info(uuid="eaebfe98-32da-4ebc-bca7-3b7026d99a4f")
def test_screenon_misdirected_dhcp_offer(self):
network = self.main_network[hc.BAND_5G]
pkt_gen = pkt_utils.DhcpOfferGenerator(**self.pkt_gen_config)
packet = pkt_gen.generate(self.mac_dst_fake, self.ipv4_dst_fake)
self.sendPacketAndMeasure('ON', network, packet)