# 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__:DEV

# This file has been automatically generated. Do not edit!

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

def run_TS(machine):
    host_list = [hosts.create_host(machine)]
    job.run_test(
        'cheets_CTS_T',
        hosts=host_list,
        iterations=1,
        tag='internal.arm.CtsVoice',
        test_name='cheets_CTS_T.internal.arm.CtsVoice',
        run_template=['run', 'commandAndExit', 'cts', '--include-filter', 'CtsVoiceInteractionTestCases', '--include-filter', 'CtsVoiceInteractionTestCases[instant]', '--include-filter', 'CtsVoiceInteractionTestCases[secondary_user]', '--include-filter', 'CtsVoiceRecognitionTestCases', '--include-filter', 'CtsVoiceRecognitionTestCases[secondary_user]', '--include-filter', 'CtsVoiceSettingsTestCases', '--include-filter', 'CtsVoiceSettingsTestCases[instant]', '--include-filter', 'CtsVoiceSettingsTestCases[secondary_user]', '--logcat-on-failure'],
        retry_template=['run', 'commandAndExit', 'retry', '--retry', '{session_id}'],
        target_module='CtsVoice',
        target_plan=None,
        bundle='arm',
        uri='DEV',
        timeout=16200)

parallel_simple(run_TS, machines)
