# Copyright 2020 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

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

AUTHOR = 'ARC++ Team'
NAME = 'cheets_CTS_R.internal.arm.all.CtsVoiceInteractionTestCases_-_vm-tests-tf'
ATTRIBUTES = 'suite:arc-cts-qual'
DEPENDENCIES = 'arc'
JOB_RETRIES = 1
TEST_TYPE = 'server'
TIME = 'MEDIUM'
MAX_RESULT_SIZE_KB = 512000
PY_VERSION = 3
DOC = 'Run module CtsVoiceInteractionTestCases, CtsVoiceInteractionTestCases[instant], CtsVoiceInteractionTestCases[secondary_user], CtsVoiceSettingsTestCases, CtsVoiceSettingsTestCases[instant], CtsVoiceSettingsTestCases[secondary_user], CtsVrTestCases, CtsVrTestCases[secondary_user], CtsWebkitTestCases, CtsWebkitTestCases[instant], CtsWebkitTestCases[secondary_user], CtsWidgetTestCases, CtsWidgetTestCases29, CtsWidgetTestCases29[instant], CtsWidgetTestCases29[secondary_user], CtsWidgetTestCases[instant], CtsWidgetTestCases[secondary_user], CtsWifiBroadcastsHostTestCases, CtsWifiBroadcastsHostTestCases[instant], CtsWifiBroadcastsHostTestCases[secondary_user], CtsWifiTestCases, CtsWifiTestCases[instant], CtsWifiTestCases[secondary_user], CtsWindowManagerDeviceTestCases, CtsWindowManagerDeviceTestCases[secondary_user], CtsWindowManagerJetpackTestCases, CtsWindowManagerJetpackTestCases[secondary_user], CtsWindowManagerSdk25TestCases, CtsWindowManagerSdk25TestCases[secondary_user], CtsWindowManagerSdk28TestCases, CtsWindowManagerSdk28TestCases[secondary_user], CtsWindowManagerSdk29TestCases, CtsWindowManagerSdk29TestCases[secondary_user], CtsWrapNoWrapTestCases, CtsWrapNoWrapTestCases[secondary_user], CtsWrapWrapDebugMallocDebugTestCases, CtsWrapWrapDebugMallocDebugTestCases[secondary_user], CtsWrapWrapDebugTestCases, CtsWrapWrapDebugTestCases[secondary_user], CtsWrapWrapNoDebugTestCases, CtsWrapWrapNoDebugTestCases[secondary_user], LegacyStorageTest, LegacyStorageTest[instant], ScopedStorageTest, ScopedStorageTest[instant], signed-CtsOmapiTestCases, signed-CtsOmapiTestCases[secondary_user], signed-CtsSecureElementAccessControlTestCases1, signed-CtsSecureElementAccessControlTestCases1[secondary_user], signed-CtsSecureElementAccessControlTestCases2, signed-CtsSecureElementAccessControlTestCases2[secondary_user], signed-CtsSecureElementAccessControlTestCases3, signed-CtsSecureElementAccessControlTestCases3[secondary_user], vm-tests-tf, vm-tests-tf[secondary_user] of the Android Compatibility Test Suite (CTS) using arm ABI in the ARC++ container.'

