# 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!
from autotest_lib.server.cros.tradefed import wifi_utils
import pipes

AUTHOR = 'n/a'
NAME = 'cheets_CTS_R.internal.arm.all.CtsInitTestCases_-_CtsJobSchedulerTestCases'
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-arm-10'
DEPENDENCIES = 'arc'
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)]
    ssid, wifipass = wifi_utils.get_wifi_ssid_pass(machine['hostname'])
    job.run_test(
        'cheets_CTS_R',
        hosts=host_list,
        iterations=1,
        max_retry=9,
        tag='internal.arm.all.CtsInitTestCases_-_CtsJobSchedulerTestCases',
        test_name='cheets_CTS_R.internal.arm.all.CtsInitTestCases_-_CtsJobSchedulerTestCases',
        run_template=['run', 'commandAndExit', 'cts', '--include-filter', 'CtsInitTestCases', '--include-filter', 'CtsInitTestCases[secondary_user]', '--include-filter', 'CtsInlineMockingTestCases', '--include-filter', 'CtsInlineMockingTestCases[instant]', '--include-filter', 'CtsInlineMockingTestCases[secondary_user]', '--include-filter', 'CtsInputMethodServiceHostTestCases', '--include-filter', 'CtsInputMethodServiceHostTestCases[instant]', '--include-filter', 'CtsInputMethodServiceHostTestCases[secondary_user]', '--include-filter', 'CtsInputMethodTestCases', '--include-filter', 'CtsInputMethodTestCases[instant]', '--include-filter', 'CtsInputMethodTestCases[secondary_user]', '--include-filter', 'CtsInstantAppTests', '--include-filter', 'CtsInstantAppTests[secondary_user]', '--include-filter', 'CtsIntentSignatureTestCases', '--include-filter', 'CtsIntentSignatureTestCases[secondary_user]', '--include-filter', 'CtsJdwpSecurityHostTestCases', '--include-filter', 'CtsJdwpSecurityHostTestCases[secondary_user]', '--include-filter', 'CtsJdwpTestCases', '--include-filter', 'CtsJdwpTestCases[instant]', '--include-filter', 'CtsJdwpTestCases[secondary_user]', '--include-filter', 'CtsJdwpTunnelHostTestCases', '--include-filter', 'CtsJdwpTunnelHostTestCases[secondary_user]', '--include-filter', 'CtsJniTestCases', '--include-filter', 'CtsJniTestCases[instant]', '--include-filter', 'CtsJniTestCases[secondary_user]', '--include-filter', 'CtsJobSchedulerSharedUidTestCases', '--include-filter', 'CtsJobSchedulerSharedUidTestCases[secondary_user]', '--include-filter', 'CtsJobSchedulerTestCases', '--include-filter', 'CtsJobSchedulerTestCases[secondary_user]', '--logcat-on-failure'],
        retry_template=['run', 'commandAndExit', 'retry', '--retry', '{session_id}'],
        target_module='all.CtsInitTestCases_-_CtsJobSchedulerTestCases',
        target_plan=None,
        bundle='arm',
        uri='LATEST',
        precondition_commands=['adb shell cmd wifi add-network %s %s %s' % (pipes.quote(ssid), 'open' if wifipass == '' else 'wpa', pipes.quote(wifipass)), 'adb shell cmd wifi connect-network %s' % pipes.quote(ssid), 'adb shell dumpsys wifi transports -eth'],
        timeout=172800)

parallel_simple(run_TS, machines)
