# 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.golden-tier-shard-1'
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_golden_shard_1'
MAX_RESULT_SIZE_KB = 512 * 1024
PY_VERSION = 3
JOB_RETRIES = 0

DOC = '''
This suite runs the golden_tier tests in Tast. 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:golden_tier" && '
                 '!"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=1,
                 command_args=args)

parallel_simple(run, machines)