def run_TS(machine):
    host_list = [hosts.create_host(machine)]
    job.run_test(
        'cheets_CTS_R',
        hosts=host_list,
        iterations=1,
        max_retry=10,
        tag='internal.arm.all.CtsVoiceInteractionTestCases_-_vm-tests-tf',
        test_name='cheets_CTS_R.internal.arm.all.CtsVoiceInteractionTestCases_-_vm-tests-tf',
        run_template=['run', 'commandAndExit', 'cts', '--include-filter', 'CtsVoiceInteractionTestCases', '--include-filter', 'CtsVoiceInteractionTestCases[instant]', '--include-filter', 'CtsVoiceInteractionTestCases[secondary_user]', '--include-filter', 'CtsVoiceSettingsTestCases', '--include-filter', 'CtsVoiceSettingsTestCases[instant]', '--include-filter', 'CtsVoiceSettingsTestCases[secondary_user]', '--include-filter', 'CtsVrTestCases', '--include-filter', 'CtsVrTestCases[secondary_user]', '--include-filter', 'CtsWebkitTestCases', '--include-filter', 'CtsWebkitTestCases[instant]', '--include-filter', 'CtsWebkitTestCases[secondary_user]', '--include-filter', 'CtsWidgetTestCases', '--include-filter', 'CtsWidgetTestCases29', '--include-filter', 'CtsWidgetTestCases29[instant]', '--include-filter', 'CtsWidgetTestCases29[secondary_user]', '--include-filter', 'CtsWidgetTestCases[instant]', '--include-filter', 'CtsWidgetTestCases[secondary_user]', '--include-filter', 'CtsWifiBroadcastsHostTestCases', '--include-filter', 'CtsWifiBroadcastsHostTestCases[instant]', '--include-filter', 'CtsWifiBroadcastsHostTestCases[secondary_user]', '--include-filter', 'CtsWifiTestCases', '--include-filter', 'CtsWifiTestCases[instant]', '--include-filter', 'CtsWifiTestCases[secondary_user]', '--include-filter', 'CtsWindowManagerDeviceTestCases', '--include-filter', 'CtsWindowManagerDeviceTestCases[secondary_user]', '--include-filter', 'CtsWindowManagerJetpackTestCases', '--include-filter', 'CtsWindowManagerJetpackTestCases[secondary_user]', '--include-filter', 'CtsWindowManagerSdk25TestCases', '--include-filter', 'CtsWindowManagerSdk25TestCases[secondary_user]', '--include-filter', 'CtsWindowManagerSdk28TestCases', '--include-filter', 'CtsWindowManagerSdk28TestCases[secondary_user]', '--include-filter', 'CtsWindowManagerSdk29TestCases', '--include-filter', 'CtsWindowManagerSdk29TestCases[secondary_user]', '--include-filter', 'CtsWrapNoWrapTestCases', '--include-filter', 'CtsWrapNoWrapTestCases[secondary_user]', '--include-filter', 'CtsWrapWrapDebugMallocDebugTestCases', '--include-filter', 'CtsWrapWrapDebugMallocDebugTestCases[secondary_user]', '--include-filter', 'CtsWrapWrapDebugTestCases', '--include-filter', 'CtsWrapWrapDebugTestCases[secondary_user]', '--include-filter', 'CtsWrapWrapNoDebugTestCases', '--include-filter', 'CtsWrapWrapNoDebugTestCases[secondary_user]', '--include-filter', 'LegacyStorageTest', '--include-filter', 'LegacyStorageTest[instant]', '--include-filter', 'ScopedStorageTest', '--include-filter', 'ScopedStorageTest[instant]', '--include-filter', 'signed-CtsOmapiTestCases', '--include-filter', 'signed-CtsOmapiTestCases[secondary_user]', '--include-filter', 'signed-CtsSecureElementAccessControlTestCases1', '--include-filter', 'signed-CtsSecureElementAccessControlTestCases1[secondary_user]', '--include-filter', 'signed-CtsSecureElementAccessControlTestCases2', '--include-filter', 'signed-CtsSecureElementAccessControlTestCases2[secondary_user]', '--include-filter', 'signed-CtsSecureElementAccessControlTestCases3', '--include-filter', 'signed-CtsSecureElementAccessControlTestCases3[secondary_user]', '--include-filter', 'vm-tests-tf', '--include-filter', 'vm-tests-tf[secondary_user]', '--logcat-on-failure'],
        retry_template=['run', 'commandAndExit', 'retry', '--retry', '{session_id}'],
        target_module='all.CtsVoiceInteractionTestCases_-_vm-tests-tf',
        target_plan=None,
        bundle='arm',
        uri='LATEST',
        use_jdk9=True,
        timeout=172800)

parallel_simple(run_TS, machines)
