Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / build / android / pylib / constants.py
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.google.android.apps.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     'legacy_browser': PackageInfo(
65         'com.google.android.browser',
66         'com.android.browser.BrowserActivity',
67         None,
68         None,
69         None),
70     'chromecast_shell': PackageInfo(
71         'com.google.android.apps.mediashell',
72         'com.google.android.apps.mediashell.MediaShellActivity',
73         '/data/local/tmp/castshell-command-line',
74         None,
75         None),
76     'content_shell': PackageInfo(
77         'org.chromium.content_shell_apk',
78         'org.chromium.content_shell_apk.ContentShellActivity',
79         '/data/local/tmp/content-shell-command-line',
80         None,
81         'org.chromium.content_shell_apk.tests'),
82     'chrome_shell': PackageInfo(
83         'org.chromium.chrome.shell',
84         'org.chromium.chrome.shell.ChromeShellActivity',
85         '/data/local/tmp/chrome-shell-command-line',
86         'chrome_shell_devtools_remote',
87         'org.chromium.chrome.shell.tests'),
88     'android_webview_shell': PackageInfo(
89         'org.chromium.android_webview.shell',
90         'org.chromium.android_webview.shell.AwShellActivity',
91         None,
92         None,
93         'org.chromium.android_webview.test'),
94     'gtest': PackageInfo(
95         'org.chromium.native_test',
96         'org.chromium.native_test.ChromeNativeTestActivity',
97         '/data/local/tmp/chrome-native-tests-command-line',
98         None,
99         None),
100     'content_browsertests': PackageInfo(
101         'org.chromium.content_browsertests_apk',
102         'org.chromium.content_browsertests_apk.ContentBrowserTestsActivity',
103         '/data/local/tmp/content-browser-tests-command-line',
104         None,
105         None),
106     'chromedriver_webview_shell': PackageInfo(
107         'org.chromium.chromedriver_webview_shell',
108         'org.chromium.chromedriver_webview_shell.Main',
109         None,
110         None,
111         None),
112 }
113
114
115 # Ports arrangement for various test servers used in Chrome for Android.
116 # Lighttpd server will attempt to use 9000 as default port, if unavailable it
117 # will find a free port from 8001 - 8999.
118 LIGHTTPD_DEFAULT_PORT = 9000
119 LIGHTTPD_RANDOM_PORT_FIRST = 8001
120 LIGHTTPD_RANDOM_PORT_LAST = 8999
121 TEST_SYNC_SERVER_PORT = 9031
122 TEST_SEARCH_BY_IMAGE_SERVER_PORT = 9041
123
124 # The net test server is started from port 10201.
125 # TODO(pliard): http://crbug.com/239014. Remove this dirty workaround once
126 # http://crbug.com/239014 is fixed properly.
127 TEST_SERVER_PORT_FIRST = 10201
128 TEST_SERVER_PORT_LAST = 30000
129 # A file to record next valid port of test server.
130 TEST_SERVER_PORT_FILE = '/tmp/test_server_port'
131 TEST_SERVER_PORT_LOCKFILE = '/tmp/test_server_port.lock'
132
133 TEST_EXECUTABLE_DIR = '/data/local/tmp'
134 # Directories for common java libraries for SDK build.
135 # These constants are defined in build/android/ant/common.xml
136 SDK_BUILD_JAVALIB_DIR = 'lib.java'
137 SDK_BUILD_TEST_JAVALIB_DIR = 'test.lib.java'
138 SDK_BUILD_APKS_DIR = 'apks'
139
140 ADB_KEYS_FILE = '/data/misc/adb/adb_keys'
141
142 PERF_OUTPUT_DIR = os.path.join(DIR_SOURCE_ROOT, 'out', 'step_results')
143 # The directory on the device where perf test output gets saved to.
144 DEVICE_PERF_OUTPUT_DIR = (
145     '/data/data/' + PACKAGE_INFO['chrome'].package + '/files')
146
147 SCREENSHOTS_DIR = os.path.join(DIR_SOURCE_ROOT, 'out_screenshots')
148
149 class ANDROID_SDK_VERSION_CODES(object):
150   """Android SDK version codes.
151
152   http://developer.android.com/reference/android/os/Build.VERSION_CODES.html
153   """
154
155   ICE_CREAM_SANDWICH = 14
156   ICE_CREAM_SANDWICH_MR1 = 15
157   JELLY_BEAN = 16
158   JELLY_BEAN_MR1 = 17
159   JELLY_BEAN_MR2 = 18
160   KITKAT = 19
161   KITKAT_WATCH = 20
162   LOLLIPOP = 21
163
164 ANDROID_SDK_VERSION = ANDROID_SDK_VERSION_CODES.LOLLIPOP
165 ANDROID_SDK_BUILD_TOOLS_VERSION = '21.0.1'
166 ANDROID_SDK_ROOT = os.path.join(DIR_SOURCE_ROOT,
167                                 'third_party/android_tools/sdk')
168 ANDROID_SDK_TOOLS = os.path.join(ANDROID_SDK_ROOT,
169                                  'build-tools', ANDROID_SDK_BUILD_TOOLS_VERSION)
170 ANDROID_NDK_ROOT = os.path.join(DIR_SOURCE_ROOT,
171                                 'third_party/android_tools/ndk')
172
173 EMULATOR_SDK_ROOT = os.environ.get('ANDROID_EMULATOR_SDK_ROOT',
174                                    os.path.join(DIR_SOURCE_ROOT,
175                                                 'android_emulator_sdk'))
176
177 BAD_DEVICES_JSON = os.path.join(DIR_SOURCE_ROOT,
178                                 os.environ.get('CHROMIUM_OUT_DIR', 'out'),
179                                 'bad_devices.json')
180
181 UPSTREAM_FLAKINESS_SERVER = 'test-results.appspot.com'
182
183 DEVICE_LOCAL_PROPERTIES_PATH = '/data/local.prop'
184
185 PYTHON_UNIT_TEST_SUITES = {
186   'pylib_py_unittests': {
187     'path': os.path.join(DIR_SOURCE_ROOT, 'build', 'android'),
188     'test_modules': [
189       'pylib.device.device_utils_test',
190     ]
191   },
192   'gyp_py_unittests': {
193     'path': os.path.join(DIR_SOURCE_ROOT, 'build', 'android', 'gyp'),
194     'test_modules': [
195       'java_cpp_enum_tests',
196     ]
197   },
198 }
199
200 LOCAL_MACHINE_TESTS = ['junit', 'python']
201 VALID_ENVIRONMENTS = ['local']
202
203
204 def GetBuildType():
205   try:
206     return os.environ['BUILDTYPE']
207   except KeyError:
208     raise Exception('The BUILDTYPE environment variable has not been set')
209
210
211 def SetBuildType(build_type):
212   os.environ['BUILDTYPE'] = build_type
213
214
215 def SetBuildDirectory(build_directory):
216   os.environ['CHROMIUM_OUT_DIR'] = build_directory
217
218
219 def GetOutDirectory(build_type=None):
220   """Returns the out directory where the output binaries are built.
221
222   Args:
223     build_type: Build type, generally 'Debug' or 'Release'. Defaults to the
224       globally set build type environment variable BUILDTYPE.
225   """
226   return os.path.abspath(os.path.join(
227       DIR_SOURCE_ROOT, os.environ.get('CHROMIUM_OUT_DIR', 'out'),
228       GetBuildType() if build_type is None else build_type))
229
230
231 def _Memoize(func):
232   def Wrapper():
233     try:
234       return func._result
235     except AttributeError:
236       func._result = func()
237       return func._result
238   return Wrapper
239
240
241 @_Memoize
242 def GetAdbPath():
243   if os.environ.get('ANDROID_SDK_ROOT'):
244     return 'adb'
245   # If envsetup.sh hasn't been sourced and there's no adb in the path,
246   # set it here.
247   try:
248     with file(os.devnull, 'w') as devnull:
249       subprocess.call(['adb', 'version'], stdout=devnull, stderr=devnull)
250     return 'adb'
251   except OSError:
252     logging.debug('No adb found in $PATH, fallback to checked in binary.')
253     return os.path.join(ANDROID_SDK_ROOT, 'platform-tools', 'adb')
254
255
256 # Exit codes
257 ERROR_EXIT_CODE = 1
258 WARNING_EXIT_CODE = 88