2 # Copyright 2013 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
6 """Runs all ChromeDriver end to end tests."""
14 _THIS_DIR = os.path.abspath(os.path.dirname(__file__))
15 sys.path.insert(0, os.path.join(_THIS_DIR, os.pardir))
21 sys.path.insert(0, os.path.join(chrome_paths.GetSrc(), 'build', 'android'))
22 from pylib import constants
25 def _AppendEnvironmentPath(env_name, path):
26 if env_name in os.environ:
27 lib_path = os.environ[env_name]
28 if path not in lib_path:
29 os.environ[env_name] += os.pathsep + path
31 os.environ[env_name] = path
34 def _AddToolsToSystemPathForWindows():
35 path_cfg_file = 'C:\\tools\\bots_path.cfg'
36 if not os.path.exists(path_cfg_file):
37 print 'Failed to find file', path_cfg_file
38 with open(path_cfg_file, 'r') as cfg:
39 paths = cfg.read().split('\n')
40 os.environ['PATH'] = os.pathsep.join(paths) + os.pathsep + os.environ['PATH']
43 def _GenerateTestCommand(script,
45 ref_chromedriver=None,
50 _, log_path = tempfile.mkstemp(prefix='chromedriver_')
51 print 'chromedriver server log: %s' % log_path
54 os.path.join(_THIS_DIR, script),
55 '--chromedriver=%s' % chromedriver,
56 '--log-path=%s' % log_path,
59 cmd.append('--reference-chromedriver=' + ref_chromedriver)
62 cmd.append('--chrome=' + chrome)
65 cmd.append('--chrome-version=' + chrome_version)
68 cmd.append('--verbose')
71 cmd = ['xvfb-run', '-a'] + cmd
72 cmd.append('--android-package=' + android_package)
76 def RunPythonTests(chromedriver, ref_chromedriver,
77 chrome=None, chrome_version=None,
78 chrome_version_name=None, android_package=None):
80 if chrome_version_name:
81 version_info = '(%s)' % chrome_version_name
82 util.MarkBuildStepStart('python_tests%s' % version_info)
83 code = util.RunCommand(
84 _GenerateTestCommand('run_py_tests.py',
86 ref_chromedriver=ref_chromedriver,
88 chrome_version=chrome_version,
89 android_package=android_package))
91 util.MarkBuildStepError()
95 def RunJavaTests(chromedriver, chrome=None, chrome_version=None,
96 chrome_version_name=None, android_package=None,
99 if chrome_version_name:
100 version_info = '(%s)' % chrome_version_name
101 util.MarkBuildStepStart('java_tests%s' % version_info)
102 code = util.RunCommand(
103 _GenerateTestCommand('run_java_tests.py',
105 ref_chromedriver=None,
107 chrome_version=chrome_version,
108 android_package=android_package,
111 util.MarkBuildStepError()
115 def RunCppTests(cpp_tests):
116 util.MarkBuildStepStart('chromedriver_tests')
117 code = util.RunCommand([cpp_tests])
119 util.MarkBuildStepError()
123 def DownloadChrome(version_name, revision, download_site):
124 util.MarkBuildStepStart('download %s' % version_name)
125 return archive.DownloadChrome(revision, util.MakeTempDir(), download_site)
129 parser = optparse.OptionParser()
131 '', '--android-packages',
132 help='Comma separated list of application package names, '
133 'if running tests on Android.')
134 # Option 'chrome-version' is for desktop only.
136 '', '--chrome-version',
137 help='Version of chrome, e.g., \'HEAD\', \'27\', or \'26\'.'
138 'Default is to run tests against all of these versions.'
139 'Notice: this option only applies to desktop.')
140 options, _ = parser.parse_args()
145 cpp_tests_name = 'chromedriver_tests' + exe_postfix
146 server_name = 'chromedriver' + exe_postfix
148 required_build_outputs = [server_name]
149 if not options.android_packages:
150 required_build_outputs += [cpp_tests_name]
151 build_dir = chrome_paths.GetBuildDir(required_build_outputs)
152 constants.SetBuildType(os.path.basename(build_dir))
153 print 'Using build outputs from', build_dir
155 chromedriver = os.path.join(build_dir, server_name)
156 platform_name = util.GetPlatformName()
157 if util.IsLinux() and platform.architecture()[0] == '64bit':
158 platform_name += '64'
159 ref_chromedriver = os.path.join(
160 chrome_paths.GetSrc(),
161 'chrome', 'test', 'chromedriver', 'third_party', 'java_tests',
163 'chromedriver_%s%s' % (platform_name, exe_postfix))
166 # Set LD_LIBRARY_PATH to enable successful loading of shared object files,
167 # when chromedriver2.so is not a static build.
168 _AppendEnvironmentPath('LD_LIBRARY_PATH', os.path.join(build_dir, 'lib'))
169 elif util.IsWindows():
170 # For Windows bots: add ant, java(jre) and the like to system path.
171 _AddToolsToSystemPathForWindows()
173 if options.android_packages:
174 os.environ['PATH'] += os.pathsep + os.path.join(
175 _THIS_DIR, os.pardir, 'chrome')
177 for package in options.android_packages.split(','):
178 code1 = RunPythonTests(chromedriver,
180 chrome_version_name=package,
181 android_package=package)
182 code2 = RunJavaTests(chromedriver,
183 chrome_version_name=package,
184 android_package=package,
186 code = code or code1 or code2
189 latest_snapshot_revision = archive.GetLatestRevision(archive.Site.SNAPSHOT)
191 ['HEAD', latest_snapshot_revision],
192 ['31', archive.CHROME_31_REVISION],
193 ['30', archive.CHROME_30_REVISION],
194 ['29', archive.CHROME_29_REVISION]
197 for version in versions:
198 if options.chrome_version and version[0] != options.chrome_version:
200 download_site = archive.Site.CONTINUOUS
201 version_name = version[0]
202 if version_name == 'HEAD':
203 version_name = version[1]
204 download_site = archive.Site.SNAPSHOT
205 chrome_path = DownloadChrome(version_name, version[1], download_site)
206 code1 = RunPythonTests(chromedriver,
209 chrome_version=version[0],
210 chrome_version_name='v%s' % version_name)
211 code2 = RunJavaTests(chromedriver, chrome=chrome_path,
212 chrome_version=version[0],
213 chrome_version_name='v%s' % version_name)
214 code = code or code1 or code2
215 cpp_tests = os.path.join(build_dir, cpp_tests_name)
216 return RunCppTests(cpp_tests) or code
219 if __name__ == '__main__':