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

# Description
# Verify that Servo can change PD role.

NAME = "power_ServoChargeStress.3loops"
METADATA = {
    "contacts": ["chromeos-platform-power@google.com", "mqg@google.com"],
    "bug_component": "b:1361410",
    "criteria": "",
    "hw_agnostic": False
}
TEST_TYPE = "server"
DEPENDENCIES = "servo_state:WORKING"

from autotest_lib.server import utils

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

servo_args = hosts.CrosHost.get_servo_arguments(args_dict)

def run(machine):
    host = hosts.create_host(machine, servo_args=servo_args)
    job.run_test("power_ServoChargeStress", host=host, total_loops=3, sleep=5,
                 tag=NAME.split('.')[1])

parallel_simple(run, machines)
