# 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
from autotest_lib.server.site_tests.tast import tast

AUTHOR = "cienet-firmware@cienet.corp-partner.google.com"
NAME = 'tast.firmware-unstable_servo_micro'
METADATA = {
        "contacts": ["chromeos-faft@google.com", "cienet-firmware@cienet.corp-partner.google.com"],
        "bug_component": "b:792402", # ChromeOS > Platform > Enablement > Firmware > FAFT
        "criteria": "Run Tast tests for firmware that require servo_micro",
}
TIME = 'MEDIUM'
TEST_TYPE = 'Server'
DEPENDENCIES = 'servo_state:WORKING, servo_component:servo_micro'
ATTRIBUTES = 'suite:faft_unstable'
MAX_RESULT_SIZE_KB = 1024 * 1024
JOB_RETRIES = 0

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

DOC = '''
Run Tast tests for EC firmware that require a servo with servo_micro.

The tests are part of 'group:firmware'. The 'firmware_unstable'
sub-attribute limits it to unstable tests. Once the test is stable change
the attribute to one of the others. The 'firmware_servo_micro' further 
limits it to tests which require servo_micro.
'''

command_args, varslist = tast.split_arguments(args)
args_dict = utils.args_to_dict(command_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:firmware" && firmware_unstable && firmware_servo_micro)'],
                 ignore_test_failures=True, max_run_sec=10800,
                 command_args=command_args,
                 varslist=varslist,
                 )

parallel_simple(run, machines)