1# Copyright 2017, The Android Open Source Project 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); 4# you may not use this file except in compliance with the License. 5# You may obtain a copy of the License at 6# 7# http://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, 11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12# See the License for the specific language governing permissions and 13# limitations under the License. 14 15"""Various globals used by atest.""" 16 17 18from collections import namedtuple 19import os 20from pathlib import Path 21import re 22import tempfile 23 24# Result server constants for atest_utils. 25RESULT_SERVER = '' 26RESULT_SERVER_ARGS = [] 27RESULT_SERVER_TIMEOUT = 5 28# Result arguments if tests are configured in TEST_MAPPING. 29TEST_MAPPING_RESULT_SERVER_ARGS = [] 30 31# Google service key for gts tests. 32GTS_GOOGLE_SERVICE_ACCOUNT = '' 33 34# Arg constants. 35WAIT_FOR_DEBUGGER = 'WAIT_FOR_DEBUGGER' 36DISABLE_INSTALL = 'DISABLE_INSTALL' 37DISABLE_TEARDOWN = 'DISABLE_TEARDOWN' 38SERIAL = 'SERIAL' 39SHARDING = 'SHARDING' 40ALL_ABI = 'ALL_ABI' 41HOST = 'HOST' 42DEVICE_ONLY = 'DEVICE_ONLY' 43CUSTOM_ARGS = 'CUSTOM_ARGS' 44DRY_RUN = 'DRY_RUN' 45ANDROID_SERIAL = 'ANDROID_SERIAL' 46INSTANT = 'INSTANT' 47USER_TYPE = 'USER_TYPE' 48ITERATIONS = 'ITERATIONS' 49RERUN_UNTIL_FAILURE = 'RERUN_UNTIL_FAILURE' 50RETRY_ANY_FAILURE = 'RETRY_ANY_FAILURE' 51TF_DEBUG = 'TF_DEBUG' 52DEFAULT_DEBUG_PORT = '10888' 53COLLECT_TESTS_ONLY = 'COLLECT_TESTS_ONLY' 54TF_TEMPLATE = 'TF_TEMPLATE' 55BAZEL_MODE_FEATURES = 'BAZEL_MODE_FEATURES' 56REQUEST_UPLOAD_RESULT = 'REQUEST_UPLOAD_RESULT' 57DISABLE_UPLOAD_RESULT = 'DISABLE_UPLOAD_RESULT' 58MODULES_IN = 'MODULES-IN-' 59AGGREGATE_METRIC_FILTER_ARG = 'AGGREGATE_METRIC_FILTER' 60ANNOTATION_FILTER = 'ANNOTATION_FILTER' 61BAZEL_ARG = 'BAZEL_ARG' 62COVERAGE = 'COVERAGE' 63TEST_FILTER = 'TEST_FILTER' 64TEST_TIMEOUT = 'TEST_TIMEOUT' 65VERBOSE = 'VERBOSE' 66LD_LIBRARY_PATH = 'LD_LIBRARY_PATH' 67USE_TF_MIN_BASE_TEMPLATE = 'USE_TF_MIN_BASE_TEMPLATE' 68 69# Robolectric Types: 70ROBOTYPE_MODERN = 1 71ROBOTYPE_LEGACY = 2 72 73# Codes of specific events. These are exceptions that don't stop anything 74# but sending metrics. 75ACCESS_CACHE_FAILURE = 101 76ACCESS_HISTORY_FAILURE = 102 77IMPORT_FAILURE = 103 78PLOCATEDB_LOCKED = 104 79 80# Test finder constants. 81MODULE_CONFIG = 'AndroidTest.xml' 82MODULE_COMPATIBILITY_SUITES = 'compatibility_suites' 83MODULE_NAME = 'module_name' 84MODULE_PATH = 'path' 85MODULE_CLASS = 'class' 86MODULE_AUTO_TEST_CONFIG = 'auto_test_config' 87MODULE_INSTALLED = 'installed' 88MODULE_CLASS_ROBOLECTRIC = 'ROBOLECTRIC' 89MODULE_CLASS_NATIVE_TESTS = 'NATIVE_TESTS' 90MODULE_CLASS_JAVA_LIBRARIES = 'JAVA_LIBRARIES' 91MODULE_TEST_CONFIG = 'test_config' 92MODULE_MAINLINE_MODULES = 'test_mainline_modules' 93MODULE_DEPENDENCIES = 'dependencies' 94MODULE_SRCS = 'srcs' 95MODULE_IS_UNIT_TEST = 'is_unit_test' 96MODULE_SHARED_LIBS = 'shared_libs' 97MODULE_RUNTIME_DEPS = 'runtime_dependencies' 98MODULE_STATIC_DEPS = 'static_dependencies' 99MODULE_DATA_DEPS = 'data_dependencies' 100MODULE_SUPPORTED_VARIANTS = 'supported_variants' 101MODULE_LIBS = 'libs' 102MODULE_STATIC_LIBS = 'static_libs' 103MODULE_HOST_DEPS = 'host_dependencies' 104MODULE_TARGET_DEPS = 'target_dependencies' 105MODULE_TEST_OPTIONS_TAGS = 'test_options_tags' 106MODULE_INFO_ID = 'module_info_id' 107 108 109# Env constants 110ANDROID_BUILD_TOP = 'ANDROID_BUILD_TOP' 111ANDROID_OUT = 'OUT' 112ANDROID_OUT_DIR = 'OUT_DIR' 113ANDROID_OUT_DIR_COMMON_BASE = 'OUT_DIR_COMMON_BASE' 114ANDROID_HOST_OUT = 'ANDROID_HOST_OUT' 115ANDROID_PRODUCT_OUT = 'ANDROID_PRODUCT_OUT' 116ANDROID_TARGET_PRODUCT = 'TARGET_PRODUCT' 117TARGET_BUILD_VARIANT = 'TARGET_BUILD_VARIANT' 118ANDROID_TARGET_OUT_TESTCASES = 'ANDROID_TARGET_OUT_TESTCASES' 119 120# Test Info data keys 121# Value of include-filter option. 122TI_FILTER = 'filter' 123TI_REL_CONFIG = 'rel_config' 124TI_MODULE_CLASS = 'module_class' 125# Value of module-arg option 126TI_MODULE_ARG = 'module-arg' 127 128# Google TF 129GTF_MODULE = 'google-tradefed' 130GTF_TARGET = 'google-tradefed-core' 131# Defines the TF build targets which only exist in internal branches. 132# TODO(b/283364305) Have a flag and use the setup in vendor to define the flag. 133GTF_TARGETS = set() 134 135# TEST_MAPPING filename 136TEST_MAPPING = 'TEST_MAPPING' 137# Test group for tests in TEST_MAPPING 138TEST_GROUP_PRESUBMIT = 'presubmit' 139TEST_GROUP_PRESUBMIT_LARGE = 'presubmit-large' 140TEST_GROUP_POSTSUBMIT = 'postsubmit' 141TEST_GROUP_ALL = 'all' 142DEFAULT_TEST_GROUPS = [TEST_GROUP_PRESUBMIT, TEST_GROUP_PRESUBMIT_LARGE] 143# Key in TEST_MAPPING file for a list of imported TEST_MAPPING file 144TEST_MAPPING_IMPORTS = 'imports' 145 146# TradeFed command line args 147TF_INCLUDE_FILTER_OPTION = 'include-filter' 148TF_EXCLUDE_FILTER_OPTION = 'exclude-filter' 149TF_INCLUDE_FILTER = '--include-filter' 150TF_EXCLUDE_FILTER = '--exclude-filter' 151TF_ATEST_INCLUDE_FILTER = '--atest-include-filter' 152TF_ATEST_INCLUDE_FILTER_VALUE_FMT = '{test_name}:{test_filter}' 153TF_MODULE_ARG = '--module-arg' 154TF_MODULE_ARG_VALUE_FMT = '{test_name}:{option_name}:{option_value}' 155TF_SUITE_FILTER_ARG_VALUE_FMT = '"{test_name} {option_value}"' 156TF_SKIP_LOADING_CONFIG_JAR = '--skip-loading-config-jar' 157TF_MODULE_FILTER = '--module' 158TF_ENABLE_MAINLINE_PARAMETERIZED_MODULES = ( 159 '--enable-mainline-parameterized-modules' 160) 161TF_ENABLE_PARAMETERIZED_MODULES = '--enable-parameterized-modules' 162TF_MODULE_PARAMETER = '--module-parameter' 163 164# Mobly constants 165MOBLY_TEST_OPTIONS_TAG = 'mobly' 166 167# Suite Plans 168SUITE_PLANS = frozenset(['cts']) 169 170# Constants of Steps 171REBUILD_MODULE_INFO_FLAG = '--rebuild-module-info' 172BUILD_STEP = 'build' 173DEVICE_UPDATE_STEP = 'update_device' 174INSTALL_STEP = 'install' 175TEST_STEP = 'test' 176ALL_STEPS = [BUILD_STEP, INSTALL_STEP, TEST_STEP] 177 178# ANSI code shift for colorful print 179BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = range(8) 180 181# Types of Levenshetine Distance Cost 182COST_TYPO = (1, 1, 1) 183COST_SEARCH = (8, 1, 5) 184LD_RANGE = 2 185 186# Value of TestInfo install_locations. 187DEVICELESS_TEST = 'host' 188DEVICE_TEST = 'device' 189BOTH_TEST = 'both' 190 191# Metrics 192NO_METRICS_ARG = '--no-metrics' 193EXTERNAL = 'EXTERNAL_RUN' 194INTERNAL = 'INTERNAL_RUN' 195# LINT.IfChange 196INTERNAL_EMAIL = '@google.com' 197INTERNAL_HOSTNAME = ['.google.com', 'c.googlers.com'] 198# LINT.ThenChange(/test/robolectric-extensions/clearcut-junit-listener/src/main/java/com/google/asuite/clearcut/junit/listener/EnvironmentInformation.java) 199TOOL_NAME = 'atest' 200SUB_TOOL_NAME = '' 201USER_FROM_TOOL = 'USER_FROM_TOOL' 202USER_FROM_SUB_TOOL = 'USER_FROM_SUB_TOOL' 203TF_PREPARATION = 'tf-preparation' 204 205# Detect type for local_detect_event. 206# XTS suite types encode from 100 to 199 207DETECT_TYPE_XTS_SUITE = {'cts': 101, 'vts': 104} 208 209# Considering a trade-off between speed and size, we set UPPER_LIMIT to 100000 210# to make maximum file space 10M(100000(records)*100(byte/record)) at most. 211# Therefore, to update history file will spend 1 sec at most in each run. 212UPPER_LIMIT = 100000 213TRIM_TO_SIZE = 50000 214 215# VTS plans 216VTS_STAGING_PLAN = 'vts-staging-default' 217 218# TreeHugger TEST_MAPPING SUITE_PLANS 219TEST_MAPPING_SUITES = ['device-tests', 'general-tests'] 220 221# VTS10 TF 222VTS_TF_MODULE = 'vts10-tradefed' 223 224# VTS TF 225VTS_CORE_TF_MODULE = 'vts-tradefed' 226 227# VTS suite set 228VTS_CORE_SUITE = 'vts' 229 230# MTS suite set 231MTS_SUITE = 'mts' 232 233# CTS tradefed jar 234CTS_JAR = 'cts-tradefed' 235 236# ATest TF 237ATEST_TF_MODULE = 'atest-tradefed' 238 239# Atest index path and relative dirs/caches. 240INDEX_DIR = os.path.join(os.getenv(ANDROID_HOST_OUT, ''), 'indices') 241LOCATE_CACHE = os.path.join(INDEX_DIR, 'plocate.db') 242BUILDFILES_STP = os.path.join(INDEX_DIR, 'buildfiles.stp') 243INT_INDEX = os.path.join(INDEX_DIR, 'integration.idx') 244CLASS_INDEX = os.path.join(INDEX_DIR, 'classes.idx') 245CC_CLASS_INDEX = os.path.join(INDEX_DIR, 'cc_classes.idx') 246PACKAGE_INDEX = os.path.join(INDEX_DIR, 'packages.idx') 247QCLASS_INDEX = os.path.join(INDEX_DIR, 'fqcn.idx') 248 249# Regeular Expressions 250CC_EXT_RE = re.compile(r'.*\.(cc|cpp)$') 251JAVA_EXT_RE = re.compile(r'.*\.(java|kt)$') 252# e.g. /path/to/ccfile.cc: TYPED_TEST_P(test_name, method_name){ 253CC_OUTPUT_RE = re.compile( 254 r'(?P<file_path>/.*):\s*(TYPED_TEST(_P)*|TEST(_F|_P)*)\s*\(' 255 r'(?P<test_name>\w+)\s*,\s*(?P<method_name>\w+)\)\s*\{' 256) 257# Used by locate command. 258CC_GREP_RE = r'^\s*(TYPED_TEST(_P)*|TEST(_F|_P)*)\s*\(\w+,' 259# e.g. /path/to/Javafile.java:package com.android.settings.accessibility 260# grab the path, Javafile(class) and com.android.settings.accessibility(package) 261CLASS_OUTPUT_RE = re.compile(r'(?P<java_path>.*/(?P<class>[A-Z]\w+)\.\w+)[:].*') 262QCLASS_OUTPUT_RE = re.compile( 263 r'(?P<java_path>.*/(?P<class>[A-Z]\w+)\.\w+)' 264 r'[:]\s*package\s+(?P<package>[^(;|\s)]+)\s*' 265) 266PACKAGE_OUTPUT_RE = re.compile( 267 r'(?P<java_dir>/.*/).*[.](java|kt)[:]\s*package\s+' 268 r'(?P<package>[^(;|\s)]+)\s*' 269) 270 271ATEST_RESULT_ROOT = Path( 272 tempfile.gettempdir(), 273 'atest_result_%s' % Path('~').expanduser().name.replace(' ', '_'), 274) 275ATEST_TEST_RECORD_PROTO = 'test_record.proto' 276LATEST_RESULT_FILE = os.path.join(ATEST_RESULT_ROOT, 'LATEST', 'test_result') 277 278# Tests list which need vts_ltp_tests as test dependency 279REQUIRED_LTP_TEST_MODULES = [ 280 'vts_ltp_test_arm', 281 'vts_ltp_test_arm_64', 282 'vts_ltp_test_arm_64_lowmem', 283 'vts_ltp_test_arm_64_hwasan', 284 'vts_ltp_test_arm_64_lowmem_hwasan', 285 'vts_ltp_test_arm_lowmem', 286 'vts_ltp_test_x86_64', 287 'vts_ltp_test_x86', 288] 289# Tests list which need vts_kselftest_tests as test dependency 290REQUIRED_KSELFTEST_TEST_MODULES = [ 291 'vts_linux_kselftest_arm_32', 292 'vts_linux_kselftest_arm_64', 293 'vts_linux_kselftest_x86_32', 294 'vts_linux_kselftest_x86_64', 295] 296 297# XTS suite set dependency. 298SUITE_DEPS = {} 299 300# Tradefed log file name term. 301TF_HOST_LOG = 'host_log_*' 302 303ASUITE_REPO_PROJECT_NAME = 'platform/tools/asuite' 304 305# logstorage api scope. 306SCOPE_BUILD_API_SCOPE = '' 307STORAGE_API_VERSION = '' 308STORAGE_API_VERSION_LEGACY = '' 309STORAGE_SERVICE_NAME = '' 310CLIENT_ID = '' 311CLIENT_SECRET = '' 312CREDENTIAL_FILE_NAME = '' 313TOKEN_FILE_PATH = '' 314INVOCATION_ID = 'INVOCATION_ID' 315WORKUNIT_ID = 'WORKUNIT_ID' 316LOCAL_BUILD_ID = 'LOCAL_BUILD_ID' 317BUILD_TARGET = 'BUILD_TARGET' 318RESULT_LINK = '' 319TF_GLOBAL_CONFIG = '' 320DISCOVERY_SERVICE = '' 321DISCOVERY_SERVICE_LEGACY = '' 322STORAGE2_TEST_URI = '' 323 324# SSO constants. 325TOKEN_EXCHANGE_COMMAND = '' 326TOKEN_EXCHANGE_REQUEST = '' 327SCOPE = '' 328 329# Example arguments used in ~/.atest/config 330ATEST_EXAMPLE_ARGS = ( 331 '## Specify only one option per line; any test name/path will be ignored' 332 ' automatically.\n## Option that follows a "#" will be' 333 ' ignored.\nhello_world_test # Test name will be skipped WITHOUT' 334 ' warning.\n# -- --module-arg Foo:variable:value # Only support atest' 335 ' arguments so "--" will be ignored.\n ' 336 ' # and will stop running tests.\n# --iterations=3\n#' 337 ' --retry-any-failure=5\n# --rerun-until-failure=5\n# --start-avd #' 338 ' also run "acloud create" concurrently.\n# --all-abi # Set to run' 339 ' tests for all abis.\n# --verbose # turn on verbose mode for' 340 ' debugging.\n' 341) 342 343# AndroidJUnitTest related argument. 344ANDROID_JUNIT_CLASS = 'com.android.tradefed.testtype.AndroidJUnitTest' 345INCLUDE_ANNOTATION = 'include-annotation' 346EXCLUDE_ANNOTATION = 'exclude-annotation' 347SUPPORTED_FILTERS = [INCLUDE_ANNOTATION, EXCLUDE_ANNOTATION] 348 349# Tradefed config-descriptor metadata. 350CONFIG_DESCRIPTOR = 'config-descriptor:metadata' 351PARAMETER_KEY = 'parameter' 352MAINLINE_PARAM_KEY = 'mainline-param' 353 354# Tradefed related constant. 355TF_TEST_ARG = '--test-arg' 356TF_AND_JUNIT_CLASS = 'com.android.tradefed.testtype.AndroidJUnitTest' 357TF_EXCLUDE_ANNOTATE = 'exclude-annotation' 358INSTANT_MODE_ANNOTATE = 'android.platform.test.annotations.AppModeInstant' 359TF_PARA_INSTANT_APP = 'instant_app' 360TF_PARA_SECOND_USR = 'secondary_user' 361TF_PARA_MULTIABI = 'multi_abi' 362DEFAULT_EXCLUDE_PARAS = { 363 TF_PARA_INSTANT_APP, 364 TF_PARA_SECOND_USR, 365 TF_PARA_MULTIABI, 366} 367DEFAULT_EXCLUDE_NOT_PARAS = { 368 'not_' + TF_PARA_INSTANT_APP, 369 'not_' + TF_PARA_SECOND_USR, 370 'not_' + TF_PARA_MULTIABI, 371} 372RUNNER_COMMAND_PATH = os.path.join( 373 os.environ.get(ANDROID_BUILD_TOP, os.getcwd()), 374 'tools/asuite/atest/test_data/runner_commands.json', 375) 376 377# Tradefed log saver template for ATest 378ATEST_TF_LOG_SAVER = 'template/log/atest_log_saver' 379DEVICE_SETUP_PREPARER = 'template/preparers/device-preparer' 380LOG_ROOT_OPTION_NAME = 'atest-log-file-path' 381LOG_SAVER_EXT_OPTION = '' 382 383# Tradefed log saver template for uploading logs to cloud storage. 384GOOGLE_LOG_SAVER = '' 385GOOGLE_LOG_SAVER_LOG_ROOT_OPTION_NAME = '' 386GOOGLE_LOG_SAVER_EXT_OPTION = '' 387 388# Log messages here. 389REQUIRE_DEVICES_MSG = ( 390 'Please ensure there is at least one connected device via:\n' 391 ' $ adb devices' 392) 393 394# Default shard num. 395SHARD_NUM = 2 396 397# Smart test selection keyword. 398SMART_TEST_SELECTION = 'smart_test_selection' 399