• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/env python3.4
2#
3#   Copyright 2016 - 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 math
18import os
19from acts.test_utils.tel.TelephonyBaseTest import TelephonyBaseTest
20from acts.test_utils.tel.tel_defines import WFC_MODE_WIFI_PREFERRED
21from acts.test_utils.tel.tel_test_utils import call_setup_teardown
22from acts.test_utils.tel.tel_test_utils import ensure_phones_default_state
23from acts.test_utils.tel.tel_test_utils import ensure_phones_idle
24from acts.test_utils.tel.tel_test_utils import ensure_wifi_connected
25from acts.test_utils.tel.tel_test_utils import hangup_call
26from acts.test_utils.tel.tel_test_utils import is_wfc_enabled
27from acts.test_utils.tel.tel_test_utils import set_phone_screen_on
28from acts.test_utils.tel.tel_test_utils import set_wfc_mode
29from acts.test_utils.tel.tel_test_utils import toggle_airplane_mode
30from acts.test_utils.tel.tel_test_utils import verify_incall_state
31from acts.test_utils.tel.tel_voice_utils import is_phone_in_call_3g
32from acts.test_utils.tel.tel_voice_utils import is_phone_in_call_2g
33from acts.test_utils.tel.tel_voice_utils import is_phone_in_call_iwlan
34from acts.test_utils.tel.tel_voice_utils import is_phone_in_call_volte
35from acts.test_utils.tel.tel_voice_utils import phone_idle_2g
36from acts.test_utils.tel.tel_voice_utils import phone_idle_3g
37from acts.test_utils.tel.tel_voice_utils import phone_idle_iwlan
38from acts.test_utils.tel.tel_voice_utils import phone_idle_volte
39from acts.test_utils.tel.tel_voice_utils import phone_setup_csfb
40from acts.test_utils.tel.tel_voice_utils import phone_setup_iwlan
41from acts.test_utils.tel.tel_voice_utils import phone_setup_voice_3g
42from acts.test_utils.tel.tel_voice_utils import phone_setup_voice_2g
43from acts.test_utils.tel.tel_voice_utils import phone_setup_volte
44from acts.utils import create_dir
45from acts.utils import disable_doze
46from acts.utils import get_current_human_time
47from acts.utils import set_adaptive_brightness
48from acts.utils import set_ambient_display
49from acts.utils import set_auto_rotate
50from acts.utils import set_location_service
51from acts.utils import set_mobile_data_always_on
52
53# Monsoon output Voltage in V
54MONSOON_OUTPUT_VOLTAGE = 4.2
55# Monsoon output max current in A
56MONSOON_MAX_CURRENT = 7.8
57
58# Default power test pass criteria
59DEFAULT_POWER_PASS_CRITERIA = 999
60
61# Sampling rate in Hz
62ACTIVE_CALL_TEST_SAMPLING_RATE = 100
63# Sample duration in seconds
64ACTIVE_CALL_TEST_SAMPLE_TIME = 300
65# Offset time in seconds
66ACTIVE_CALL_TEST_OFFSET_TIME = 180
67
68# Sampling rate in Hz
69IDLE_TEST_SAMPLING_RATE = 100
70# Sample duration in seconds
71IDLE_TEST_SAMPLE_TIME = 2400
72# Offset time in seconds
73IDLE_TEST_OFFSET_TIME = 360
74
75# Constant for RAT
76RAT_LTE = 'lte'
77RAT_3G = '3g'
78RAT_2G = '2g'
79# Constant for WIFI
80WIFI_5G = '5g'
81WIFI_2G = '2g'
82
83# For wakeup ping test, the frequency to wakeup. In unit of second.
84WAKEUP_PING_TEST_WAKEUP_FREQ = 60
85
86WAKEUP_PING_TEST_NUMBER_OF_ALARM = math.ceil(
87    (IDLE_TEST_SAMPLE_TIME * 60 + IDLE_TEST_OFFSET_TIME) /
88    WAKEUP_PING_TEST_WAKEUP_FREQ)
89
90
91class TelPowerTest(TelephonyBaseTest):
92    def __init__(self, controllers):
93        TelephonyBaseTest.__init__(self, controllers)
94        self.tests = (
95            # Note: For all these power tests, please do environment calibration
96            # and baseline for pass criteria.
97            # All pass criteria information should be included in test config file.
98            # The test result will be meaning less if pass criteria is not correct.
99            "test_power_active_call_3g",
100            "test_power_active_call_volte",
101            "test_power_active_call_wfc_2g_apm",
102            "test_power_active_call_wfc_2g_lte_volte_on",
103            "test_power_active_call_wfc_5g_apm",
104            "test_power_active_call_wfc_5g_lte_volte_on",
105            "test_power_idle_baseline",
106            "test_power_idle_baseline_wifi_connected",
107            "test_power_idle_wfc_2g_apm",
108            "test_power_idle_wfc_2g_lte",
109            "test_power_idle_lte_volte_enabled",
110            "test_power_idle_lte_volte_disabled",
111            "test_power_idle_3g",
112            "test_power_idle_lte_volte_enabled_wakeup_ping",
113            "test_power_idle_lte_volte_disabled_wakeup_ping",
114            "test_power_idle_3g_wakeup_ping",
115
116            # Mobile Data Always On
117            "test_power_mobile_data_always_on_lte",
118            "test_power_mobile_data_always_on_wcdma",
119            "test_power_mobile_data_always_on_gsm",
120            "test_power_mobile_data_always_on_1x",
121            "test_power_mobile_data_always_on_lte_wifi_on",
122            "test_power_mobile_data_always_on_wcdma_wifi_on",
123            "test_power_mobile_data_always_on_gsm_wifi_on",
124            "test_power_mobile_data_always_on_1x_wifi_on")
125
126    def setup_class(self):
127        super().setup_class()
128        self.mon = self.monsoons[0]
129        self.mon.set_voltage(MONSOON_OUTPUT_VOLTAGE)
130        self.mon.set_max_current(MONSOON_MAX_CURRENT)
131        # Monsoon phone
132        self.mon.dut = self.ad = self.android_devices[0]
133        self.ad.reboot()
134        set_adaptive_brightness(self.ad, False)
135        set_ambient_display(self.ad, False)
136        set_auto_rotate(self.ad, False)
137        set_location_service(self.ad, False)
138        # This is not needed for AOSP build
139        disable_doze(self.ad)
140        set_phone_screen_on(self.log, self.ad, 15)
141
142        self.wifi_network_ssid_2g = self.user_params["wifi_network_ssid_2g"]
143        self.wifi_network_pass_2g = self.user_params["wifi_network_pass_2g"]
144        self.wifi_network_ssid_5g = self.user_params["wifi_network_ssid_5g"]
145        self.wifi_network_pass_5g = self.user_params["wifi_network_pass_5g"]
146
147        self.monsoon_log_path = os.path.join(self.log_path, "MonsoonLog")
148        create_dir(self.monsoon_log_path)
149        return True
150
151    def _save_logs_for_power_test(self, monsoon_result, bug_report):
152        if monsoon_result and "monsoon_log_for_power_test" in self.user_params:
153            monsoon_result.save_to_text_file(
154                [monsoon_result],
155                os.path.join(self.monsoon_log_path, self.test_id))
156        if bug_report and "bug_report_for_power_test" in self.user_params:
157            self.android_devices[0].take_bug_report(self.test_name,
158                                                    self.begin_time)
159
160    def _setup_apm(self):
161        if not toggle_airplane_mode(self.log, self.ad, True):
162            self.log.error("Phone failed to turn on airplane mode.")
163            return False
164        else:
165            self.log.info("Airplane mode is enabled successfully.")
166            return True
167
168    def _setup_wifi(self, wifi):
169        if wifi == WIFI_5G:
170            network_ssid = self.wifi_network_ssid_5g
171            network_pass = self.wifi_network_pass_5g
172        else:
173            network_ssid = self.wifi_network_ssid_2g
174            network_pass = self.wifi_network_pass_2g
175        if not ensure_wifi_connected(
176                self.log, self.ad, network_ssid, network_pass, retry=3):
177            self.log.error("Wifi %s connection fails." % wifi)
178            return False
179        self.log.info("WIFI %s is connected successfully." % wifi)
180        return True
181
182    def _setup_wfc(self):
183        if not set_wfc_mode(self.log, self.ad, WFC_MODE_WIFI_PREFERRED):
184            self.log.error("Phone failed to enable Wifi-Calling.")
185            return False
186        self.log.info("Phone is set in Wifi-Calling successfully.")
187        if not phone_idle_iwlan(self.log, self.ad):
188            self.log.error("DUT not in WFC enabled state.")
189            return False
190        return True
191
192    def _setup_lte_volte_enabled(self):
193        if not phone_setup_volte(self.log, self.ad):
194            self.log.error("Phone failed to enable VoLTE.")
195            return False
196        self.log.info("VOLTE is enabled successfully.")
197        return True
198
199    def _setup_lte_volte_disabled(self):
200        if not phone_setup_csfb(self.log, self.ad):
201            self.log.error("Phone failed to setup CSFB.")
202            return False
203        self.log.info("VOLTE is disabled successfully.")
204        return True
205
206    def _setup_3g(self):
207        if not phone_setup_voice_3g(self.log, self.ad):
208            self.log.error("Phone failed to setup 3g.")
209            return False
210        self.log.info("RAT 3G is enabled successfully.")
211        return True
212
213    def _setup_2g(self):
214        if not phone_setup_voice_2g(self.log, self.ad):
215            self.log.error("Phone failed to setup 2g.")
216            return False
217        self.log.info("RAT 2G is enabled successfully.")
218        return True
219
220    def _setup_rat(self, rat, volte):
221        if rat == RAT_3G:
222            return self._setup_3g()
223        elif rat == RAT_2G:
224            return self._setup_2g()
225        elif rat == RAT_LTE and volte:
226            return self._setup_lte_volte_enabled()
227        elif rat == RAT_LTE and not volte:
228            return self._setup_lte_volte_disabled()
229
230    def _start_alarm(self):
231        # TODO: This one works with a temporary SL4A API to start alarm.
232        # https://googleplex-android-review.git.corp.google.com/#/c/1562684/
233        # simulate normal user behavior -- wake up every 1 minutes and do ping
234        # (transmit data)
235        try:
236            alarm_id = self.ad.droid.telephonyStartRecurringAlarm(
237                WAKEUP_PING_TEST_NUMBER_OF_ALARM,
238                1000 * WAKEUP_PING_TEST_WAKEUP_FREQ, "PING_GOOGLE", None)
239        except:
240            self.log.error("Failed to setup periodic ping.")
241            return False
242        if alarm_id is None:
243            self.log.error("Start alarm for periodic ping failed.")
244            return False
245        self.log.info("Set up periodic ping successfully.")
246        return True
247
248    def _setup_phone_active_call(self):
249        if not call_setup_teardown(
250                self.log, self.ad, self.android_devices[1], ad_hangup=None):
251            self.log.error("Setup Call failed.")
252            return False
253        self.log.info("Setup active call successfully.")
254        return True
255
256    def _test_setup(self,
257                    apm=False,
258                    rat=None,
259                    volte=False,
260                    wifi=None,
261                    wfc=False,
262                    mobile_data_always_on=False,
263                    periodic_ping=False,
264                    active_call=False):
265        if not ensure_phones_default_state(self.log, self.android_devices):
266            self.log.error("Fail to set phones in default state")
267            return False
268        else:
269            self.log.info("Set phones in default state successfully")
270        if apm and not self._setup_apm(): return False
271        if rat and not self._setup_rat(rat, volte): return False
272        if wifi and not self._setup_wifi(wifi): return False
273        if wfc and not self._setup_wfc(): return False
274        if mobile_data_always_on: set_mobile_data_always_on(self.ad, True)
275        if periodic_ping and not self._start_alarm(): return False
276        if active_call and not self._setup_phone_active_call(): return False
277        self.ad.droid.goToSleepNow()
278        return True
279
280    def _power_test(self, phone_check_func_after_power_test=None, **kwargs):
281        # Test passing criteria can be defined in test config file with the
282        # maximum mA allowed for the test case in "pass_criteria"->test_name
283        # field. By default it will set to 999.
284        pass_criteria = self._get_pass_criteria(self.test_name)
285        bug_report = True
286        active_call = kwargs.get('active_call')
287        average_current = 0
288        result = None
289        self.log.info("Test %s: %s" % (self.test_name, kwargs))
290        if active_call:
291            sample_rate = ACTIVE_CALL_TEST_SAMPLING_RATE
292            sample_time = ACTIVE_CALL_TEST_SAMPLE_TIME
293            offset_time = ACTIVE_CALL_TEST_OFFSET_TIME
294        else:
295            sample_rate = IDLE_TEST_SAMPLING_RATE
296            sample_time = IDLE_TEST_SAMPLE_TIME
297            offset_time = IDLE_TEST_OFFSET_TIME
298        try:
299            if not self._test_setup(**kwargs):
300                self.log.error("DUT Failed to Set Up Properly.")
301                return False
302
303            if ((phone_check_func_after_power_test is not None) and
304                (not phone_check_func_after_power_test(
305                    self.log, self.android_devices[0]))):
306                self.log.error(
307                    "Phone is not in correct status before power test.")
308                return False
309
310            result = self.mon.measure_power(sample_rate, sample_time,
311                                            self.test_id, offset_time)
312            average_current = result.average_current
313            if ((phone_check_func_after_power_test is not None) and
314                (not phone_check_func_after_power_test(
315                    self.log, self.android_devices[0]))):
316                self.log.error(
317                    "Phone is not in correct status after power test.")
318                return False
319            if active_call:
320                if not verify_incall_state(self.log, [
321                        self.android_devices[0], self.android_devices[1]
322                ], True):
323                    self.log.error("Call drop during power test.")
324                    return False
325                else:
326                    hangup_call(self.log, self.android_devices[1])
327            if (average_current <= pass_criteria):
328                bug_report = False
329                return True
330        finally:
331            self._save_logs_for_power_test(result, bug_report)
332            self.log.info("{} Result: {} mA, pass criteria: {} mA".format(
333                self.test_id, average_current, pass_criteria))
334
335    def _get_pass_criteria(self, test_name):
336        """Get the test passing criteria.
337           Test passing criteria can be defined in test config file with the
338           maximum mA allowed for the test case in "pass_criteria"->test_name
339           field. By default it will set to 999.
340        """
341        try:
342            pass_criteria = int(self.user_params["pass_criteria"][test_name])
343        except KeyError:
344            pass_criteria = DEFAULT_POWER_PASS_CRITERIA
345        return pass_criteria
346
347    @TelephonyBaseTest.tel_test_wrap
348    def test_power_active_call_volte(self):
349        """Power measurement test for active VoLTE call.
350
351        Steps:
352        1. DUT idle, in LTE mode, VoLTE enabled.
353        2. Make a phone Call from DUT to PhoneB. Answer on PhoneB.
354            Make sure DUT is in VoLTE call.
355        3. Turn off screen and wait for 3 minutes.
356            Then measure power consumption for 5 minutes and get average.
357
358        Expected Results:
359        Average power consumption should be within pre-defined limit.
360
361        Returns:
362        True if Pass, False if Fail.
363
364        Note: Please calibrate your test environment and baseline pass criteria.
365        Pass criteria info should be in test config file.
366        """
367        return self._power_test(
368            rat=RAT_LTE,
369            volte=True,
370            active_call=True,
371            phone_check_func_after_power_test=is_phone_in_call_volte)
372
373    @TelephonyBaseTest.tel_test_wrap
374    def test_power_active_call_3g(self):
375        """Power measurement test for active CS(3G) call.
376
377        Steps:
378        1. DUT idle, in 3G mode.
379        2. Make a phone Call from DUT to PhoneB. Answer on PhoneB.
380            Make sure DUT is in CS(3G) call.
381        3. Turn off screen and wait for 3 minutes.
382            Then measure power consumption for 5 minutes and get average.
383
384        Expected Results:
385        Average power consumption should be within pre-defined limit.
386
387        Returns:
388        True if Pass, False if Fail.
389
390        Note: Please calibrate your test environment and baseline pass criteria.
391        Pass criteria info should be in test config file.
392        """
393        return self._power_test(
394            rat=RAT_3G,
395            active_call=True,
396            phone_check_func_after_power_test=is_phone_in_call_3g)
397
398    @TelephonyBaseTest.tel_test_wrap
399    def test_power_active_call_2g(self):
400        """Power measurement test for active CS(2G) call.
401
402        Steps:
403        1. DUT idle, in 2G mode.
404        2. Make a phone Call from DUT to PhoneB. Answer on PhoneB.
405            Make sure DUT is in CS(2G) call.
406        3. Turn off screen and wait for 3 minutes.
407            Then measure power consumption for 5 minutes and get average.
408
409        Expected Results:
410        Average power consumption should be within pre-defined limit.
411
412        Returns:
413        True if Pass, False if Fail.
414
415        Note: Please calibrate your test environment and baseline pass criteria.
416        Pass criteria info should be in test config file.
417        """
418        return self._power_test(
419            rat=RAT_2G,
420            active_call=True,
421            phone_check_func_after_power_test=is_phone_in_call_2g)
422
423    @TelephonyBaseTest.tel_test_wrap
424    def test_power_active_call_wfc_wifi2g_apm(self):
425        """Power measurement test for active WiFi call.
426
427        Steps:
428        1. DUT idle, in Airplane mode, connect to 2G WiFi,
429            WiFi Calling enabled (WiFi-preferred mode).
430        2. Make a phone Call from DUT to PhoneB. Answer on PhoneB.
431            Make sure DUT is in WFC call.
432        3. Turn off screen and wait for 3 minutes.
433            Then measure power consumption for 5 minutes and get average.
434
435        Expected Results:
436        Average power consumption should be within pre-defined limit.
437
438        Returns:
439        True if Pass, False if Fail.
440
441        Note: Please calibrate your test environment and baseline pass criteria.
442        Pass criteria info should be in test config file.
443        """
444        return self._power_test(
445            apm=True,
446            wifi=WIFI_2G,
447            wfc=True,
448            active_call=True,
449            phone_check_func_after_power_test=is_phone_in_call_iwlan)
450
451    @TelephonyBaseTest.tel_test_wrap
452    def test_power_active_call_wfc_wifi2g_lte_volte_enabled(self):
453        """Power measurement test for active WiFi call.
454
455        Steps:
456        1. DUT idle, LTE cellular data network, VoLTE is On, connect to 2G WiFi,
457            WiFi Calling enabled (WiFi-preferred).
458        2. Make a phone Call from DUT to PhoneB. Answer on PhoneB.
459            Make sure DUT is in WFC call.
460        3. Turn off screen and wait for 3 minutes.
461            Then measure power consumption for 5 minutes and get average.
462
463        Expected Results:
464        Average power consumption should be within pre-defined limit.
465
466        Returns:
467        True if Pass, False if Fail.
468
469        Note: Please calibrate your test environment and baseline pass criteria.
470        Pass criteria info should be in test config file.
471        """
472        return self._power_test(
473            rat=RAT_LTE,
474            volte=True,
475            wifi=WIFI_2G,
476            wfc=True,
477            active_call=True,
478            phone_check_func_after_power_test=is_phone_in_call_iwlan)
479
480    @TelephonyBaseTest.tel_test_wrap
481    def test_power_active_call_wfc_wifi5g_apm(self):
482        """Power measurement test for active WiFi call.
483
484        Steps:
485        1. DUT idle, in Airplane mode, connect to 5G WiFi,
486            WiFi Calling enabled (WiFi-preferred mode).
487        2. Make a phone Call from DUT to PhoneB. Answer on PhoneB.
488            Make sure DUT is in WFC call.
489        3. Turn off screen and wait for 3 minutes.
490            Then measure power consumption for 5 minutes and get average.
491
492        Expected Results:
493        Average power consumption should be within pre-defined limit.
494
495        Returns:
496        True if Pass, False if Fail.
497
498        Note: Please calibrate your test environment and baseline pass criteria.
499        Pass criteria info should be in test config file.
500        """
501        return self._power_test(
502            apm=True,
503            wifi=WIFI_5G,
504            wfc=True,
505            active_call=True,
506            phone_check_func_after_power_test=is_phone_in_call_iwlan)
507
508    @TelephonyBaseTest.tel_test_wrap
509    def test_power_active_call_wfc_wifi5g_lte_volte_enabled(self):
510        """Power measurement test for active WiFi call.
511
512        Steps:
513        1. DUT idle, LTE cellular data network, VoLTE is On, connect to 5G WiFi,
514            WiFi Calling enabled (WiFi-preferred).
515        2. Make a phone Call from DUT to PhoneB. Answer on PhoneB.
516            Make sure DUT is in WFC call.
517        3. Turn off screen and wait for 3 minutes.
518            Then measure power consumption for 5 minutes and get average.
519
520        Expected Results:
521        Average power consumption should be within pre-defined limit.
522
523        Returns:
524        True if Pass, False if Fail.
525
526        Note: Please calibrate your test environment and baseline pass criteria.
527        Pass criteria info should be in test config file.
528        """
529        return self._power_test(
530            rat=RAT_LTE,
531            volte=True,
532            wifi=WIFI_5G,
533            wfc=True,
534            active_call=True,
535            phone_check_func_after_power_test=is_phone_in_call_iwlan)
536
537    @TelephonyBaseTest.tel_test_wrap
538    def test_power_idle_baseline(self):
539        """Power measurement test for phone idle baseline.
540
541        Steps:
542        1. DUT idle, in Airplane mode. WiFi disabled, WiFi Calling disabled.
543        2. Turn off screen and wait for 6 minutes. Then measure power
544            consumption for 40 minutes and get average.
545
546        Expected Results:
547        Average power consumption should be within pre-defined limit.
548
549        Returns:
550        True if Pass, False if Fail.
551
552        Note: Please calibrate your test environment and baseline pass criteria.
553        Pass criteria info should be in test config file.
554        """
555        return self._power_test(apm=True)
556
557    @TelephonyBaseTest.tel_test_wrap
558    def test_power_idle_baseline_wifi2g_connected(self):
559        """Power measurement test for phone idle baseline (WiFi connected).
560
561        Steps:
562        1. DUT idle, in Airplane mode. WiFi connected to 2.4G WiFi,
563            WiFi Calling disabled.
564        2. Turn off screen and wait for 6 minutes. Then measure power
565            consumption for 40 minutes and get average.
566
567        Expected Results:
568        Average power consumption should be within pre-defined limit.
569
570        Returns:
571        True if Pass, False if Fail.
572
573        Note: Please calibrate your test environment and baseline pass criteria.
574        Pass criteria info should be in test config file.
575        """
576        return self._power_test(apm=True, wifi=WIFI_2G)
577
578    @TelephonyBaseTest.tel_test_wrap
579    def test_power_idle_wfc_wifi2g_apm(self):
580        """Power measurement test for phone idle WiFi Calling Airplane Mode.
581
582        Steps:
583        1. DUT idle, in Airplane mode. Connected to 2G WiFi,
584            WiFi Calling enabled (WiFi preferred).
585        2. Turn off screen and wait for 6 minutes. Then measure power
586            consumption for 40 minutes and get average.
587
588        Expected Results:
589        Average power consumption should be within pre-defined limit.
590
591        Returns:
592        True if Pass, False if Fail.
593
594        Note: Please calibrate your test environment and baseline pass criteria.
595        Pass criteria info should be in test config file.
596        """
597        return self._power_test(
598            apm=True,
599            wifi=WIFI_2G,
600            wfc=True,
601            phone_check_func_after_power_test=phone_idle_iwlan)
602
603    @TelephonyBaseTest.tel_test_wrap
604    def test_power_idle_wfc_wifi2g_lte_volte_enabled(self):
605        """Power measurement test for phone idle WiFi Calling LTE VoLTE enabled.
606
607        Steps:
608        1. DUT idle, in LTE mode, VoLTE enabled. Connected to 2G WiFi,
609            WiFi Calling enabled (WiFi preferred).
610        2. Turn off screen and wait for 6 minutes. Then measure power
611            consumption for 40 minutes and get average.
612
613        Expected Results:
614        Average power consumption should be within pre-defined limit.
615
616        Returns:
617        True if Pass, False if Fail.
618
619        Note: Please calibrate your test environment and baseline pass criteria.
620        Pass criteria info should be in test config file.
621        """
622        return self._power_test(
623            rat=RAT_LTE,
624            volte=True,
625            wifi=WIFI_2G,
626            wfc=True,
627            phone_check_func_after_power_test=phone_idle_iwlan)
628
629    @TelephonyBaseTest.tel_test_wrap
630    def test_power_idle_lte_volte_enabled(self):
631        """Power measurement test for phone idle LTE VoLTE enabled.
632
633        Steps:
634        1. DUT idle, in LTE mode, VoLTE enabled. WiFi disabled,
635            WiFi Calling disabled.
636        2. Turn off screen and wait for 6 minutes. Then measure power
637            consumption for 40 minutes and get average.
638
639        Expected Results:
640        Average power consumption should be within pre-defined limit.
641
642        Returns:
643        True if Pass, False if Fail.
644
645        Note: Please calibrate your test environment and baseline pass criteria.
646        Pass criteria info should be in test config file.
647        """
648        return self._power_test(
649            rat=RAT_LTE,
650            volte=True,
651            phone_check_func_after_power_test=phone_idle_volte)
652
653    @TelephonyBaseTest.tel_test_wrap
654    def test_power_idle_lte_volte_enabled_wifi2g(self):
655        """Power measurement test for phone idle LTE VoLTE enabled.
656
657        Steps:
658        1. DUT idle, in LTE mode, VoLTE enabled. WiFi enabled,
659            WiFi Calling disabled.
660        2. Turn off screen and wait for 6 minutes. Then measure power
661            consumption for 40 minutes and get average.
662
663        Expected Results:
664        Average power consumption should be within pre-defined limit.
665
666        Returns:
667        True if Pass, False if Fail.
668
669        Note: Please calibrate your test environment and baseline pass criteria.
670        Pass criteria info should be in test config file.
671        """
672        return self._power_test(
673            rat=RAT_LTE,
674            volte=True,
675            wifi=WIFI_2G,
676            phone_check_func_after_power_test=phone_idle_volte)
677
678    @TelephonyBaseTest.tel_test_wrap
679    def test_power_idle_lte_volte_disabled(self):
680        """Power measurement test for phone idle LTE VoLTE disabled.
681
682        Steps:
683        1. DUT idle, in LTE mode, VoLTE disabled. WiFi disabled,
684            WiFi Calling disabled.
685        2. Turn off screen and wait for 6 minutes. Then measure power
686            consumption for 40 minutes and get average.
687
688        Expected Results:
689        Average power consumption should be within pre-defined limit.
690
691        Returns:
692        True if Pass, False if Fail.
693
694        Note: Please calibrate your test environment and baseline pass criteria.
695        Pass criteria info should be in test config file.
696        """
697        return self._power_test(rat=RAT_LTE)
698
699    @TelephonyBaseTest.tel_test_wrap
700    def test_power_idle_3g(self):
701        """Power measurement test for phone idle 3G.
702
703        Steps:
704        1. DUT idle, in 3G mode. WiFi disabled, WiFi Calling disabled.
705        2. Turn off screen and wait for 6 minutes. Then measure power
706            consumption for 40 minutes and get average.
707
708        Expected Results:
709        Average power consumption should be within pre-defined limit.
710
711        Returns:
712        True if Pass, False if Fail.
713
714        Note: Please calibrate your test environment and baseline pass criteria.
715        Pass criteria info should be in test config file.
716        """
717        return self._power_test(
718            rat=RAT_3G, phone_check_func_after_power_test=phone_idle_3g)
719
720    @TelephonyBaseTest.tel_test_wrap
721    def test_power_idle_3g_wifi2g(self):
722        """Power measurement test for phone idle 3G.
723
724        Steps:
725        1. DUT idle, in 3G mode. WiFi enabled, WiFi Calling disabled.
726        2. Turn off screen and wait for 6 minutes. Then measure power
727            consumption for 40 minutes and get average.
728
729        Expected Results:
730        Average power consumption should be within pre-defined limit.
731
732        Returns:
733        True if Pass, False if Fail.
734
735        Note: Please calibrate your test environment and baseline pass criteria.
736        Pass criteria info should be in test config file.
737        """
738        return self._power_test(
739            rat=RAT_3G,
740            wifi=WIFI_2G,
741            phone_check_func_after_power_test=phone_idle_3g)
742
743    @TelephonyBaseTest.tel_test_wrap
744    def test_power_idle_2g(self):
745        """Power measurement test for phone idle 3G.
746
747        Steps:
748        1. DUT idle, in 2G mode. WiFi disabled, WiFi Calling disabled.
749        2. Turn off screen and wait for 6 minutes. Then measure power
750            consumption for 40 minutes and get average.
751
752        Expected Results:
753        Average power consumption should be within pre-defined limit.
754
755        Returns:
756        True if Pass, False if Fail.
757
758        Note: Please calibrate your test environment and baseline pass criteria.
759        Pass criteria info should be in test config file.
760        """
761        return self._power_test(
762            rat=RAT_2G, phone_check_func_after_power_test=phone_idle_2g)
763
764    @TelephonyBaseTest.tel_test_wrap
765    def test_power_idle_2g_wifi2g(self):
766        """Power measurement test for phone idle 3G.
767
768        Steps:
769        1. DUT idle, in 2G mode. WiFi disabled, WiFi Calling disabled.
770        2. Turn off screen and wait for 6 minutes. Then measure power
771            consumption for 40 minutes and get average.
772
773        Expected Results:
774        Average power consumption should be within pre-defined limit.
775
776        Returns:
777        True if Pass, False if Fail.
778
779        Note: Please calibrate your test environment and baseline pass criteria.
780        Pass criteria info should be in test config file.
781        """
782        return self._power_test(
783            rat=RAT_2G,
784            wifi=WIFI_2G,
785            phone_check_func_after_power_test=phone_idle_2g)
786
787    # TODO: This one is not working right now. Requires SL4A API to start alarm.
788    @TelephonyBaseTest.tel_test_wrap
789    def test_power_idle_lte_volte_enabled_wakeup_ping(self):
790        """Power measurement test for phone LTE VoLTE enabled Wakeup Ping every
791        1 minute.
792
793        Steps:
794        1. DUT idle, in LTE mode, VoLTE enabled. WiFi disabled,
795            WiFi Calling disabled.
796        2. Start script to wake up AP every 1 minute, after wakeup,
797            DUT send http Request to Google.com then go to sleep.
798        3. Turn off screen and wait for 6 minutes. Then measure power
799            consumption for 40 minutes and get average.
800
801        Expected Results:
802        Average power consumption should be within pre-defined limit.
803
804        Returns:
805        True if Pass, False if Fail.
806
807        Note: Please calibrate your test environment and baseline pass criteria.
808        Pass criteria info should be in test config file.
809        """
810        return self._power_test(
811            rat=RAT_LTE,
812            volte=True,
813            periodic_ping=True,
814            phone_check_func_after_power_test=phone_idle_iwlan)
815
816    # TODO: This one is not working right now. Requires SL4A API to start alarm.
817    @TelephonyBaseTest.tel_test_wrap
818    def test_power_idle_lte_volte_disabled_wakeup_ping(self):
819        """Power measurement test for phone LTE VoLTE disabled Wakeup Ping every
820        1 minute.
821
822        Steps:
823        1. DUT idle, in LTE mode, VoLTE disabled. WiFi disabled,
824            WiFi Calling disabled.
825        2. Start script to wake up AP every 1 minute, after wakeup,
826            DUT send http Request to Google.com then go to sleep.
827        3. Turn off screen and wait for 6 minutes. Then measure power
828            consumption for 40 minutes and get average.
829
830        Expected Results:
831        Average power consumption should be within pre-defined limit.
832
833        Returns:
834        True if Pass, False if Fail.
835
836        Note: Please calibrate your test environment and baseline pass criteria.
837        Pass criteria info should be in test config file.
838        """
839        return self._power_test(rat=RAT_LTE, periodic_ping=True)
840
841    # TODO: This one is not working right now. Requires SL4A API to start alarm.
842    @TelephonyBaseTest.tel_test_wrap
843    def test_power_idle_3g_wakeup_ping(self):
844        """Power measurement test for phone 3G Wakeup Ping every 1 minute.
845
846        Steps:
847        1. DUT idle, in 3G mode. WiFi disabled, WiFi Calling disabled.
848        2. Start script to wake up AP every 1 minute, after wakeup,
849            DUT send http Request to Google.com then go to sleep.
850        3. Turn off screen and wait for 6 minutes. Then measure power
851            consumption for 40 minutes and get average.
852
853        Expected Results:
854        Average power consumption should be within pre-defined limit.
855
856        Returns:
857        True if Pass, False if Fail.
858
859        Note: Please calibrate your test environment and baseline pass criteria.
860        Pass criteria info should be in test config file.
861        """
862        return self._power_test(
863            rat=RAT_3G,
864            periodic_ping=True,
865            phone_check_func_after_power_test=phone_idle_3g)
866
867    @TelephonyBaseTest.tel_test_wrap
868    def test_power_idle_lte_volte_enabled_mobile_data_always_on(self):
869        """Power measurement test for phone idle LTE VoLTE enabled.
870
871        Steps:
872        1. DUT idle, in LTE mode, VoLTE enabled. WiFi disabled,
873            WiFi Calling disabled.
874        2. Turn on mobile data always on
875        3. Turn off screen and wait for 6 minutes. Then measure power
876            consumption for 40 minutes and get average.
877
878        Expected Results:
879        Average power consumption should be within pre-defined limit.
880
881        Returns:
882        True if Pass, False if Fail.
883
884        Note: Please calibrate your test environment and baseline pass criteria.
885        Pass criteria info should be in test config file.
886        """
887        return self._power_test(
888            rat=RAT_LTE,
889            volte=True,
890            mobile_data_always_on=True,
891            phone_check_func_after_power_test=phone_idle_volte)
892
893    @TelephonyBaseTest.tel_test_wrap
894    def test_power_idle_lte_volte_enabled_wifi2g_mobile_data_always_on(self):
895        """Power measurement test for phone idle LTE VoLTE enabled.
896
897        Steps:
898        1. DUT idle, in LTE mode, VoLTE enabled. WiFi enabled,
899            WiFi Calling disabled.
900        2. Turn on mobile data always on
901        3. Turn off screen and wait for 6 minutes. Then measure power
902            consumption for 40 minutes and get average.
903
904        Expected Results:
905        Average power consumption should be within pre-defined limit.
906
907        Returns:
908        True if Pass, False if Fail.
909
910        Note: Please calibrate your test environment and baseline pass criteria.
911        Pass criteria info should be in test config file.
912        """
913        return self._power_test(
914            rat=RAT_LTE,
915            volte=True,
916            wifi=WIFI_2G,
917            mobile_data_always_on=True,
918            phone_check_func_after_power_test=phone_idle_volte)
919
920    @TelephonyBaseTest.tel_test_wrap
921    def test_power_idle_lte_volte_disabled_mobile_data_always_on(self):
922        """Power measurement test for phone idle LTE VoLTE disabled.
923
924        Steps:
925        1. DUT idle, in LTE mode, VoLTE disabled. WiFi disabled,
926            WiFi Calling disabled.
927        2. Turn on mobile data always on
928        3. Turn off screen and wait for 6 minutes. Then measure power
929            consumption for 40 minutes and get average.
930
931        Expected Results:
932        Average power consumption should be within pre-defined limit.
933
934        Returns:
935        True if Pass, False if Fail.
936
937        Note: Please calibrate your test environment and baseline pass criteria.
938        Pass criteria info should be in test config file.
939        """
940        return self._power_test(rat=RAT_LTE, mobile_data_always_on=True)
941
942    @TelephonyBaseTest.tel_test_wrap
943    def test_power_idle_3g_mobile_data_always_on(self):
944        """Power measurement test for phone idle 3G.
945
946        Steps:
947        1. DUT idle, in 3G mode. WiFi disabled, WiFi Calling disabled.
948        2. Turn on mobile data always on
949        3. Turn off screen and wait for 6 minutes. Then measure power
950            consumption for 40 minutes and get average.
951
952        Expected Results:
953        Average power consumption should be within pre-defined limit.
954
955        Returns:
956        True if Pass, False if Fail.
957
958        Note: Please calibrate your test environment and baseline pass criteria.
959        Pass criteria info should be in test config file.
960        """
961        return self._power_test(
962            rat=RAT_3G,
963            mobile_data_always_on=True,
964            phone_check_func_after_power_test=phone_idle_3g)
965
966    @TelephonyBaseTest.tel_test_wrap
967    def test_power_idle_3g_wifi2g_mobile_data_always_on(self):
968        """Power measurement test for phone idle 3G.
969
970        Steps:
971        1. DUT idle, in 3G mode. WiFi enabled, WiFi Calling disabled.
972        2. Turn on mobile data always on
973        3. Turn off screen and wait for 6 minutes. Then measure power
974            consumption for 40 minutes and get average.
975
976        Expected Results:
977        Average power consumption should be within pre-defined limit.
978
979        Returns:
980        True if Pass, False if Fail.
981
982        Note: Please calibrate your test environment and baseline pass criteria.
983        Pass criteria info should be in test config file.
984        """
985        return self._power_test(
986            rat=RAT_3G,
987            wifi=WIFI_2G,
988            mobile_data_always_on=True,
989            phone_check_func_after_power_test=phone_idle_3g)
990
991    @TelephonyBaseTest.tel_test_wrap
992    def test_power_idle_2g_mobile_data_always_on(self):
993        """Power measurement test for phone idle 3G.
994
995        Steps:
996        1. DUT idle, in 2G mode. WiFi disabled, WiFi Calling disabled.
997        2. Turn on mobile data always on
998        3. Turn off screen and wait for 6 minutes. Then measure power
999            consumption for 40 minutes and get average.
1000
1001        Expected Results:
1002        Average power consumption should be within pre-defined limit.
1003
1004        Returns:
1005        True if Pass, False if Fail.
1006
1007        Note: Please calibrate your test environment and baseline pass criteria.
1008        Pass criteria info should be in test config file.
1009        """
1010        return self._power_test(
1011            rat=RAT_2G,
1012            mobile_data_always_on=True,
1013            phone_check_func_after_power_test=phone_idle_2g)
1014
1015    @TelephonyBaseTest.tel_test_wrap
1016    def test_power_idle_2g_wifi2g_mobile_data_always_on(self):
1017        """Power measurement test for phone idle 3G.
1018
1019        Steps:
1020        1. DUT idle, in 2G mode. WiFi enabled, WiFi Calling disabled.
1021        2. Turn on mobile data always on
1022        3. Turn off screen and wait for 6 minutes. Then measure power
1023            consumption for 40 minutes and get average.
1024
1025        Expected Results:
1026        Average power consumption should be within pre-defined limit.
1027
1028        Returns:
1029        True if Pass, False if Fail.
1030
1031        Note: Please calibrate your test environment and baseline pass criteria.
1032        Pass criteria info should be in test config file.
1033        """
1034        return self._power_test(
1035            rat=RAT_2G,
1036            wifi=WIFI_2G,
1037            mobile_data_always_on=True,
1038            phone_check_func_after_power_test=phone_idle_2g)
1039
1040    # TODO: This one is not working right now. Requires SL4A API to start alarm.
1041    @TelephonyBaseTest.tel_test_wrap
1042    def test_power_idle_lte_volte_enabled_wakeup_ping_mobile_data_always_on(
1043            self):
1044        """Power measurement test for phone LTE VoLTE enabled Wakeup Ping every
1045        1 minute.
1046
1047        Steps:
1048        1. DUT idle, in LTE mode, VoLTE enabled. WiFi disabled,
1049            WiFi Calling disabled.
1050        2. Start script to wake up AP every 1 minute, after wakeup,
1051            DUT send http Request to Google.com then go to sleep.
1052        3. Turn off screen and wait for 6 minutes. Then measure power
1053            consumption for 40 minutes and get average.
1054
1055        Expected Results:
1056        Average power consumption should be within pre-defined limit.
1057
1058        Returns:
1059        True if Pass, False if Fail.
1060
1061        Note: Please calibrate your test environment and baseline pass criteria.
1062        Pass criteria info should be in test config file.
1063        """
1064        return self._power_test(
1065            rat=RAT_LTE,
1066            volte=True,
1067            mobile_data_always_on=True,
1068            periodic_ping=True,
1069            phone_check_func_after_power_test=phone_idle_volte)
1070
1071    # TODO: This one is not working right now. Requires SL4A API to start alarm.
1072    @TelephonyBaseTest.tel_test_wrap
1073    def test_power_idle_lte_volte_enabled_wifi2g_wakeup_ping_mobile_data_always_on(
1074            self):
1075        """Power measurement test for phone LTE VoLTE enabled Wakeup Ping every
1076        1 minute.
1077
1078        Steps:
1079        1. DUT idle, in LTE mode, VoLTE enabled. WiFi enabled,
1080            WiFi Calling disabled.
1081        2. Start script to wake up AP every 1 minute, after wakeup,
1082            DUT send http Request to Google.com then go to sleep.
1083        3. Turn off screen and wait for 6 minutes. Then measure power
1084            consumption for 40 minutes and get average.
1085
1086        Expected Results:
1087        Average power consumption should be within pre-defined limit.
1088
1089        Returns:
1090        True if Pass, False if Fail.
1091
1092        Note: Please calibrate your test environment and baseline pass criteria.
1093        Pass criteria info should be in test config file.
1094        """
1095        return self._power_test(
1096            rat=RAT_LTE,
1097            volte=True,
1098            wifi=WIFI_2G,
1099            mobile_data_always_on=True,
1100            periodic_ping=True,
1101            phone_check_func_after_power_test=phone_idle_volte)
1102
1103    # TODO: This one is not working right now. Requires SL4A API to start alarm.
1104    @TelephonyBaseTest.tel_test_wrap
1105    def test_power_idle_lte_volte_disabled_wakeup_ping_mobile_data_always_on(
1106            self):
1107        """Power measurement test for phone LTE VoLTE disabled Wakeup Ping every
1108        1 minute.
1109
1110        Steps:
1111        1. DUT idle, in LTE mode, VoLTE disabled. WiFi disabled,
1112            WiFi Calling disabled.
1113        2. Start script to wake up AP every 1 minute, after wakeup,
1114            DUT send http Request to Google.com then go to sleep.
1115        3. Turn off screen and wait for 6 minutes. Then measure power
1116            consumption for 40 minutes and get average.
1117
1118        Expected Results:
1119        Average power consumption should be within pre-defined limit.
1120
1121        Returns:
1122        True if Pass, False if Fail.
1123
1124        Note: Please calibrate your test environment and baseline pass criteria.
1125        Pass criteria info should be in test config file.
1126        """
1127        return self._power_test(
1128            rat=RAT_LTE, mobile_data_always_on=True, periodic_ping=True)
1129
1130    # TODO: This one is not working right now. Requires SL4A API to start alarm.
1131    @TelephonyBaseTest.tel_test_wrap
1132    def test_power_idle_3g_wakeup_ping_mobile_data_always_on(self):
1133        """Power measurement test for phone 3G Wakeup Ping every 1 minute.
1134
1135        Steps:
1136        1. DUT idle, in 3G mode. WiFi disabled, WiFi Calling disabled.
1137        2. Start script to wake up AP every 1 minute, after wakeup,
1138            DUT send http Request to Google.com then go to sleep.
1139        3. Turn off screen and wait for 6 minutes. Then measure power
1140            consumption for 40 minutes and get average.
1141
1142        Expected Results:
1143        Average power consumption should be within pre-defined limit.
1144
1145        Returns:
1146        True if Pass, False if Fail.
1147
1148        Note: Please calibrate your test environment and baseline pass criteria.
1149        Pass criteria info should be in test config file.
1150        """
1151        return self._power_test(
1152            rat=RAT_3G,
1153            mobile_data_always_on=True,
1154            periodic_ping=True,
1155            phone_check_func_after_power_test=phone_idle_3g)
1156
1157    # TODO: This one is not working right now. Requires SL4A API to start alarm.
1158    @TelephonyBaseTest.tel_test_wrap
1159    def test_power_idle_3g_wifi2g_wakeup_ping_mobile_data_always_on(self):
1160        """Power measurement test for phone 3G Wakeup Ping every 1 minute.
1161
1162        Steps:
1163        1. DUT idle, in 3G mode. WiFi enabled, WiFi Calling disabled.
1164        2. Start script to wake up AP every 1 minute, after wakeup,
1165            DUT send http Request to Google.com then go to sleep.
1166        3. Turn off screen and wait for 6 minutes. Then measure power
1167            consumption for 40 minutes and get average.
1168
1169        Expected Results:
1170        Average power consumption should be within pre-defined limit.
1171
1172        Returns:
1173        True if Pass, False if Fail.
1174
1175        Note: Please calibrate your test environment and baseline pass criteria.
1176        Pass criteria info should be in test config file.
1177        """
1178        return self._power_test(
1179            rat=RAT_3G,
1180            wifi=WIFI_2G,
1181            mobile_data_always_on=True,
1182            periodic_ping=True,
1183            phone_check_func_after_power_test=phone_idle_3g)
1184
1185    # TODO: This one is not working right now. Requires SL4A API to start alarm.
1186    @TelephonyBaseTest.tel_test_wrap
1187    def test_power_idle_2g_wakeup_ping_mobile_data_always_on(self):
1188        """Power measurement test for phone 3G Wakeup Ping every 1 minute.
1189
1190        Steps:
1191        1. DUT idle, in 2G mode. WiFi disabled, WiFi Calling disabled.
1192        2. Start script to wake up AP every 1 minute, after wakeup,
1193            DUT send http Request to Google.com then go to sleep.
1194        3. Turn off screen and wait for 6 minutes. Then measure power
1195            consumption for 40 minutes and get average.
1196
1197        Expected Results:
1198        Average power consumption should be within pre-defined limit.
1199
1200        Returns:
1201        True if Pass, False if Fail.
1202
1203        Note: Please calibrate your test environment and baseline pass criteria.
1204        Pass criteria info should be in test config file.
1205        """
1206        return self._power_test(
1207            rat=RAT_2G,
1208            mobile_data_always_on=True,
1209            periodic_ping=True,
1210            phone_check_func_after_power_test=phone_idle_2g)
1211
1212    # TODO: This one is not working right now. Requires SL4A API to start alarm.
1213    @TelephonyBaseTest.tel_test_wrap
1214    def test_power_idle_2g_wifi2g_wakeup_ping_mobile_data_always_on(self):
1215        """Power measurement test for phone 3G Wakeup Ping every 1 minute.
1216
1217        Steps:
1218        1. DUT idle, in 2G mode. WiFi enabled, WiFi Calling disabled.
1219        2. Start script to wake up AP every 1 minute, after wakeup,
1220            DUT send http Request to Google.com then go to sleep.
1221        3. Turn off screen and wait for 6 minutes. Then measure power
1222            consumption for 40 minutes and get average.
1223
1224        Expected Results:
1225        Average power consumption should be within pre-defined limit.
1226
1227        Returns:
1228        True if Pass, False if Fail.
1229
1230        Note: Please calibrate your test environment and baseline pass criteria.
1231        Pass criteria info should be in test config file.
1232        """
1233        return self._power_test(
1234            rat=RAT_2G,
1235            wifi=WIFI_2G,
1236            mobile_data_always_on=True,
1237            periodic_ping=True,
1238            phone_check_func_after_power_test=phone_idle_2g)
1239
1240