# 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_PDVbusRequest.shutdown_port3"
METADATA = {
    "contacts": ["chromeos-faft@google.com", "jbettis@chromium.org"],
    "bug_component": "b:792402",  # ChromeOS > Platform > Enablement > Firmware > FAFT
    "criteria": "Servo based PD VBUS voltage level test on USB-C port 3",
    "requirements": ["sys-fw-0023-v01"],
}
DEPENDENCIES = "servo_state:WORKING"
TIME = "SHORT"
TEST_TYPE = "server"

DOC = """
This test checks:
  - PD Dual role mode is operational in the DUT.
  - Ability to initiate new PD contract with various VBUS values.
  - Receive Source capabilty messages from PDTester.
  - The DUT does not source power in shutdown mode.
"""

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_PDVbusRequest",
        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)
