# 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.

# __GENERATED_BY_GENERATE_CONTROLFILES_PY__:LATEST

# This file has been automatically generated. Do not edit!
from autotest_lib.server import utils as server_utils

AUTHOR = 'n/a'
NAME = 'cheets_CTS_T.internal.x86.CtsSensorTestCases.ctshardware'
METADATA = {
    "contacts": ["arc-cts-eng@google.com"],
    "bug_component": "b:183644",
    "criteria": "A part of Android CTS",
}
ATTRIBUTES = 'suite:arc-cts-hardware'
DEPENDENCIES = 'arc, cts_abi_x86'
HW_DEPS = ['android-vm-tm']
JOB_RETRIES = 1
TEST_TYPE = 'server'
TIME = 'MEDIUM'
MAX_RESULT_SIZE_KB = 512000
DOC = 'n/a'

# For local debugging, if your test setup doesn't have servo, REMOVE these
# two lines.
args_dict = server_utils.args_to_dict(args)
servo_args = hosts.CrosHost.get_servo_arguments(args_dict)

def run_TS(machine):
    # REMOVE 'servo_args=servo_args' arg for local debugging if your test
    # setup doesn't have servo.
    try:
        host_list = [hosts.create_host(machine, servo_args=servo_args)]
    except:
        # Just ignore any servo setup flakiness.
        host_list = [hosts.create_host(machine)]
    job.run_test(
        'cheets_CTS_T',
        hosts=host_list,
        iterations=1,
        tag='internal.x86.CtsSensorTestCases.ctshardware',
        test_name='cheets_CTS_T.internal.x86.CtsSensorTestCases.ctshardware',
        run_template=['run', 'commandAndExit', 'cts', '--include-filter', 'CtsSensorTestCases', '--logcat-on-failure'],
        retry_template=['run', 'commandAndExit', 'retry', '--retry', '{session_id}'],
        target_module='CtsSensorTestCases',
        target_plan=None,
        bundle='x86',
        uri='LATEST',
        hard_reboot_on_failure=True,
        timeout=7200)

parallel_simple(run_TS, machines)
