# Copyright 2024 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

# TODO: Convert this Tast first class (TFC) after Satlab support TFC.

AUTHOR = 'Ambalavanan M M <ambalavanan.m.m@intel.com>'
NAME = 'tast.intel-type-c-eth-dongle'
METADATA = {
    'contacts': ['intel.chrome.automation.team@intel.com', 'ambalavanan.m.m@intel.com'],
    'bug_component': 'b:157291', # ChromeOS > External > Intel
    'criteria': 'Tauto wrapper for specified tast tests',
}
TIME = 'MEDIUM'
TEST_TYPE = 'Server'
ATTRIBUTES = 'suite:intel-type-c-eth-dongle'
MAX_RESULT_SIZE_KB = 256 * 1024
PY_VERSION = 3

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

DOC = '''
Run the Intel Type-C Ethernet dongle Tast 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.

This test runs Intel Type-C Ethernet dongle Tast tests that are required to pass
against a remote DUT. It fails if any individual Tast tests fail.

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


def run(machine):
    job.run_test('tast',
                 host=hosts.create_host(machine),
                 test_exprs=['("group:intel-type-c-eth-dongle")'],
                 ignore_test_failures=False, max_run_sec=600,
                 clear_tpm=False,
                 command_args=args)

parallel_simple(run, machines)
