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

NAME = "ThermalQual.lab"
METADATA = {
    "contacts": ["chromeos-platform-power@google.com"],
    "author": "puthik",
    "bug_component": "b:1361410",
    "criteria": "This test is a benchmark test",
    "hw_agnostic": False,
}
ATTRIBUTES = "suite:crosbolt_perf_perbuild"
TIME = "LENGTHY"
TEST_CATEGORY = "Stress"
TEST_CLASS = "suite"
TEST_TYPE = "server"
EXTENDED_TIMEOUT = 3600 # 1 hour
PY_VERSION = 3

DOC = """
Shorter thermal qual sequence for lab regression test. This should be able to
detect if there is a thermal issue most of the time. And full thermal qual can
be used to pin point which workload that caused the issue.

* 30 minutes subtest instead of 2 to 2.5 hours.
* Don't wait for cooldown between each subtest to make total heavy load time
  to be about 2 hours.
* power_BatteryCharge is not expected to run in normal lab environment.
  Lab DUTs should have near-full battery charge.

"""

import datetime
from autotest_lib.client.common_lib import utils

MINUTES=60

# Need separate list for client and server test due to how these test work.
CLIENT_TESTS = [
    ('power_WaitForCoolDown', {}),
    ('power_Speedometer2', {'tag' : 'thermal_qual_lab_before'}),

    ('power_BatteryCharge', {
        'percent_target_charge' : 30, 'max_run_time': 30 * MINUTES}),
    ('power_WaitForCoolDown', {}),

    ('power_ThermalLoad', {
        'tag' : 'thermal_qual_lab_discharge', 'force_discharge' : True,
        'duration': 30 * MINUTES}),
    ('power_VideoCall', {
        'tag' : 'thermal_qual_lab_discharge', 'force_discharge' : True,
        'duration': 30 * MINUTES}),
    ('power_ThermalLoad', {
        'tag' : 'thermal_qual_lab_charge', 'duration': 30 * MINUTES}),
    ('power_VideoCall', {
        'tag' : 'thermal_qual_lab_charge', 'duration': 30 * MINUTES}),

    ('power_Speedometer2', {'tag' : 'thermal_qual_lab_after'})
]

# Workaround to make it compatible with moblab autotest UI.
global args_dict
try:
    args_dict
except NameError:
    args_dict = utils.args_to_dict(args)

# Use time as pdash_note if not supplied to track all tests in same suite.
pdash_note = args_dict.get('pdash_note',
                           NAME + '_' + datetime.datetime.utcnow().isoformat())

def run_client_test(machine):
    client = hosts.create_host(machine)
    client_at = autotest.Autotest(client)

    for test, argv in CLIENT_TESTS:
        argv['pdash_note'] = pdash_note
        client_at.run_test(test, timeout=EXTENDED_TIMEOUT, **argv)

job.parallel_on_machines(run_client_test, machines)
