# 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 = 'cros-engprod-muc'
NAME = 'tast.complementary-shard-4'
METADATA = {
    'contacts': ['kamilszarek@google.com', 'cros-engprod-muc@google.com'],
    'bug_component': 'b:1034523', # ChromeOS > Test > Harness > Tauto
    'criteria': 'Tauto wrapper for specified tast tests',
}
TIME = 'LONG'
TEST_TYPE = 'Server'
DEPENDENCIES = 'servo_state:WORKING'
ATTRIBUTES = 'suite:duop_complementary_shard_4'
MAX_RESULT_SIZE_KB = 512 * 1024
PY_VERSION = 3
JOB_RETRIES = 0

DOC = '''
This suite runs the tests in Tast on devices that are not in golden, medium-low, hardware suites. go/g3-duop
'''

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:complementary" && '
                 '!"group:criticalstaging" && '  # The critical staging suite takes precedence.
                 '!("group:mainline" && !informational)'  # The critical-chrome suite takes precedence.
                 ')'],
                 ignore_test_failures=True,
                 max_run_sec=3*60*60 - 15*60,
                 totalshards=5,
                 shardindex=4,
                 command_args=args)

parallel_simple(run, machines)
