# Copyright 2023 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.client.common_lib import utils
from autotest_lib.server.site_tests.tast import tast

AUTHOR = 'The ChromiumOS Authors'
NAME = 'tast.pasit_fast'
METADATA = {
    'contacts': ['cros-wwcb-automation@google.com'],
    'bug_component': 'b:1289112', # ChromeOS > External > WWCB > Allion > Automation
    'criteria': 'Tauto wrapper for specified tast tests',
}
TIME = 'MEDIUM'
TEST_TYPE = 'Server'
DEPENDENCIES = 'servo_state:WORKING'
ATTRIBUTES = 'suite:pasit_fast'
MAX_RESULT_SIZE_KB = 1024 * 1024

# tast.py uses binaries installed from autotest_server_package.tar.bz2.
REQUIRE_SSP = True

DOC = '''
Run Tast tests for basic typec/TBT functionality.

The tests are part of 'group:pasit'. The 'group:pasit_fast' sub-attribute
limits it to typec tests.

Tast is an integration-testing framework analagous to the test-running portion
of Autotest. See https://chromium.googlesource.com/chromiumos/platform/tast/
for more information.

See http://go/tast-failures for information about investigating failures.
'''

command_args, varslist = tast.split_arguments(args)
varslist = ['DockingID=1912901']
varslist += ['ExtDispID1=2007901']
varslist += ['ExtDispID2=2007902']
varslist += ['EthernetID=j45sw01']
varslist += ['USBTypeAIDArray=2001901']
varslist += ['utils.wwcbIPPowerIp=192.168.231.110']

def run(machine):
    args_dict = utils.args_to_dict(command_args)
    assert 'servo_state:WORKING' in DEPENDENCIES
    servo_args = hosts.CrosHost.get_servo_arguments(args_dict)
    job.run_test('tast',
                 host=hosts.create_host(machine, servo_args=servo_args),
                 test_exprs=['("group:pasit" && pasit_fast)'],
                 ignore_test_failures=False, max_run_sec=10800,
                 command_args=command_args,
                 varslist=varslist,
                 is_cft=is_cft)

parallel_simple(run, machines)
