OLD | NEW |
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 """Test fixture for tests involving installing/updating Chrome. | 5 """Test fixture for tests involving installing/updating Chrome. |
6 | 6 |
7 Provides an interface to install or update chrome from within a testcase, and | 7 Provides an interface to install or update chrome from within a testcase, and |
8 allows users to run tests using installed version of Chrome. User and system | 8 allows users to run tests using installed version of Chrome. User and system |
9 level installations are supported, and either one can be used for running the | 9 level installations are supported, and either one can be used for running the |
10 tests. Currently the only platform it supports is Windows. | 10 tests. Currently the only platform it supports is Windows. |
11 """ | 11 """ |
12 | 12 |
13 import atexit | 13 import atexit |
14 import logging | |
15 import optparse | |
16 import os | 14 import os |
17 import platform | 15 import platform |
18 import re | |
19 import shutil | |
20 import stat | 16 import stat |
21 import sys | 17 import sys |
22 import tempfile | 18 import tempfile |
23 import unittest | 19 import unittest |
24 import urllib | 20 import urllib |
25 | 21 |
26 import chrome_installer_win | 22 import chrome_installer_win |
27 | 23 |
28 _DIRECTORY = os.path.dirname(os.path.abspath(__file__)) | 24 _DIRECTORY = os.path.dirname(os.path.abspath(__file__)) |
29 sys.path.append(os.path.join(os.path.dirname(_DIRECTORY), 'pyautolib')) | 25 sys.path.append(os.path.join(os.path.dirname(_DIRECTORY), 'pyautolib')) |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
215 builds = list(frozenset(builds)) | 211 builds = list(frozenset(builds)) |
216 for build in builds: | 212 for build in builds: |
217 url = '%s%s/%s/mini_installer.exe' % (base_url, build, system) | 213 url = '%s%s/%s/mini_installer.exe' % (base_url, build, system) |
218 installer_path = os.path.join(tempdir, 'mini_installer_%s.exe' % build) | 214 installer_path = os.path.join(tempdir, 'mini_installer_%s.exe' % build) |
219 InstallTest._installer_paths[build] = installer_path | 215 InstallTest._installer_paths[build] = installer_path |
220 InstallTest._Download(url, installer_path) | 216 InstallTest._Download(url, installer_path) |
221 InstallTest._chrome_driver = os.path.join(tempdir, 'chromedriver.exe') | 217 InstallTest._chrome_driver = os.path.join(tempdir, 'chromedriver.exe') |
222 url = '%s%s/%s/%s/chromedriver.exe' % (base_url, build, system, | 218 url = '%s%s/%s/%s/chromedriver.exe' % (base_url, build, system, |
223 'chrome-win32.test') | 219 'chrome-win32.test') |
224 InstallTest._Download(url, InstallTest._chrome_driver) | 220 InstallTest._Download(url, InstallTest._chrome_driver) |
225 | |
226 | |
227 class Main(object): | |
228 """Main program for running Updater tests.""" | |
229 | |
230 def __init__(self): | |
231 self._SetLoggingConfiguration() | |
232 self._ParseArgs() | |
233 self._Run() | |
234 | |
235 def _ParseArgs(self): | |
236 """Parses command line arguments.""" | |
237 parser = optparse.OptionParser() | |
238 parser.add_option( | |
239 '-u', '--url', type='string', default='', dest='url', | |
240 help='Specifies the build url, without the build number.') | |
241 parser.add_option( | |
242 '-o', '--options', type='string', default='', | |
243 help='Specifies any additional Chrome options (i.e. --system-level).') | |
244 parser.add_option( | |
245 '--install-build', type='string', default='', dest='install_build', | |
246 help='Specifies the build to be used for fresh install testing.') | |
247 parser.add_option( | |
248 '--update-builds', type='string', default='', dest='update_builds', | |
249 help='Specifies the builds to be used for updater testing.') | |
250 parser.add_option( | |
251 '--install-type', type='string', default='user', dest='install_type', | |
252 help='Type of installation (i.e., user, system, or both)') | |
253 self._opts, self._args = parser.parse_args() | |
254 self._ValidateArgs() | |
255 if(self._opts.install_type == 'system' or | |
256 self._opts.install_type == 'user'): | |
257 install_type = ({ | |
258 'system' : chrome_installer_win.InstallationType.SYSTEM, | |
259 'user' : chrome_installer_win.InstallationType.USER}).get( | |
260 self._opts.install_type) | |
261 InstallTest.SetInstallType(install_type) | |
262 update_builds = (self._opts.update_builds.split(',') if | |
263 self._opts.update_builds else []) | |
264 options = self._opts.options.split(',') if self._opts.options else [] | |
265 InstallTest.InitTestFixture(self._opts.install_build, | |
266 update_builds, | |
267 self._opts.url, | |
268 options) | |
269 | |
270 def _ValidateArgs(self): | |
271 """Verifies the sanity of the command arguments. | |
272 | |
273 Confirms that all specified builds have a valid version number, and the | |
274 build urls are valid. | |
275 """ | |
276 builds = [] | |
277 if self._opts.install_build: | |
278 builds.append(self._opts.install_build) | |
279 if self._opts.update_builds: | |
280 builds.extend(self._opts.update_builds.split(',')) | |
281 builds = list(frozenset(builds)) | |
282 for build in builds: | |
283 if not re.match('\d+\.\d+\.\d+\.\d+', build): | |
284 raise RuntimeError('Invalid build number: %s' % build) | |
285 if not pyauto_utils.DoesUrlExist('%s/%s/' % (self._opts.url, build)): | |
286 raise RuntimeError('Could not locate build no. %s' % build) | |
287 | |
288 def _SetLoggingConfiguration(self): | |
289 """Sets the basic logging configuration.""" | |
290 log_format = '%(asctime)s %(levelname)-8s %(message)s' | |
291 logging.basicConfig(level=logging.INFO, format=log_format) | |
292 | |
293 def _GetTests(self): | |
294 """Returns a list of unittests from the calling script.""" | |
295 mod_name = [os.path.splitext(os.path.basename(sys.argv[0]))[0]] | |
296 if os.path.dirname(sys.argv[0]) not in sys.path: | |
297 sys.path.append(os.path.dirname(sys.argv[0])) | |
298 return unittest.defaultTestLoader.loadTestsFromNames(mod_name) | |
299 | |
300 def _Run(self): | |
301 """Runs the unit tests.""" | |
302 tests = self._GetTests() | |
303 result = pyauto_utils.GTestTextTestRunner(verbosity=1).run(tests) | |
304 del(tests) | |
305 if not result.wasSuccessful(): | |
306 print >>sys.stderr, ('Not all tests were successful.') | |
307 sys.exit(1) | |
308 sys.exit(0) | |
OLD | NEW |