# Copyright 2020 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!

AUTHOR = 'n/a'
NAME = 'cheets_CTS_R.internal.x86.all.CtsAssistTestCases_-_CtsBlobStoreTestHelper'
METADATA = {
    "contacts": ["arc-cts-eng@google.com"],
    "bug_component": "b:183644",
    "criteria": "A part of Android CTS",
}
ATTRIBUTES = 'suite:arc-cts-qual, suite:arc-cts-qual-x86-2'
DEPENDENCIES = 'arc, cts_abi_x86'
HW_DEPS = ['android-container-rvc','android-vm-rvc']
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_R',
        hosts=host_list,
        iterations=1,
        max_retry=9,
        tag='internal.x86.all.CtsAssistTestCases_-_CtsBlobStoreTestHelper',
        test_name='cheets_CTS_R.internal.x86.all.CtsAssistTestCases_-_CtsBlobStoreTestHelper',
        run_template=['run', 'commandAndExit', 'cts', '--include-filter', 'CtsAssistTestCases', '--include-filter', 'CtsAssistTestCases[instant]', '--include-filter', 'CtsAssistTestCases[secondary_user]', '--include-filter', 'CtsAtomicInstallTestCases', '--include-filter', 'CtsAtomicInstallTestCases[secondary_user]', '--include-filter', 'CtsAtraceHostTestCases', '--include-filter', 'CtsAtraceHostTestCases[instant]', '--include-filter', 'CtsAtraceHostTestCases[secondary_user]', '--include-filter', 'CtsAttentionServiceDeviceTestCases', '--include-filter', 'CtsAttentionServiceDeviceTestCases[secondary_user]', '--include-filter', 'CtsBackgroundRestrictionsTestCases', '--include-filter', 'CtsBackgroundRestrictionsTestCases[instant]', '--include-filter', 'CtsBackgroundRestrictionsTestCases[secondary_user]', '--include-filter', 'CtsBackupHostTestCases', '--include-filter', 'CtsBackupTestCases', '--include-filter', 'CtsBatterySavingTestCases', '--include-filter', 'CtsBatterySavingTestCases[secondary_user]', '--include-filter', 'CtsBionicAppTestCases', '--include-filter', 'CtsBionicAppTestCases[instant]', '--include-filter', 'CtsBionicAppTestCases[secondary_user]', '--include-filter', 'CtsBionicTestCases', '--include-filter', 'CtsBionicTestCases[secondary_user]', '--include-filter', 'CtsBlobStoreHostTestCases', '--include-filter', 'CtsBlobStoreHostTestCases[secondary_user]', '--include-filter', 'CtsBlobStoreHostTestHelper', '--include-filter', 'CtsBlobStoreHostTestHelper[secondary_user]', '--include-filter', 'CtsBlobStoreTestCases', '--include-filter', 'CtsBlobStoreTestCases[secondary_user]', '--include-filter', 'CtsBlobStoreTestHelper', '--include-filter', 'CtsBlobStoreTestHelperDiffSig', '--include-filter', 'CtsBlobStoreTestHelperDiffSig2', '--include-filter', 'CtsBlobStoreTestHelperDiffSig2[secondary_user]', '--include-filter', 'CtsBlobStoreTestHelperDiffSig[secondary_user]', '--include-filter', 'CtsBlobStoreTestHelper[secondary_user]', '--logcat-on-failure'],
        retry_template=['run', 'commandAndExit', 'retry', '--retry', '{session_id}'],
        target_module='all.CtsAssistTestCases_-_CtsBlobStoreTestHelper',
        target_plan=None,
        bundle='x86',
        uri='LATEST',
        timeout=172800)

parallel_simple(run_TS, machines)
