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

# TODO(b/336300805): Remove this file when PVS is no longer using this test.

from autotest_lib.server import utils

AUTHOR = "ChromeOS Team"
NAME = "firmware_PDTrySrc.port3"
METADATA = {
        "contacts": ["chromeos-faft@google.com", "jbettis@chromium.org"],
        "bug_component": "b:792402", # ChromeOS > Platform > Enablement > Firmware > FAFT
        "criteria": "Servo based PD Try.SRC protocol test on USB-C port 3",
}
DEPENDENCIES = "servo_state:WORKING"
TIME = "SHORT"
TEST_TYPE = "server"
JOB_RETRIES = 0

DOC = """
This test checks:
  - If the DUT advertises support for dualrole and Try.SRC operation
  - Runs a series of disconnect/connects with Try.SRC on
  - Runs a series of disconnect/connects with Try.SRC off
  - Verifies that with Try.SRC on the DUT connects in SRC 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_PDTrySrc", host=host, cmdline_args=args,
                 disable_sysinfo=True, flip_cc=False,
                 tag='.'.join(NAME.split('.')[1:]),
                 desired_pd_port_idx=3)

parallel_simple(run, machines)
