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

NAME = 'tast.category-hwsec'
METADATA = {
    "contacts": ["cros-hwsec@google.com", "zuan@chromium.org"],
    "bug_component": "b:1188704",
    "criteria": "Run the critical Tast tests in the hwsec category",
    "hw_agnostic": False
}
TEST_TYPE = 'Server'
DEPENDENCIES = 'servo_state:WORKING'
ATTRIBUTES = 'suite:bvt-tast-cq-hwsec, suite:bvt-tast-cq-cft-hwsec'
MAX_RESULT_SIZE_KB = 256 * 1024

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

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" && '
                             '!informational && '
                             '"name:hwsec.*"'
                             ')'],
                 ignore_test_failures=False, max_run_sec=1800,
                 command_args=args,
                 clear_tpm=True,
                 retries=2)

parallel_simple(run, machines)
