# 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-hdmi'
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-hdmi'
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 hdmi 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 hdmi 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-hdmi")'],
                 ignore_test_failures=False, max_run_sec=2400,
                 clear_tpm=False,
                 command_args=args)

parallel_simple(run, machines)
