# Copyright 2023 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

NAME = "power_LW.power_LoadTest_v11_1hour_ash_v_lacros"
METADATA = {
    "contacts": ["chromeos-platform-power@google.com", "puthik@google.com"],
    "bug_component": "b:1361410",
    "criteria": "This test is a power benchmark test.",
    "hw_agnostic": False,
    "doc" : "Control file for running 1hour power_LoadTest for Ash and Lacros "
            "with caching in power lab. This is done with one control file "
            "instead of two to ensure that both runs of power_LoadTest are "
            "executed on the same DUT, reducing variability. Even if two DUTs "
            "are the same SKU, chip variability means that power consumption "
            "characteristics will differ.",
}
TEST_TYPE = "server"
DEPENDENCIES = "servo_state:WORKING"
EXTENDED_TIMEOUT = 25200  # 2 hours PLT + 4 hours charging + 1 hour guard.

from autotest_lib.client.common_lib import utils

args_dict = utils.args_to_dict(args)
servo_args = hosts.CrosHost.get_servo_arguments(args_dict)
test = 'power_LoadTest'
args_ash = {
    'pdash_note': args_dict.get('pdash_note', ''),
    'tag' : 'v11_1hour_PLW',
    'loop_time' : 3600,
    'loop_count' : 1,
    'test_low_batt_p' : 5,
    'gaia_login' : True,
    'tast_bundle_path': args_dict.get('tast_bundle_path'),
    'web_caching' : True,
}
args_lacros = {
    'pdash_note': args_dict.get('pdash_note', ''),
    'tag' : 'v11_lacros_1hour_PLW',
    'loop_time' : 3600,
    'loop_count' : 1,
    'test_low_batt_p' : 5,
    'gaia_login' : True,
    'tast_bundle_path': args_dict.get('tast_bundle_path'),
    'use_lacros' : True,
    'web_caching' : True,
}

def run(machine):
    host = hosts.create_host(machine, servo_args=servo_args)
    job.run_test("power_BatteryChargeControl", host=host,
                 percent_charge_to_add=None, percent_target_charge=95,
                 tag="power_LoadTest_v11_1hour")
    job.run_test("power_LW", host=host, test=test, args=args_ash,
                 machine=machine, tag="power_LoadTest_v11_1hour")
    job.run_test("power_BatteryChargeControl", host=host,
                 percent_charge_to_add=None, percent_target_charge=95,
                 tag="power_LoadTest_v11_1hour_lacros")
    job.run_test("power_LW", host=host, test=test, args=args_lacros,
                 machine=machine, tag="power_LoadTest_v11_1hour_lacros")

parallel_simple(run, machines)
