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

from autotest_lib.server import utils

AUTHOR = "ChromeOS Team"
NAME = "firmware_PDResetSoft.shutdown_port3"
METADATA = {
    "contacts": ["chromeos-faft@google.com", "jbettis@chromium.org"],
    "bug_component": "b:792402",  # ChromeOS > Platform > Enablement > Firmware > FAFT
    "criteria": "Servo based PD soft reset test on USB-C port 3",
    "requirements": ["sys-fw-0023-v01"],
}
DEPENDENCIES = "servo_state:WORKING"
TIME = "SHORT"
TEST_TYPE = "server"

DOC = """
This test checks:
  - Ability of DUT to initate soft resets
  - Ability of DUT to receive soft reset requests from PDTester
  - If DUT is dualrole capable, soft resets are done with the DUT
    in each power role.
"""

args_dict = utils.args_to_dict(args)
servo_args = hosts.CrosHost.get_servo_arguments(args_dict)
pdtester_args = hosts.CrosHost.get_pdtester_arguments(args_dict)


def run(machine):
    host = hosts.create_host(
        machine, servo_args=servo_args, pdtester_args=pdtester_args
    )
    job.run_test(
        "firmware_PDResetSoft",
        host=host,
        cmdline_args=args,
        disable_sysinfo=True,
        flip_cc=False,
        dts_mode=False,
        init_power_mode="shutdown",
        tag='.'.join(NAME.split('.')[1:]),
        desired_pd_port_idx=3,
    )


parallel_simple(run, machines)
