blob: 6f9dcdd73ab93ef196e0b4161403f67b36a71195 [file] [log] [blame]
Qi Jiang2a128de2018-04-27 23:00:12 -07001#!/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()