# Copyright 2019 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_Q.10_r1.arm.CtsNet'
ATTRIBUTES = 'suite:arc-cts-q'
DEPENDENCIES = 'arc'
JOB_RETRIES = 1
TEST_TYPE = 'server'
TIME = 'MEDIUM'
MAX_RESULT_SIZE_KB = 512000
DOC = 'Run module CtsNetApi23TestCases, CtsNetSecConfigAttributeTestCases, CtsNetSecConfigBasicDebugDisabledTestCases, CtsNetSecConfigBasicDebugEnabledTestCases, CtsNetSecConfigBasicDomainConfigTestCases, CtsNetSecConfigCleartextTrafficTestCases, CtsNetSecConfigDownloadManagerTestCases, CtsNetSecConfigInvalidPinTestCases, CtsNetSecConfigNestedDomainConfigTestCases, CtsNetSecConfigPrePCleartextTrafficTestCases, CtsNetSecConfigResourcesSrcTestCases, CtsNetSecPolicyUsesCleartextTrafficFalseTestCases, CtsNetSecPolicyUsesCleartextTrafficTrueTestCases, CtsNetSecPolicyUsesCleartextTrafficUnspecifiedTestCases, CtsNetTestCases, CtsNetTestCasesInternetPermission, CtsNetTestCasesLegacyApi22, CtsNetTestCasesLegacyPermission22, CtsNetTestCasesUpdateStatsPermission of the Android Compatibility Test Suite (CTS) using arm ABI in the ARC++ container.'

def run_TS(machine):
    host_list = [hosts.create_host(machine)]
    job.run_test(
        'cheets_CTS_Q',
        hosts=host_list,
        iterations=1,
        tag='10_r1.arm.CtsNet',
        test_name='cheets_CTS_Q.10_r1.arm.CtsNet',
        run_template=['run', 'commandAndExit', 'cts', '--include-filter', 'CtsNetApi23TestCases', '--include-filter', 'CtsNetSecConfigAttributeTestCases', '--include-filter', 'CtsNetSecConfigBasicDebugDisabledTestCases', '--include-filter', 'CtsNetSecConfigBasicDebugEnabledTestCases', '--include-filter', 'CtsNetSecConfigBasicDomainConfigTestCases', '--include-filter', 'CtsNetSecConfigCleartextTrafficTestCases', '--include-filter', 'CtsNetSecConfigDownloadManagerTestCases', '--include-filter', 'CtsNetSecConfigInvalidPinTestCases', '--include-filter', 'CtsNetSecConfigNestedDomainConfigTestCases', '--include-filter', 'CtsNetSecConfigPrePCleartextTrafficTestCases', '--include-filter', 'CtsNetSecConfigResourcesSrcTestCases', '--include-filter', 'CtsNetSecPolicyUsesCleartextTrafficFalseTestCases', '--include-filter', 'CtsNetSecPolicyUsesCleartextTrafficTrueTestCases', '--include-filter', 'CtsNetSecPolicyUsesCleartextTrafficUnspecifiedTestCases', '--include-filter', 'CtsNetTestCases', '--include-filter', 'CtsNetTestCasesInternetPermission', '--include-filter', 'CtsNetTestCasesLegacyApi22', '--include-filter', 'CtsNetTestCasesLegacyPermission22', '--include-filter', 'CtsNetTestCasesUpdateStatsPermission', '--logcat-on-failure'],
        retry_template=['run', 'commandAndExit', 'retry', '--retry', '{session_id}'],
        target_module='CtsNet',
        target_plan=None,
        bundle='arm',
        uri='gs://chromeos-arc-images/cts/bundle/Q/android-cts-10_r1-linux_x86-arm.zip',
        timeout=36000)

parallel_simple(run_TS, machines)
