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

AUTHOR = 'The ChromiumOS Authors'
NAME = 'tast.critical-system-hw-shard-1'
METADATA = {
    'contacts': ['tauto-core@google.com'],
    'bug_component': 'b:1034523', # ChromeOS > Test > Harness > Tauto
    'criteria': 'Tauto wrapper for specified tast tests',
}
TIME = 'MEDIUM'
TEST_TYPE = 'Server'
DEPENDENCIES = 'servo_state:WORKING'
ATTRIBUTES = "suite:bvt-tast-cq-hw"
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 Tast must-pass system test suite.

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 non-Chrome-dependent and non-Android-dependent Tast-based 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.
'''

args_dict = utils.args_to_dict(args)
assert 'servo_state:WORKING' in DEPENDENCIES
servo_args = hosts.CrosHost.get_servo_arguments(args_dict)

def run(machine):
    job.run_test('tast',
                 host=hosts.create_host(machine, servo_args=servo_args),
                 test_exprs=['('
                             '"group:mainline" && '
                             '!"group:hw_agnostic" && '
                             '!informational && '
                             '!"dep:chrome" && '
                             '!"name:crostini.*" && '
                             '!"dep:android*"'
                             ')'],
                 ignore_test_failures=False, max_run_sec=3600,
                 totalshards=3,
                 shardindex=1,
                 command_args=args,
                 clear_tpm=True,
                 retries=2)

parallel_simple(run, machines)
