1#!/usr/bin/env python3.4 2# 3# Copyright 2018 - The Android Open Source Project 4# 5# Licensed under the Apache License, Version 2.0 (the 'License'); 6# you may not use this file except in compliance with the License. 7# You may obtain a copy of the License at 8# 9# http://www.apache.org/licenses/LICENSE-2.0 10# 11# Unless required by applicable law or agreed to in writing, software 12# distributed under the License is distributed on an 'AS IS' BASIS, 13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14# See the License for the specific language governing permissions and 15# limitations under the License. 16 17import time 18from acts import utils 19from acts.controllers.ap_lib import hostapd_constants as hc 20from acts.test_decorators import test_tracker_info 21from acts.test_utils.power import PowerWiFiBaseTest as PWBT 22from acts.test_utils.wifi import wifi_constants as wc 23from acts.test_utils.wifi import wifi_test_utils as wutils 24from acts.test_utils.wifi import wifi_power_test_utils as wputils 25 26 27class PowerWiFiroamingTest(PWBT.PowerWiFiBaseTest): 28 29 # Test cases 30 @test_tracker_info(uuid='392622d3-0c5c-4767-afa2-abfb2058b0b8') 31 def test_screenoff_roaming(self): 32 """Test roaming power consumption with screen off. 33 Change the attenuation level to trigger roaming between two APs 34 35 """ 36 self.log.info('Set attenuation to connect device to both APs') 37 self.set_attenuation(self.atten_level['zero_atten']) 38 # Setup both APs 39 network_main = self.main_network[hc.BAND_2G] 40 network_aux = self.aux_network[hc.BAND_2G] 41 self.brconfigs_aux = self.setup_ap_connection(network_aux) 42 self.brconfigs_main = self.setup_ap_connection(network_main) 43 self.dut.droid.goToSleepNow() 44 time.sleep(5) 45 # Set attenuator to trigger roaming 46 self.dut.log.info('Trigger roaming now') 47 self.set_attenuation(self.atten_level[self.current_test_name]) 48 self.measure_power_and_validate() 49 50 @test_tracker_info(uuid='2fec5208-043a-410a-8fd2-6784d70a3587') 51 def test_screenoff_fastroaming(self): 52 53 # Setup the aux AP 54 network_main = self.main_network[hc.BAND_2G] 55 network_aux = self.aux_network[hc.BAND_2G] 56 # Set the same SSID for the AUX AP for fastroaming purpose 57 network_aux[wc.SSID] = network_main[wc.SSID] 58 # Set attenuator to connect the phone to the aux AP 59 self.log.info('Set attenuation to connect device to the aux AP') 60 self.set_attenuation(self.atten_level[wc.AP_AUX]) 61 self.brconfigs_aux = self.setup_ap_connection(network_aux) 62 # Set attenuator to connect the phone to main AP 63 self.log.info('Set attenuation to connect device to the main AP') 64 self.set_attenuation(self.atten_level[wc.AP_MAIN]) 65 self.brconfigs_main = self.setup_ap_connection(network_main) 66 time.sleep(5) 67 self.dut.droid.goToSleepNow() 68 # Trigger fastroaming 69 self.dut.log.info('Trigger fastroaming now') 70 self.set_attenuation(self.atten_level[wc.AP_AUX]) 71 self.measure_power_and_validate() 72 73 @test_tracker_info(uuid='a0459b7c-74ce-4adb-8e55-c5365bc625eb') 74 def test_screenoff_toggle_between_AP(self): 75 76 # Set attenuator to connect phone to both networks 77 self.log.info('Set attenuation to connect device to both APs') 78 self.set_attenuation(self.atten_level[self.current_test_name]) 79 # Connect to both APs 80 network_main = self.main_network[hc.BAND_2G] 81 network_aux = self.aux_network[hc.BAND_2G] 82 self.brconfigs_main = self.setup_ap_connection(network_main) 83 self.brconfigs_aux = self.setup_ap_connection(network_aux) 84 self.mon_info.duration = self.toggle_interval 85 self.dut.droid.goToSleepNow() 86 time.sleep(5) 87 # Toggle between two networks 88 begin_time = utils.get_current_epoch_time() 89 for i in range(self.toggle_times): 90 self.dut.log.info('Connecting to %s' % network_main[wc.SSID]) 91 self.dut.droid.wifiConnect(network_main) 92 file_path, avg_current = wputils.monsoon_data_collect_save( 93 self.dut, self.mon_info, self.current_test_name) 94 self.dut.log.info('Connecting to %s' % network_aux[wc.SSID]) 95 self.dut.droid.wifiConnect(network_aux) 96 file_path, avg_current = wputils.monsoon_data_collect_save( 97 self.dut, self.mon_info, self.current_test_name) 98 [plot, dt] = wputils.monsoon_data_plot(self.mon_info, file_path) 99 avg_current = dt.source.data['y0'][0] 100 # Take Bugreport 101 if self.bug_report: 102 self.dut.take_bug_report(self.test_name, begin_time) 103 # Path fail check 104 wputils.pass_fail_check(self, avg_current) 105 106 @test_tracker_info(uuid='e5ff95c0-b17e-425c-a903-821ba555a9b9') 107 def test_screenon_toggle_between_AP(self): 108 109 # Set attenuator to connect phone to both networks 110 self.log.info('Set attenuation to connect device to both APs') 111 self.set_attenuation(self.atten_level[self.current_test_name]) 112 # Connect to both APs 113 network_main = self.main_network[hc.BAND_2G] 114 network_aux = self.aux_network[hc.BAND_2G] 115 self.brconfigs_main = self.setup_ap_connection(network_main) 116 self.brconfigs_aux = self.setup_ap_connection(network_aux) 117 self.mon_info.duration = self.toggle_interval 118 time.sleep(5) 119 # Toggle between two networks 120 begin_time = utils.get_current_epoch_time() 121 for i in range(self.toggle_times): 122 self.dut.log.info('Connecting to %s' % network_main[wc.SSID]) 123 self.dut.droid.wifiConnect(network_main) 124 file_path, avg_current = wputils.monsoon_data_collect_save( 125 self.dut, self.mon_info, self.current_test_name) 126 self.dut.log.info('Connecting to %s' % network_aux[wc.SSID]) 127 self.dut.droid.wifiConnect(network_aux) 128 file_path, avg_current = wputils.monsoon_data_collect_save( 129 self.dut, self.mon_info, self.current_test_name) 130 [plot, dt] = wputils.monsoon_data_plot(self.mon_info, file_path) 131 avg_current = dt.source.data['y0'][0] 132 # Take Bugreport 133 if self.bug_report: 134 self.dut.take_bug_report(self.test_name, begin_time) 135 # Path fail check 136 wputils.pass_fail_check(self, avg_current) 137 138 @test_tracker_info(uuid='a16ae337-326f-4d09-990f-42232c3c0dc4') 139 def test_screenoff_wifi_wedge(self): 140 141 # Set attenuator to connect phone to both networks 142 self.log.info('Set attenuation to connect device to both APs') 143 self.set_attenuation(self.atten_level['zero_atten']) 144 # Connect to both APs 145 network_main = self.main_network[hc.BAND_2G] 146 network_aux = self.aux_network[hc.BAND_2G] 147 self.brconfigs_main = self.setup_ap_connection(network_main) 148 self.brconfigs_aux = self.setup_ap_connection(network_aux) 149 self.log.info('Forget network {}'.format(network_aux[wc.SSID])) 150 wutils.wifi_forget_network(self.dut, network_aux[wc.SSID]) 151 self.log.info('Set attenuation to trigger wedge condition') 152 self.set_attenuation(self.atten_level[self.current_test_name]) 153 self.dut.droid.goToSleepNow() 154 self.measure_power_and_validate() 155