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

Unified Diff: tools/testing/webdriver_test_setup.py

Issue 33003002: Updated webdriver setup script to use new location for downloads. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 2 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/testing/webdriver_test_setup.py
diff --git a/tools/testing/webdriver_test_setup.py b/tools/testing/webdriver_test_setup.py
index 7988bab5a591124c75b8777d0f7bb54fd9d2cd3b..33a76c21d2773736dc188b709c95b60f7b6c3385 100755
--- a/tools/testing/webdriver_test_setup.py
+++ b/tools/testing/webdriver_test_setup.py
@@ -80,32 +80,98 @@ def find_depot_tools_location(is_buildbot):
return loc
raise Exception("Could not find depot_tools in your path.")
+class GoogleBasedInstaller(object):
+ """Install a project from a Google source, pulling latest version."""
-class GoogleCodeInstaller(object):
- """Install code that is being hosted on Google Code."""
-
- def __init__(self, project_name, download_location, download_name_func):
- """ Create a object that will install code from a Google Code site.
+ def __init__(self, project_name, destination, download_path_func):
+ """Create an object that will install the project.
Arguments:
- project_name - The GoogleCode project name such as "selenium" or
+ project_name - Google code name of the project, such as "selenium" or
"chromedriver."
- download_location - Where to download the desired file on our filesystem.
- download_name_func - A function that takes a dictionary (currently with keys
+ destination - Where to download the desired file on our filesystem.
+ download_path_func - A function that takes a dictionary (currently with keys
"os" and "version", but more can be added) that calculates the string
- representing the name of the download we want.
- """
+ representing the path of the download we want.
+ """
self.project_name = project_name
- self.download_location = download_location
- self.download_name_func = download_name_func
- self.download_regex_str = self.download_name_func({'os': self.get_os_str,
- 'version': '.+'})
+ self.destination = destination
+ self.download_path_func = download_path_func
+
+ @property
+ def get_os_str(self):
+ """The strings to indicate what OS a download is for."""
+ os_str = 'win'
+ if 'darwin' in sys.platform:
+ os_str = 'mac'
+ elif 'linux' in sys.platform:
+ os_str = 'linux32'
+ if '64bit' in platform.architecture()[0]:
+ os_str = 'linux64'
+ if self.project_name == 'chromedriver' and (
+ os_str == 'mac' or os_str == 'win'):
+ os_str = os_str + '32'
+ return os_str
+
+ def run(self):
+ """Download and install the project."""
+ print 'Installing %s' % self.project_name
+ os_str = self.get_os_str
+ version = self.find_latest_version()
+ download_path = self.download_path_func({'os': os_str, 'version': version})
+ download_name = os.path.basename(download_path)
+ urllib.urlretrieve(os.path.join(self.source_path(), download_path),
+ os.path.join(self.destination, download_name))
+ if download_name.endswith('.zip'):
+ 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. :-/
+ run_cmd('unzip -u %s -d %s' % (os.path.join(self.destination,
+ download_name), self.destination), stdin='y')
+ else:
+ z = zipfile.ZipFile(os.path.join(self.destination, download_name))
+ z.extractall(self.destination)
+ z.close()
+ os.remove(os.path.join(self.destination, download_name))
+ chrome_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),
+ 'orig-chromedriver')
+ if self.project_name == 'chromedriver' and os.path.exists(chrome_path):
+ # We have one additional location to make sure chromedriver is updated.
+ # TODO(efortuna): Remove this. See move_chrome_driver_if_needed in
+ # perf_testing/run_perf_tests.py
+ driver = 'chromedriver'
+ if platform.system() == 'Windows':
+ driver += '.exe'
+ shutil.copy(os.path.join(self.destination, driver),
+ os.path.join(chrome_path, driver))
+
+class ChromeDriverInstaller(GoogleBasedInstaller):
+ """Install chromedriver from Google Storage."""
+
+ def __init__(self, destination):
+ """Create an object to install ChromeDriver
+ destination - Where to download the desired file on our filesystem.
+ """
+ super(ChromeDriverInstaller, self).__init__('chromedriver', destination,
+ lambda x: '%(version)s/chromedriver_%(os)s.zip' % x)
+
+ def find_latest_version(self):
+ """Find the latest version number of ChromeDriver."""
+ source_page = urllib2.urlopen(self.source_path())
+ source_text = source_page.read()
+ regex = re.compile('(?:<Key>)(\d+\.\d+)')
+ latest = max(regex.findall(source_text))
+ return latest
+
+ def source_path(self):
+ return 'http://chromedriver.storage.googleapis.com'
+
+class GoogleCodeInstaller(GoogleBasedInstaller):
+ """Install a project from Google Code."""
def google_code_downloads_page(self):
return 'http://code.google.com/p/%s/downloads/list' % self.project_name
- def google_code_download(self):
- return 'http://%s.googlecode.com/files/' % self.project_name
-
def find_latest_version(self):
"""Find the latest version number of some code available for download on a
Google code page. This was unfortunately done in an ad hoc manner because
@@ -115,12 +181,16 @@ class GoogleCodeInstaller(object):
google_code_site = self.google_code_downloads_page()
f = urllib2.urlopen(google_code_site)
latest = ''
+
+ download_regex_str = self.download_path_func({'os': self.get_os_str,
+ 'version': '.+'})
+
for line in f.readlines():
- if re.search(self.download_regex_str, line):
+ if re.search(download_regex_str, line):
suffix_index = line.find(
- self.download_regex_str[self.download_regex_str.rfind('.'):])
- name_end = self.download_regex_str.rfind('.+')
- name = self.download_name_func({'os': self.get_os_str, 'version': ''})
+ download_regex_str[download_regex_str.rfind('.'):])
+ name_end = download_regex_str.rfind('.+')
+ name = self.download_path_func({'os': self.get_os_str, 'version': ''})
name = name[:name.rfind('.')]
version_str = line[line.find(name) + len(name) : suffix_index]
orig_version_str = version_str
@@ -134,7 +204,7 @@ class GoogleCodeInstaller(object):
else:
orig_latest_str = latest
latest = latest.replace('_', '.')
- latest = re.compile(r'[^\d.]+').sub('', latest)
+ latest = re.compile(r'[^\d.]+').sub('', latest)
nums = version_str.split('.')
latest_nums = latest.split('.')
for (num, latest_num) in zip(nums, latest_nums):
@@ -148,53 +218,8 @@ class GoogleCodeInstaller(object):
' %s.' % google_code_site)
return latest
- def run(self):
- """Download and install the Google Code."""
- print 'Installing from %s' % self.project_name
- os_str = self.get_os_str
- version = self.find_latest_version()
- download_name = self.download_name_func({'os': os_str, 'version': version})
- urllib.urlretrieve(self.google_code_download() + '/' + download_name,
- os.path.join(self.download_location, download_name))
- if download_name.endswith('.zip'):
- 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. :-/
- run_cmd('unzip -u %s -d %s' % (os.path.join(self.download_location,
- download_name), self.download_location), stdin='y')
- else:
- z = zipfile.ZipFile(os.path.join(self.download_location, download_name))
- z.extractall(self.download_location)
- z.close()
- os.remove(os.path.join(self.download_location, download_name))
- chrome_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),
- 'orig-chromedriver')
- if self.project_name == 'chromedriver' and os.path.exists(chrome_path):
- # We have one additional location to make sure chromedriver is updated.
- # TODO(efortuna): Remove this. See move_chrome_driver_if_needed in
- # perf_testing/run_perf_tests.py
- driver = 'chromedriver'
- if platform.system() == 'Windows':
- driver += '.exe'
- shutil.copy(os.path.join(self.download_location, driver),
- os.path.join(chrome_path, driver))
-
- @property
- def get_os_str(self):
- """The strings to indicate what OS a download is for as used on Google Code.
- """
- os_str = 'win'
- if 'darwin' in sys.platform:
- os_str = 'mac'
- elif 'linux' in sys.platform:
- os_str = 'linux32'
- if '64bit' in platform.architecture()[0]:
- os_str = 'linux64'
- if self.project_name == 'chromedriver' and (
- os_str == 'mac' or os_str == 'win'):
- os_str = os_str + '32'
- return os_str
+ def source_path(self):
+ return 'http://%s.googlecode.com/files/' % self.project_name
class FirefoxInstaller(object):
@@ -393,9 +418,7 @@ def main():
if not args.python:
SeleniumBindingsInstaller(args.buildbot).run()
if not args.chromedriver:
- GoogleCodeInstaller('chromedriver',
- find_depot_tools_location(args.buildbot),
- lambda x: 'chromedriver_%(os)s_%(version)s.zip' % x).run()
+ ChromeDriverInstaller(find_depot_tools_location(args.buildbot)).run()
if not args.seleniumrc:
GoogleCodeInstaller('selenium', os.path.dirname(os.path.abspath(__file__)),
lambda x: 'selenium-server-standalone-%(version)s.jar' % x).run()
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698