#!/usr/bin/env python2
# Copyright 2016 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.

import collections

# The dashboard suppresses upload to APFE for GS directories (based on autotest
# tag) that contain 'tradefed-run-collect-tests'. b/119640440
# Do not change the name/tag without adjusting the dashboard.
_COLLECT = 'tradefed-run-collect-tests-only-internal'
_PUBLIC_COLLECT = 'tradefed-run-collect-tests-only'
_ALL = 'all'

CONFIG = {}

CONFIG['TEST_NAME'] = 'cheets_GTS'
CONFIG['DOC_TITLE'] = 'Android Google Test Suite (GTS)'
CONFIG['MOBLAB_SUITE_NAME'] = 'suite:gts'
CONFIG['COPYRIGHT_YEAR'] = 2016

CONFIG['AUTHKEY'] = 'gs://chromeos-arc-images/cts/bundle/gts-arc.json'
CONFIG['TRADEFED_IGNORE_BUSINESS_LOGIC_FAILURE'] = True

CONFIG['LARGE_MAX_RESULT_SIZE'] = 500 * 1024
CONFIG['NORMAL_MAX_RESULT_SIZE'] = 300 * 1024

CONFIG['TRADEFED_CTS_COMMAND'] ='gts'
CONFIG['TRADEFED_RETRY_COMMAND'] = 'retry'
CONFIG['TRADEFED_DISABLE_REBOOT'] = False
CONFIG['TRADEFED_DISABLE_REBOOT_ON_COLLECTION'] = True
CONFIG['TRADEFED_MAY_SKIP_DEVICE_INFO'] = False
CONFIG['NEEDS_DEVICE_INFO'] = []
CONFIG['TRADEFED_EXECUTABLE_PATH'] = 'android-gts/tools/gts-tradefed'
CONFIG['JAVA_EXECUTABLE_PATH'] = 'android-gts/jdk/bin/java'

CONFIG['INTERNAL_SUITE_NAMES'] = ['suite:arc-gts']
CONFIG['QUAL_SUITE_NAMES'] = ['suite:arc-gts-qual']

CONFIG['CONTROLFILE_TEST_FUNCTION_NAME'] = 'run_TS'
CONFIG['CONTROLFILE_WRITE_SIMPLE_QUAL_AND_REGRESS'] = False
CONFIG['CONTROLFILE_WRITE_CAMERA'] = False
CONFIG['CONTROLFILE_WRITE_EXTRA'] = True

CONFIG['CTS_JOB_RETRIES_IN_PUBLIC'] = 2
CONFIG['CTS_QUAL_RETRIES'] = 9
CONFIG['CTS_MAX_RETRIES'] = {}

# Timeout in hours.
# Modules that run very long are encoded here.
CONFIG['CTS_TIMEOUT_DEFAULT'] = 0.2
CONFIG['CTS_TIMEOUT'] = {
        'GtsAssistantMicHostTestCases': 0.5,
        'GtsExoPlayerTestCases': 1.5,
        'GtsExoPlayerTestCases.others': 1.5,
        'GtsGmscoreHostTestCases': 1.0,
        'GtsMediaTestCases': 4,
        'GtsNetworkWatchlistTestCases': 1.0,
        'GtsYouTubeTestCases': 1.0,
        _ALL: 24,
        _COLLECT: 1.0,
        _PUBLIC_COLLECT: 1.0,
}

# Any test that runs as part as blocking BVT needs to be stable and fast. For
# this reason we enforce a tight timeout on these modules/jobs.
# Timeout in hours. (0.1h = 6 minutes)
CONFIG['BVT_TIMEOUT'] = 0.1
# We allow a very long runtime for qualification (1 day).
CONFIG['QUAL_TIMEOUT'] = 24

CONFIG['QUAL_BOOKMARKS'] = sorted([
        'A',  # A bookend to simplify partition algorithm.
        'GtsExoPlayerTestCases',
        'GtsExoPlayerTestCasesz',  # TODO(b/178432852) runs GtsExo alone
        'GtsMediaTestCases',
        'GtsMediaTestCasesz',  # runs the biggest module in a single job.
        'zzzzz'  # A bookend to simplify algorithm.
])

CONFIG['SMOKE'] = []

CONFIG['BVT_ARC'] = []

CONFIG['BVT_PERBUILD'] = [
    'GtsAdminTestCases',
    'GtsMemoryHostTestCases',
    'GtsMemoryTestCases',
    'GtsNetTestCases',
    'GtsOsTestCases',
    'GtsPlacementTestCases',
    'GtsPrivacyTestCases',
]

CONFIG['NEEDS_POWER_CYCLE'] = []

CONFIG['HARDWARE_DEPENDENT_MODULES'] = []

CONFIG['VMTEST_INFO_SUITES'] = collections.OrderedDict()

# Modules that are known to download and/or push media file assets.
CONFIG['MEDIA_MODULES'] = ['GtsYouTubeTestCases']
CONFIG['NEEDS_PUSH_MEDIA'] = CONFIG['MEDIA_MODULES'] + [_ALL]
CONFIG['ENABLE_DEFAULT_APPS'] = []

