xref: /aosp_15_r20/external/autotest/server/site_tests/sequences/control.power_qual_lab (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
1# Copyright 2020 The Chromium OS Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5AUTHOR = "puthik"
6NAME = "PowerQual.lab"
7TIME = "LENGTHY"
8TEST_CATEGORY = "Stress"
9TEST_CLASS = "suite"
10TEST_TYPE = "server"
11EXTENDED_TIMEOUT = 58500  # 16 Hours + 900 second guard.
12PY_VERSION = 3
13
14DOC = """
15Lab version of PowerQual.full
16
17Difference from PowerQual.full
18- Allow ethernet for power_LoadTest
19- Do not use design capacity when determine target battery charge
20
21Mandatory tests
22- power_LoadTest (from full battery to 5%)
23- power_BatteryCharge (from 5% to full battery)
24- power_VideoPlayback (h264 1080p & vp9 1080p 1 hour each)
25- power_VideoCall (2 hours)
26
27Informational tests
28- power_Idle
29- power_VideoPlayback
30- power_VideoEncode
31- power_Display.brightness
32- power_Display.cabc
33"""
34
35import datetime
36from autotest_lib.client.common_lib import utils
37
38HOURS=60*60
39
40CLIENT_TESTS = [
41    ('power_BatteryCharge', {
42        'percent_target_charge' : 20, 'max_run_time': 5 * HOURS,
43        'use_design_charge_capacity' : False}),
44    ('power_WaitForCoolDown', {}),
45    ('power_VideoCall', {
46        'tag' : 'powerqual_lab', 'force_discharge' : True,
47        'min_run_time_percent': 75}),
48
49    ('power_BatteryCharge', {
50        'percent_target_charge' : 20, 'max_run_time': 5 * HOURS,
51        'use_design_charge_capacity' : False}),
52    ('power_WaitForCoolDown', {}),
53    ('power_VideoPlayback', {
54        'tag' : 'powerqual_lab', 'force_discharge' : True, 'secs_per_video' : 3600,
55        'videos' : [('h264_1080_30fps', ''), ('vp9_1080_30fps', '')]}),
56
57    ('power_BatteryCharge', {
58        'percent_target_charge' : 20, 'max_run_time': 5 * HOURS,
59        'use_design_charge_capacity' : False}),
60    ('power_WaitForCoolDown', {}),
61    ('power_Idle', {
62        'tag' : 'powerqual_lab', 'force_discharge' : True}),
63
64    ('power_BatteryCharge', {
65        'percent_target_charge' : 20, 'max_run_time': 5 * HOURS,
66        'use_design_charge_capacity' : False}),
67    ('power_WaitForCoolDown', {}),
68    ('power_VideoPlayback', {
69        'tag' : 'powerqual_lab_info', 'force_discharge' : True}),
70
71    ('power_BatteryCharge', {
72        'percent_target_charge' : 20, 'max_run_time': 5 * HOURS,
73        'use_design_charge_capacity' : False}),
74    ('power_WaitForCoolDown', {}),
75    ('power_VideoEncode', {
76        'tag' : 'powerqual_lab', 'force_discharge' : True}),
77
78    ('power_BatteryCharge', {
79        'percent_target_charge' : 20, 'max_run_time': 5 * HOURS,
80        'use_design_charge_capacity' : False}),
81    ('power_WaitForCoolDown', {}),
82    ('power_Display', {
83        'tag' : 'powerqual_lab_brightness', 'force_discharge' : True,
84        'brightness' : 'all', 'pages' : ['white', 'black', 'checker1'],
85        'secs_per_page' : 20, 'seconds_period' : 1}),
86
87    ('power_BatteryCharge', {
88        'percent_target_charge' : 20, 'max_run_time': 5 * HOURS,
89        'use_design_charge_capacity' : False}),
90    ('power_WaitForCoolDown', {}),
91    ('power_Display', {
92        'tag' : 'powerqual_lab_cabc', 'force_discharge' : True,
93        'brightness' : 'max', 'secs_per_page' : 20, 'seconds_period' : 1,
94        'pages' : ['white', 'black',
95                   'white', 'grey10',
96                   'white', 'grey20',
97                   'white', 'grey30',
98                   'white', 'grey40',
99                   'white', 'grey50',
100                   'white', 'checker1',
101                   'white', 'checker90',
102                   'white', 'checker80',
103                   'white', 'checker70',
104                   'white', 'checker60',
105                   'white', 'checker50']}),
106
107    ('power_BatteryCharge', {
108        'percent_target_charge' : 20, 'max_run_time': 5 * HOURS,
109        'use_design_charge_capacity' : False}),
110    ('power_WaitForCoolDown', {}),
111    ('power_LoadTest', {
112        'tag' : 'powerqual_lab', 'force_discharge' : True, 'loop_time' : HOURS,
113        'loop_count' : 24, 'test_low_batt_p' : 5, 'check_network' : False}),
114
115    ('power_BatteryCharge', {
116        'percent_target_charge' : 100, 'max_run_time': 5 * HOURS,
117        'use_design_charge_capacity' : False, 'tag' : 'powerqual'}),
118    ('power_WaitForCoolDown', {}),
119    ('power_UiResume', {
120        'tag' : 'powerqual_lab'}),
121]
122
123# Workaround to make it compatible with moblab autotest UI.
124global args_dict
125try:
126    args_dict
127except NameError:
128    args_dict = utils.args_to_dict(args)
129
130# Use time as pdash_note if not supplied to track all tests in same suite.
131pdash_note = args_dict.get('pdash_note',
132                           NAME + '_' + datetime.datetime.utcnow().isoformat())
133
134def run_client_test(machine):
135    client = hosts.create_host(machine)
136    client_at = autotest.Autotest(client)
137
138    for test, argv in CLIENT_TESTS:
139        argv['pdash_note'] = pdash_note
140        client_at.run_test(test, timeout=EXTENDED_TIMEOUT, **argv)
141
142job.parallel_on_machines(run_client_test, machines)
143