Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(31)

Unified Diff: tools/get_drt.py

Issue 10828077: Rerun each CL 10 times to smooth out noise in perf testing. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tools/get_drt.py
===================================================================
--- tools/get_drt.py (revision 10085)
+++ tools/get_drt.py (working copy)
@@ -1,216 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-# Gets or updates a DumpRenderTree (a nearly headless build of chrome). This is
-# used for running browser tests of client applications.
-
-import optparse
-import os
-import platform
-import shutil
-import subprocess
-import sys
-import tempfile
-import zipfile
-
-def NormJoin(path1, path2):
- return os.path.normpath(os.path.join(path1, path2))
-
-# Change into the dart directory as we want the project to be rooted here.
-dart_src = NormJoin(os.path.dirname(sys.argv[0]), os.pardir)
-os.chdir(dart_src)
-
-GSUTIL_DIR = os.path.join('third_party', 'gsutil')
-GSUTIL = GSUTIL_DIR + '/gsutil'
-
-DRT_DIR = os.path.join('client', 'tests', 'drt')
-DRT_VERSION = os.path.join(DRT_DIR, 'LAST_VERSION')
-DRT_LATEST_PATTERN = (
- 'gs://dartium-archive/latest/drt-%(osname)s-inc-*.zip')
-DRT_PERMANENT_PREFIX = 'gs://dartium-archive/drt-%(osname)s-inc'
-
-DARTIUM_DIR = os.path.join('client', 'tests', 'dartium')
-DARTIUM_VERSION = os.path.join(DARTIUM_DIR, 'LAST_VERSION')
-DARTIUM_LATEST_PATTERN = (
- 'gs://dartium-archive/latest/dartium-%(osname)s-inc-*.zip')
-DARTIUM_PERMANENT_PREFIX = 'gs://dartium-archive/dartium-%(osname)s-inc'
-
-CHROMEDRIVER_DIR = os.path.join('tools', 'testing', 'dartium-chromedriver')
-CHROMEDRIVER_VERSION = os.path.join(CHROMEDRIVER_DIR, 'LAST_VERSION')
-CHROMEDRIVER_LATEST_PATTERN = (
- 'gs://dartium-archive/latest/chromedriver-%(osname)s-inc-*.zip')
-CHROMEDRIVER_PERMANENT_PREFIX = (
- 'gs://dartium-archive/chromedriver-%(osname)s-inc')
-
-sys.path.append(os.path.join(GSUTIL_DIR, 'boto'))
-import boto
-
-
-def execute_command(*cmd):
- """Execute a command in a subprocess."""
- pipe = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- output, error = pipe.communicate()
- return pipe.returncode, output
-
-
-def execute_command_visible(*cmd):
- """Execute a command in a subprocess, but show stdout/stderr."""
- result = subprocess.call(cmd, stdout=sys.stdout, stderr=sys.stderr,
- stdin=sys.stdin)
- if result != 0:
- raise Exception('Execution of "%s" failed' % ' '.join(cmd))
-
-
-def gsutil(*cmd):
- return execute_command('python', GSUTIL, *cmd)
-
-
-def gsutil_visible(*cmd):
- execute_command_visible('python', GSUTIL, *cmd)
-
-
-def has_boto_config():
- """Returns true if boto config exists."""
-
- config_paths = boto.pyami.config.BotoConfigLocations
- if 'AWS_CREDENTIAL_FILE' in os.environ:
- config_paths.append(os.environ['AWS_CREDENTIAL_FILE'])
- for config_path in config_paths:
- if os.path.exists(config_path):
- return True
-
- return False
-
-
-def in_runhooks():
- '''True if this script was called by "gclient runhooks" or "gclient sync"'''
- return 'runhooks' in sys.argv
-
-
-def ensure_config():
- # If ~/.boto doesn't exist, tell the user to run "gsutil config"
- if not has_boto_config():
- print >>sys.stderr, '''
-*******************************************************************************
-* WARNING: Can't download DumpRenderTree! This is required to test client apps.
-* You need to do a one-time configuration step to access Google Storage.
-* Please run this command and follow the instructions:
-* %s config
-*
-* NOTE: When prompted you can leave "project-id" blank. Just hit enter.
-*******************************************************************************
-''' % GSUTIL
- sys.exit(1)
-
-
-def get_latest(name, directory, version_file, latest_pattern, permanent_prefix):
- """Get the latest DumpRenderTree or Dartium binary depending on arguments.
-
- Args:
- directory: target directory (recreated) to install binary
- version_file: name of file with the current version stamp
- latest_pattern: the google store url pattern pointing to the latest binary
- permanent_prefix: stable google store folder used to download versions
- """
- system = platform.system()
- if system == 'Darwin':
- osname = 'mac'
- elif system == 'Linux':
- osname = 'lucid64'
- elif system == 'Windows':
- osname = 'win'
- else:
- print >>sys.stderr, ('WARNING: platform "%s" does not support'
- '%s for tests') % (system, name)
- return 0
-
- ensure_config()
-
- # Query for the lastest version
- pattern = latest_pattern % { 'osname' : osname }
- result, out = gsutil('ls', pattern)
- if result == 0:
- latest = out.split()[-1]
- # use permanent link instead, just in case the latest zip entry gets deleted
- # while we are downloading it.
- latest = (permanent_prefix % { 'osname' : osname }
- + latest[latest.rindex('/'):])
- else: # e.g. no access
- print "Couldn't download %s: %s\n%s" % (name, pattern, out)
- if not os.path.exists(version_file):
- print "Tests using %s will not work. Please try again later." % name
- return 0
-
- # Check if we need to update the file
- if os.path.exists(version_file):
- v = open(version_file, 'r').read()
- if v == latest:
- if not in_runhooks():
- print name + ' is up to date.\nVersion: ' + latest
- return 0 # up to date
-
- if os.path.exists(directory):
- print 'Removing old %s tree %s' % (name, directory)
- shutil.rmtree(directory)
-
- # download the zip file to a temporary path, and unzip to the target location
- temp_dir = tempfile.mkdtemp()
- try:
- temp_zip = os.path.join(temp_dir, 'drt.zip')
- temp_zip_url = 'file://' + temp_zip
- # It's nice to show download progress
- gsutil_visible('cp', latest, temp_zip_url)
-
- if platform.system() != 'Windows':
- # The Python zip utility does not preserve executable permissions, but
- # this does not seem to be a problem for Windows, which does not have a
- # built in zip utility. :-/
- result, out = execute_command('unzip', temp_zip, '-d', temp_dir)
- if result != 0:
- raise Exception('Execution of "unzip %s -d %s" failed: %s' %
- (temp_zip, temp_dir, str(out)))
- unzipped_dir = temp_dir + '/' + os.path.basename(latest)[:-4] #Remove .zip
- else:
- z = zipfile.ZipFile(temp_zip)
- z.extractall(temp_dir)
- # -4 = remove .zip for dir name
- unzipped_dir = os.path.join(temp_dir, os.path.basename(latest)[:-4])
- z.close()
- shutil.move(unzipped_dir, directory)
- finally:
- shutil.rmtree(temp_dir)
-
- # create the version stamp
- v = open(version_file, 'w')
- v.write(latest)
- v.close()
-
- print 'Successfully downloaded to %s' % directory
- return 0
-
-
-def main():
- parser = optparse.OptionParser()
- parser.add_option('--dartium', dest='dartium',
- help='Get latest Dartium', action='store_true',
- default=False)
- parser.add_option('--chromedriver', dest='chromedriver',
- help='Get the latest built ChromeDriver',
- action='store_true', default=False)
- args, _ = parser.parse_args()
-
- if args.dartium:
- get_latest('Dartium', DARTIUM_DIR, DARTIUM_VERSION,
- DARTIUM_LATEST_PATTERN, DARTIUM_PERMANENT_PREFIX)
- elif args.chromedriver:
- get_latest('chromedriver', CHROMEDRIVER_DIR, CHROMEDRIVER_VERSION,
- CHROMEDRIVER_LATEST_PATTERN, CHROMEDRIVER_PERMANENT_PREFIX)
- else:
- get_latest('DumpRenderTree', DRT_DIR, DRT_VERSION,
- DRT_LATEST_PATTERN, DRT_PERMANENT_PREFIX)
-
-if __name__ == '__main__':
- sys.exit(main())

Powered by Google App Engine
This is Rietveld 408576698