| #!/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) |