# 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.

from autotest_lib.server import utils

AUTHOR = "ChromeOS Team"
NAME = "firmware_PDVbusRequest.flip_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.

This subtest is testing the other CC pin.
"""

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=True, dts_mode=False,
                 tag='.'.join(NAME.split('.')[1:]), desired_pd_port_idx=3)

parallel_simple(run, machines)
