# 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_VTS_R.11_r2.x86_64.binderDriverInterfaceTest'
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 binderDriverInterfaceTest, binderDriverInterfaceTest_IPC_32 of the Vendor Test Suite (VTS) using x86_64 ABI in the ARC++ container.'

def run_TS(machine):
    host_list = [hosts.create_host(machine)]
    job.run_test(
        'cheets_VTS_R',
        hosts=host_list,
        iterations=1,
        tag='11_r2.x86_64.binderDriverInterfaceTest',
        test_name='cheets_VTS_R.11_r2.x86_64.binderDriverInterfaceTest',
        run_template=['run', 'commandAndExit', 'vts', '--include-filter', 'binderDriverInterfaceTest', '--include-filter', 'binderDriverInterfaceTest_IPC_32', '--logcat-on-failure'],
        retry_template=['run', 'commandAndExit', 'retry', '--retry', '{session_id}'],
        target_module='binderDriverInterfaceTest',
        target_plan=None,
        bundle='x86_64',
        uri='LATEST',
        use_jdk9=True,
        timeout=5400)

parallel_simple(run_TS, machines)
