| OLD | NEW |
| (Empty) |
| 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
| 2 # Use of this source code is governed by a BSD-style license that can be | |
| 3 # found in the LICENSE file. | |
| 4 | |
| 5 """Defines a set of constants shared by test runners and other scripts.""" | |
| 6 # pylint: disable=W0212 | |
| 7 | |
| 8 import collections | |
| 9 import logging | |
| 10 import os | |
| 11 import subprocess | |
| 12 | |
| 13 | |
| 14 DIR_SOURCE_ROOT = os.environ.get('CHECKOUT_SOURCE_ROOT', | |
| 15 os.path.abspath(os.path.join(os.path.dirname(__file__), | |
| 16 os.pardir, os.pardir, os.pardir))) | |
| 17 ISOLATE_DEPS_DIR = os.path.join(DIR_SOURCE_ROOT, 'isolate_deps_dir') | |
| 18 | |
| 19 CHROME_SHELL_HOST_DRIVEN_DIR = os.path.join( | |
| 20 DIR_SOURCE_ROOT, 'chrome', 'android') | |
| 21 | |
| 22 | |
| 23 PackageInfo = collections.namedtuple('PackageInfo', | |
| 24 ['package', 'activity', 'cmdline_file', 'devtools_socket', | |
| 25 'test_package']) | |
| 26 | |
| 27 PACKAGE_INFO = { | |
| 28 'chrome_document': PackageInfo( | |
| 29 'com.google.android.apps.chrome.document', | |
| 30 'com.google.android.apps.chrome.document.ChromeLauncherActivity', | |
| 31 '/data/local/chrome-command-line', | |
| 32 'chrome_devtools_remote', | |
| 33 None), | |
| 34 'chrome': PackageInfo( | |
| 35 'com.google.android.apps.chrome', | |
| 36 'com.google.android.apps.chrome.Main', | |
| 37 '/data/local/chrome-command-line', | |
| 38 'chrome_devtools_remote', | |
| 39 'com.google.android.apps.chrome.tests'), | |
| 40 'chrome_beta': PackageInfo( | |
| 41 'com.chrome.beta', | |
| 42 'com.google.android.apps.chrome.Main', | |
| 43 '/data/local/chrome-command-line', | |
| 44 'chrome_devtools_remote', | |
| 45 None), | |
| 46 'chrome_stable': PackageInfo( | |
| 47 'com.android.chrome', | |
| 48 'com.google.android.apps.chrome.Main', | |
| 49 '/data/local/chrome-command-line', | |
| 50 'chrome_devtools_remote', | |
| 51 None), | |
| 52 'chrome_dev': PackageInfo( | |
| 53 'com.chrome.dev', | |
| 54 'com.google.android.apps.chrome.Main', | |
| 55 '/data/local/chrome-command-line', | |
| 56 'chrome_devtools_remote', | |
| 57 None), | |
| 58 'chrome_canary': PackageInfo( | |
| 59 'com.chrome.canary', | |
| 60 'com.google.android.apps.chrome.Main', | |
| 61 '/data/local/chrome-command-line', | |
| 62 'chrome_devtools_remote', | |
| 63 None), | |
| 64 'chrome_work': PackageInfo( | |
| 65 'com.chrome.work', | |
| 66 'com.google.android.apps.chrome.Main', | |
| 67 '/data/local/chrome-command-line', | |
| 68 'chrome_devtools_remote', | |
| 69 None), | |
| 70 'legacy_browser': PackageInfo( | |
| 71 'com.google.android.browser', | |
| 72 'com.android.browser.BrowserActivity', | |
| 73 None, | |
| 74 None, | |
| 75 None), | |
| 76 'chromecast_shell': PackageInfo( | |
| 77 'com.google.android.apps.mediashell', | |
| 78 'com.google.android.apps.mediashell.MediaShellActivity', | |
| 79 '/data/local/tmp/castshell-command-line', | |
| 80 None, | |
| 81 None), | |
| 82 'content_shell': PackageInfo( | |
| 83 'org.chromium.content_shell_apk', | |
| 84 'org.chromium.content_shell_apk.ContentShellActivity', | |
| 85 '/data/local/tmp/content-shell-command-line', | |
| 86 None, | |
| 87 'org.chromium.content_shell_apk.tests'), | |
| 88 'chrome_shell': PackageInfo( | |
| 89 'org.chromium.chrome.shell', | |
| 90 'org.chromium.chrome.shell.ChromeShellActivity', | |
| 91 '/data/local/tmp/chrome-shell-command-line', | |
| 92 'chrome_shell_devtools_remote', | |
| 93 'org.chromium.chrome.shell.tests'), | |
| 94 'android_webview_shell': PackageInfo( | |
| 95 'org.chromium.android_webview.shell', | |
| 96 'org.chromium.android_webview.shell.AwShellActivity', | |
| 97 '/data/local/tmp/android-webview-command-line', | |
| 98 None, | |
| 99 'org.chromium.android_webview.test'), | |
| 100 'gtest': PackageInfo( | |
| 101 'org.chromium.native_test', | |
| 102 'org.chromium.native_test.ChromeNativeTestActivity', | |
| 103 '/data/local/tmp/chrome-native-tests-command-line', | |
| 104 None, | |
| 105 None), | |
| 106 'content_browsertests': PackageInfo( | |
| 107 'org.chromium.content_browsertests_apk', | |
| 108 'org.chromium.content_browsertests_apk.ContentBrowserTestsActivity', | |
| 109 '/data/local/tmp/content-browser-tests-command-line', | |
| 110 None, | |
| 111 None), | |
| 112 'chromedriver_webview_shell': PackageInfo( | |
| 113 'org.chromium.chromedriver_webview_shell', | |
| 114 'org.chromium.chromedriver_webview_shell.Main', | |
| 115 None, | |
| 116 None, | |
| 117 None), | |
| 118 } | |
| 119 | |
| 120 | |
| 121 # Ports arrangement for various test servers used in Chrome for Android. | |
| 122 # Lighttpd server will attempt to use 9000 as default port, if unavailable it | |
| 123 # will find a free port from 8001 - 8999. | |
| 124 LIGHTTPD_DEFAULT_PORT = 9000 | |
| 125 LIGHTTPD_RANDOM_PORT_FIRST = 8001 | |
| 126 LIGHTTPD_RANDOM_PORT_LAST = 8999 | |
| 127 TEST_SYNC_SERVER_PORT = 9031 | |
| 128 TEST_SEARCH_BY_IMAGE_SERVER_PORT = 9041 | |
| 129 TEST_POLICY_SERVER_PORT = 9051 | |
| 130 | |
| 131 # The net test server is started from port 10201. | |
| 132 # TODO(pliard): http://crbug.com/239014. Remove this dirty workaround once | |
| 133 # http://crbug.com/239014 is fixed properly. | |
| 134 TEST_SERVER_PORT_FIRST = 10201 | |
| 135 TEST_SERVER_PORT_LAST = 30000 | |
| 136 # A file to record next valid port of test server. | |
| 137 TEST_SERVER_PORT_FILE = '/tmp/test_server_port' | |
| 138 TEST_SERVER_PORT_LOCKFILE = '/tmp/test_server_port.lock' | |
| 139 | |
| 140 TEST_EXECUTABLE_DIR = '/data/local/tmp' | |
| 141 # Directories for common java libraries for SDK build. | |
| 142 # These constants are defined in build/android/ant/common.xml | |
| 143 SDK_BUILD_JAVALIB_DIR = 'lib.java' | |
| 144 SDK_BUILD_TEST_JAVALIB_DIR = 'test.lib.java' | |
| 145 SDK_BUILD_APKS_DIR = 'apks' | |
| 146 | |
| 147 ADB_KEYS_FILE = '/data/misc/adb/adb_keys' | |
| 148 | |
| 149 PERF_OUTPUT_DIR = os.path.join(DIR_SOURCE_ROOT, 'out', 'step_results') | |
| 150 # The directory on the device where perf test output gets saved to. | |
| 151 DEVICE_PERF_OUTPUT_DIR = ( | |
| 152 '/data/data/' + PACKAGE_INFO['chrome'].package + '/files') | |
| 153 | |
| 154 SCREENSHOTS_DIR = os.path.join(DIR_SOURCE_ROOT, 'out_screenshots') | |
| 155 | |
| 156 class ANDROID_SDK_VERSION_CODES(object): | |
| 157 """Android SDK version codes. | |
| 158 | |
| 159 http://developer.android.com/reference/android/os/Build.VERSION_CODES.html | |
| 160 """ | |
| 161 | |
| 162 ICE_CREAM_SANDWICH = 14 | |
| 163 ICE_CREAM_SANDWICH_MR1 = 15 | |
| 164 JELLY_BEAN = 16 | |
| 165 JELLY_BEAN_MR1 = 17 | |
| 166 JELLY_BEAN_MR2 = 18 | |
| 167 KITKAT = 19 | |
| 168 KITKAT_WATCH = 20 | |
| 169 LOLLIPOP = 21 | |
| 170 LOLLIPOP_MR1 = 22 | |
| 171 | |
| 172 ANDROID_SDK_VERSION = ANDROID_SDK_VERSION_CODES.LOLLIPOP_MR1 | |
| 173 ANDROID_SDK_BUILD_TOOLS_VERSION = '22.0.0' | |
| 174 ANDROID_SDK_ROOT = os.path.join(DIR_SOURCE_ROOT, | |
| 175 'third_party/android_tools/sdk') | |
| 176 ANDROID_SDK_TOOLS = os.path.join(ANDROID_SDK_ROOT, | |
| 177 'build-tools', ANDROID_SDK_BUILD_TOOLS_VERSION) | |
| 178 ANDROID_NDK_ROOT = os.path.join(DIR_SOURCE_ROOT, | |
| 179 'third_party/android_tools/ndk') | |
| 180 | |
| 181 EMULATOR_SDK_ROOT = os.environ.get('ANDROID_EMULATOR_SDK_ROOT', | |
| 182 os.path.join(DIR_SOURCE_ROOT, | |
| 183 'android_emulator_sdk')) | |
| 184 | |
| 185 BAD_DEVICES_JSON = os.path.join(DIR_SOURCE_ROOT, | |
| 186 os.environ.get('CHROMIUM_OUT_DIR', 'out'), | |
| 187 'bad_devices.json') | |
| 188 | |
| 189 UPSTREAM_FLAKINESS_SERVER = 'test-results.appspot.com' | |
| 190 | |
| 191 DEVICE_LOCAL_PROPERTIES_PATH = '/data/local.prop' | |
| 192 | |
| 193 PYTHON_UNIT_TEST_SUITES = { | |
| 194 'pylib_py_unittests': { | |
| 195 'path': os.path.join(DIR_SOURCE_ROOT, 'build', 'android'), | |
| 196 'test_modules': [ | |
| 197 'pylib.cmd_helper_test', | |
| 198 'pylib.device.device_utils_test', | |
| 199 'pylib.results.json_results_test', | |
| 200 'pylib.utils.md5sum_test', | |
| 201 ] | |
| 202 }, | |
| 203 'gyp_py_unittests': { | |
| 204 'path': os.path.join(DIR_SOURCE_ROOT, 'build', 'android', 'gyp'), | |
| 205 'test_modules': [ | |
| 206 'java_cpp_enum_tests', | |
| 207 ] | |
| 208 }, | |
| 209 } | |
| 210 | |
| 211 LOCAL_MACHINE_TESTS = ['junit', 'python'] | |
| 212 VALID_ENVIRONMENTS = ['local', 'remote_device'] | |
| 213 VALID_TEST_TYPES = ['gtest', 'instrumentation', 'junit', 'linker', 'monkey', | |
| 214 'perf', 'python', 'uiautomator', 'uirobot'] | |
| 215 VALID_DEVICE_TYPES = ['Android', 'iOS'] | |
| 216 | |
| 217 | |
| 218 def GetBuildType(): | |
| 219 try: | |
| 220 return os.environ['BUILDTYPE'] | |
| 221 except KeyError: | |
| 222 raise Exception('The BUILDTYPE environment variable has not been set') | |
| 223 | |
| 224 | |
| 225 def SetBuildType(build_type): | |
| 226 os.environ['BUILDTYPE'] = build_type | |
| 227 | |
| 228 | |
| 229 def SetBuildDirectory(build_directory): | |
| 230 os.environ['CHROMIUM_OUT_DIR'] = build_directory | |
| 231 | |
| 232 | |
| 233 def SetOutputDirectort(output_directory): | |
| 234 os.environ['CHROMIUM_OUTPUT_DIR'] = output_directory | |
| 235 | |
| 236 | |
| 237 def GetOutDirectory(build_type=None): | |
| 238 """Returns the out directory where the output binaries are built. | |
| 239 | |
| 240 Args: | |
| 241 build_type: Build type, generally 'Debug' or 'Release'. Defaults to the | |
| 242 globally set build type environment variable BUILDTYPE. | |
| 243 """ | |
| 244 if 'CHROMIUM_OUTPUT_DIR' in os.environ: | |
| 245 return os.path.abspath(os.path.join( | |
| 246 DIR_SOURCE_ROOT, os.environ.get('CHROMIUM_OUTPUT_DIR'))) | |
| 247 | |
| 248 return os.path.abspath(os.path.join( | |
| 249 DIR_SOURCE_ROOT, os.environ.get('CHROMIUM_OUT_DIR', 'out'), | |
| 250 GetBuildType() if build_type is None else build_type)) | |
| 251 | |
| 252 | |
| 253 def _Memoize(func): | |
| 254 def Wrapper(): | |
| 255 try: | |
| 256 return func._result | |
| 257 except AttributeError: | |
| 258 func._result = func() | |
| 259 return func._result | |
| 260 return Wrapper | |
| 261 | |
| 262 | |
| 263 def SetAdbPath(adb_path): | |
| 264 os.environ['ADB_PATH'] = adb_path | |
| 265 | |
| 266 | |
| 267 def GetAdbPath(): | |
| 268 # Check if a custom adb path as been set. If not, try to find adb | |
| 269 # on the system. | |
| 270 if os.environ.get('ADB_PATH'): | |
| 271 return os.environ.get('ADB_PATH') | |
| 272 else: | |
| 273 return _FindAdbPath() | |
| 274 | |
| 275 | |
| 276 @_Memoize | |
| 277 def _FindAdbPath(): | |
| 278 if os.environ.get('ANDROID_SDK_ROOT'): | |
| 279 return 'adb' | |
| 280 # If envsetup.sh hasn't been sourced and there's no adb in the path, | |
| 281 # set it here. | |
| 282 try: | |
| 283 with file(os.devnull, 'w') as devnull: | |
| 284 subprocess.call(['adb', 'version'], stdout=devnull, stderr=devnull) | |
| 285 return 'adb' | |
| 286 except OSError: | |
| 287 logging.debug('No adb found in $PATH, fallback to checked in binary.') | |
| 288 return os.path.join(ANDROID_SDK_ROOT, 'platform-tools', 'adb') | |
| 289 | |
| 290 # Exit codes | |
| 291 ERROR_EXIT_CODE = 1 | |
| 292 INFRA_EXIT_CODE = 87 | |
| 293 WARNING_EXIT_CODE = 88 | |
| OLD | NEW |