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