# 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.CtsSelinux'
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 CtsSelinuxEphemeralTestCases, CtsSelinuxEphemeralTestCases[instant], CtsSelinuxTargetSdk25TestCases, CtsSelinuxTargetSdk25TestCases[secondary_user], CtsSelinuxTargetSdk27TestCases, CtsSelinuxTargetSdk27TestCases[secondary_user], CtsSelinuxTargetSdk28TestCases, CtsSelinuxTargetSdk28TestCases[secondary_user], CtsSelinuxTargetSdk29TestCases, CtsSelinuxTargetSdk29TestCases[secondary_user], CtsSelinuxTargetSdkCurrentTestCases, CtsSelinuxTargetSdkCurrentTestCases[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.CtsSelinux',
        test_name='cheets_CTS_R.11_r3.x86.CtsSelinux',
        run_template=['run', 'commandAndExit', 'cts', '--include-filter', 'CtsSelinuxEphemeralTestCases', '--include-filter', 'CtsSelinuxEphemeralTestCases[instant]', '--include-filter', 'CtsSelinuxTargetSdk25TestCases', '--include-filter', 'CtsSelinuxTargetSdk25TestCases[secondary_user]', '--include-filter', 'CtsSelinuxTargetSdk27TestCases', '--include-filter', 'CtsSelinuxTargetSdk27TestCases[secondary_user]', '--include-filter', 'CtsSelinuxTargetSdk28TestCases', '--include-filter', 'CtsSelinuxTargetSdk28TestCases[secondary_user]', '--include-filter', 'CtsSelinuxTargetSdk29TestCases', '--include-filter', 'CtsSelinuxTargetSdk29TestCases[secondary_user]', '--include-filter', 'CtsSelinuxTargetSdkCurrentTestCases', '--include-filter', 'CtsSelinuxTargetSdkCurrentTestCases[secondary_user]', '--logcat-on-failure'],
        retry_template=['run', 'commandAndExit', 'retry', '--retry', '{session_id}'],
        target_module='CtsSelinux',
        target_plan=None,
        bundle='x86',
        uri='LATEST',
        use_jdk9=True,
        timeout=23400)

parallel_simple(run_TS, machines)
