# 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.11_r3.x86.signed-Cts'
ATTRIBUTES = 'suite:arc-cts-r'
DEPENDENCIES = 'arc, cts_abi_x86'
JOB_RETRIES = 1
TEST_TYPE = 'server'
TIME = 'MEDIUM'
MAX_RESULT_SIZE_KB = 512000
DOC = 'Run module signed-CtsOmapiTestCases, signed-CtsOmapiTestCases[secondary_user], signed-CtsSecureElementAccessControlTestCases1, signed-CtsSecureElementAccessControlTestCases1[secondary_user], signed-CtsSecureElementAccessControlTestCases2, signed-CtsSecureElementAccessControlTestCases2[secondary_user], signed-CtsSecureElementAccessControlTestCases3, signed-CtsSecureElementAccessControlTestCases3[secondary_user] of the Android Compatibility Test Suite (CTS) using x86 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,
        tag='11_r3.x86.signed-Cts',
        test_name='cheets_CTS_R.11_r3.x86.signed-Cts',
        run_template=['run', 'commandAndExit', 'cts', '--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]', '--logcat-on-failure'],
        retry_template=['run', 'commandAndExit', 'retry', '--retry', '{session_id}'],
        target_module='signed-Cts',
        target_plan=None,
        bundle='x86',
        uri='LATEST',
        use_jdk9=True,
        timeout=16200)

parallel_simple(run_TS, machines)