_MUTE_COMMAND = "\'cras_test_client --mute 1\'"
# Preconditions applicable to internal tests.
CONFIG['PRECONDITION'] = {
        'GtsExoPlayerTestCases': [_MUTE_COMMAND],
        'GtsMediaTestCases': [_MUTE_COMMAND],
        'GtsYouTubeTestCases': [_MUTE_COMMAND],
}
CONFIG['LOGIN_PRECONDITION'] = {}

CONFIG['LAB_DEPENDENCY'] = {}

# Preconditions applicable to public tests.
CONFIG['PUBLIC_PRECONDITION'] = {}
CONFIG['PUBLIC_DEPENDENCIES'] = {}

# This information is changed based on regular analysis of the failure rate on
# partner moblabs.
CONFIG['PUBLIC_MODULE_RETRY_COUNT'] = {
  _ALL: 2,
  'GtsExoPlayerTestCases': 5,  # TODO(b/149376356, b/164230246)
  'GtsMediaTestCases': 5,  # TODO(b/140841434)
  'GtsYouTubeTestCases': 5,  # TODO(b/149376356)
}

CONFIG['PUBLIC_OVERRIDE_TEST_PRIORITY'] = {
    _PUBLIC_COLLECT: 70,
}

# This information is changed based on regular analysis of the job run time on
# partner moblabs.

CONFIG['OVERRIDE_TEST_LENGTH'] = {
    'GtsMediaTestCases': 4,
    _ALL: 4,
    # Even though collect tests doesn't run very long, it must be the very first
    # job executed inside of the suite. Hence it is the only 'LENGTHY' test.
    _COLLECT: 5,  # LENGTHY
}

QUAL_REGRESSION_SUITES = ['suite:arc-gts-qual', 'suite:arc-gts']

# Enabling --logcat-on-failure can extend total run time significantly if
# individual tests finish in the order of 10ms or less (b/118836700). Specify
# modules here to not enable the flag.
CONFIG['DISABLE_LOGCAT_ON_FAILURE'] = set([])
CONFIG['EXTRA_MODULES'] = {
        'GtsExoPlayerTestCases': {
                'GtsExoPlayerTestCases.cbc1': QUAL_REGRESSION_SUITES,
                'GtsExoPlayerTestCases.cbcs': QUAL_REGRESSION_SUITES,
                'GtsExoPlayerTestCases.cenc': QUAL_REGRESSION_SUITES,
                'GtsExoPlayerTestCases.others': QUAL_REGRESSION_SUITES,
        },
}
CONFIG['PUBLIC_EXTRA_MODULES'] = {
        'GtsExoPlayerTestCases': {
                'GtsExoPlayerTestCases.cbc1': [CONFIG['MOBLAB_SUITE_NAME']],
                'GtsExoPlayerTestCases.cbcs': [CONFIG['MOBLAB_SUITE_NAME']],
                'GtsExoPlayerTestCases.cenc': [CONFIG['MOBLAB_SUITE_NAME']],
                'GtsExoPlayerTestCases.others': [CONFIG['MOBLAB_SUITE_NAME']],
        }
}
CONFIG['EXTRA_SUBMODULE_OVERRIDE'] = {}
CONFIG['EXTRA_COMMANDLINE'] = {
        'GtsExoPlayerTestCases.cbc1': [
                '--include-filter',
                'GtsExoPlayerTestCases com.google.android.exoplayer.gts.DashTest#testWidevineH264AdaptiveWithSeekingCbc1',
        ],
        'GtsExoPlayerTestCases.cbcs': [
                '--include-filter',
                'GtsExoPlayerTestCases com.google.android.exoplayer.gts.DashTest#testWidevineH264AdaptiveWithSeekingCbcs',
        ],
        'GtsExoPlayerTestCases.cenc': [
                '--include-filter',
                'GtsExoPlayerTestCases com.google.android.exoplayer.gts.DashTest#testWidevineH264AdaptiveWithSeekingCenc',
        ],
        'GtsExoPlayerTestCases.others': [
                '--module',
                'GtsExoPlayerTestCases',
                '--exclude-filter',
                'GtsExoPlayerTestCases com.google.android.exoplayer.gts.DashTest#testWidevineH264AdaptiveWithSeekingCbc1',
                '--exclude-filter',
                'GtsExoPlayerTestCases com.google.android.exoplayer.gts.DashTest#testWidevineH264AdaptiveWithSeekingCbcs',
                '--exclude-filter',
                'GtsExoPlayerTestCases com.google.android.exoplayer.gts.DashTest#testWidevineH264AdaptiveWithSeekingCenc',
        ],
}
CONFIG['EXTRA_ATTRIBUTES'] = {
    'tradefed-run-collect-tests-only-internal': ['suite:arc-gts'],
}
CONFIG['EXTRA_ARTIFACTS'] = {}

CONFIG['PREREQUISITES'] = {
    'GtsGmscoreHostTestCases': ['bluetooth'],
}
CONFIG['USE_JDK9'] = True

from generate_controlfiles_common import main

if __name__ == '__main__':
    main(CONFIG)
