# Copyright 2016 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_N.7.1_r28.arm.all.CtsSecurityTestCases_-_vm-tests-tf'
ATTRIBUTES = 'suite:arc-cts-qual'
DEPENDENCIES = 'arc'
JOB_RETRIES = 1
TEST_TYPE = 'server'
TIME = 'LONG'
MAX_RESULT_SIZE_KB = 307200
DOC = 'Run module CtsSecurityTestCases, CtsServicesHostTestCases, CtsShortcutHostTestCases, CtsShortcutManagerTestCases, CtsSignatureTestCases, CtsSimpleCpuTestCases, CtsSimpleperfTestCases, CtsSpeechTestCases, CtsSustainedPerformanceHostTestCases, CtsSystemIntentTestCases, CtsSystemUiHostTestCases, CtsSystemUiTestCases, CtsTelecomTestCases, CtsTelecomTestCases2, CtsTelephony2TestCases, CtsTelephonyTestCases, CtsTextTestCases, CtsTextureViewTestCases, CtsThemeDeviceTestCases, CtsThemeHostTestCases, CtsToastLegacyTestCases, CtsToastTestCases, CtsTransitionTestCases, CtsTrustedVoiceHostTestCases, CtsTvProviderTestCases, CtsTvTestCases, CtsUiAutomationTestCases, CtsUiDeviceTestCases, CtsUiHostTestCases, CtsUiRenderingTestCases, CtsUidIsolationTestCases, CtsUsageStatsTestCases, CtsUsbTests, CtsUtilTestCases, CtsVideoTestCases, CtsViewTestCases, CtsVmTestCases, CtsVoiceInteractionTestCases, CtsVoiceSettingsTestCases, CtsVrTestCases, CtsWebkitTestCases, CtsWidgetTestCases, vm-tests-tf of the Android Compatibility Test Suite (CTS) using arm ABI in the ARC++ container.'

def run_CTS(machine):
    host_list = [hosts.create_host(machine)]
    job.run_test(
        'cheets_CTS_N',
        hosts=host_list,
        iterations=1,
        max_retry=9,
        needs_push_media=False,
        tag='7.1_r28.arm.all.CtsSecurityTestCases_-_vm-tests-tf',
        test_name='cheets_CTS_N.7.1_r28.arm.all.CtsSecurityTestCases_-_vm-tests-tf',
        run_template=['run', 'commandAndExit', 'cts', '--include-filter', 'CtsSecurityTestCases', '--include-filter', 'CtsServicesHostTestCases', '--include-filter', 'CtsShortcutHostTestCases', '--include-filter', 'CtsShortcutManagerTestCases', '--include-filter', 'CtsSignatureTestCases', '--include-filter', 'CtsSimpleCpuTestCases', '--include-filter', 'CtsSimpleperfTestCases', '--include-filter', 'CtsSpeechTestCases', '--include-filter', 'CtsSustainedPerformanceHostTestCases', '--include-filter', 'CtsSystemIntentTestCases', '--include-filter', 'CtsSystemUiHostTestCases', '--include-filter', 'CtsSystemUiTestCases', '--include-filter', 'CtsTelecomTestCases', '--include-filter', 'CtsTelecomTestCases2', '--include-filter', 'CtsTelephony2TestCases', '--include-filter', 'CtsTelephonyTestCases', '--include-filter', 'CtsTextTestCases', '--include-filter', 'CtsTextureViewTestCases', '--include-filter', 'CtsThemeDeviceTestCases', '--include-filter', 'CtsThemeHostTestCases', '--include-filter', 'CtsToastLegacyTestCases', '--include-filter', 'CtsToastTestCases', '--include-filter', 'CtsTransitionTestCases', '--include-filter', 'CtsTrustedVoiceHostTestCases', '--include-filter', 'CtsTvProviderTestCases', '--include-filter', 'CtsTvTestCases', '--include-filter', 'CtsUiAutomationTestCases', '--include-filter', 'CtsUiDeviceTestCases', '--include-filter', 'CtsUiHostTestCases', '--include-filter', 'CtsUiRenderingTestCases', '--include-filter', 'CtsUidIsolationTestCases', '--include-filter', 'CtsUsageStatsTestCases', '--include-filter', 'CtsUsbTests', '--include-filter', 'CtsUtilTestCases', '--include-filter', 'CtsVideoTestCases', '--include-filter', 'CtsViewTestCases', '--include-filter', 'CtsVmTestCases', '--include-filter', 'CtsVoiceInteractionTestCases', '--include-filter', 'CtsVoiceSettingsTestCases', '--include-filter', 'CtsVrTestCases', '--include-filter', 'CtsWebkitTestCases', '--include-filter', 'CtsWidgetTestCases', '--include-filter', 'vm-tests-tf', '--disable-reboot', '--logcat-on-failure', '--skip-device-info'],
        retry_template=['run', 'commandAndExit', 'cts', '--disable-reboot', '--skip-device-info', '--retry', '{session_id}'],
        target_module='all.CtsSecurityTestCases_-_vm-tests-tf',
        target_plan=None,
        bundle='arm',
        uri='gs://chromeos-arc-images/cts/bundle/N/android-cts-7.1_r28-linux_x86-arm.zip',
        timeout=172800)

parallel_simple(run_CTS, machines)
