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

Unified Diff: tools/testing/webdriver_test_setup.py

Issue 9572007: Revert "Adding webdriver setup script." (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 10 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 | « tools/testing/perf_testing/perf_README.txt ('k') | 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
deleted file mode 100755
index 6af0bb0a58389e5fc6de721e86674b2a78a7c583..0000000000000000000000000000000000000000
--- a/tools/testing/webdriver_test_setup.py
+++ /dev/null
@@ -1,240 +0,0 @@
-#!/usr/bin/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.
-
-# Run to install the necessary components to run webdriver on the buildbots or
-# on your local machine.
-# Note: The setup steps can be done fairly easily by hand. This script is
-# intended to simply and reduce the time for setup since there are a fair number
-# of steps.
-
-# TODO(efortuna): Rewrite this script in Dart when the Process module has a
-# better high level API.
-import optparse
-import os
-import platform
-import re
-import subprocess
-import sys
-import urllib
-import urllib2
-
-def run_cmd(cmd, stdin=None):
- """Run the command on the command line in the shell. We print the output of
- the command.
- """
- print cmd
- p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
- stdin=subprocess.PIPE, shell=True)
- output, not_used = p.communicate(input=stdin)
- if output:
- print output
-
-def parse_args():
- parser = optparse.OptionParser()
- parser.add_option('--firefox', '-f', dest='firefox', help='Install Firefox',
- action='store_true', default=False)
- parser.add_option('--path', '-p', dest='path', help='Specify location ' + \
- 'on your PATH for where we should install chromedriver (default is in' + \
- 'depot_tools).', metavar='CHROMEDRIVER_LOC', type='str', action='store',
- default=None)
- parser.add_option('--buildbot', '-b', dest='buildbot', action='store_true',
- help='Perform a buildbot selenium setup (buildbots have a different' + \
- 'location for their python executable).', default=False)
- args, ignored = parser.parse_args()
- return args
-
-def find_depot_tools_location(is_buildbot):
- """Depot_tools is our default install location for chromedriver, so we find
- its location on the filesystem.
- Arguments:
- is_buildbot - True if we are running buildbot machine setup (we can't detect
- this automatically because this script is not run at build time).
- """
- if is_buildbot:
- depot_tools = os.path.join('b', 'depot_tools')
- if 'win32' in sys.platform or 'cygwin' in sys.platform:
- depot_tools = os.path.join('e:', depot_tools)
- depot_tools = '/Users/efortuna'
- return depot_tools
- else:
- path = os.environ['PATH'].split(os.pathsep)
- for loc in path:
- if 'depot_tools' in loc:
- return loc
- raise Exception("Could not find depot_tools in your path.")
-
-
-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.
- Arguments:
- project_name - The GoogleCode project name such as "selenium" or "chromium."
- download_location - Where to download the desired file on our filesystem.
- download_name_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.
- """
- 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': '.+'})
-
- 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
- Google Code does not seem to have an API for their list of current
- downloads(!).
- """
- google_code_site = self.google_code_downloads_page()
- f = urllib2.urlopen(google_code_site)
- latest = ''
- for line in f.readlines():
- if re.search(self.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': ''})
- name = name[:name.rfind('.')]
- version_str = line[line.find(name) + len(name) : suffix_index]
- if latest == '':
- latest = '0.' * version_str.count('.')
- latest += '0'
- nums = version_str.split('.')
- latest_nums = latest.split('.')
- for (num, latest_num) in zip(nums, latest_nums):
- if int(num) > int(latest_num):
- latest = version_str
- break
- if latest == '':
- raise Exception("Couldn't find the desired download on " + \
- ' %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'):
- run_cmd('unzip -u %s -d %s' % (os.path.join(self.download_location,
- download_name), self.download_location))
- os.remove(os.path.join(self.download_location, download_name))
-
- @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'
- return os_str
-
-
-class FirefoxInstaller(object):
- """Installs the latest version of Firefox on the machine."""
-
- def ff_download_site(self, os_name):
- return 'http://releases.mozilla.org/pub/mozilla.org/firefox/releases/' + \
- 'latest/%s/en-US/' % os_name
-
- def get_os_str(self):
- """Returns the string that Mozilla uses to denote which operating system a
- Firefox binary is for."""
- os_str = ('win32', '.exe')
- if 'darwin' in sys.platform:
- os_str = ('mac', '.dmg')
- elif 'linux' in sys.platform:
- os_str = ('linux-i686', '.tar.bz2')
- if '64bit' in platform.architecture()[0]:
- os_str = ('linux-x86_64', '.tar.bz2')
- return os_str
-
- def get_download_url(self):
- """Parse the html on the page to determine what is the latest download
- appropriate for our system."""
- f = urllib2.urlopen(self.ff_download_site(self.get_os_str[0]))
- download_name = ''
- for line in f.readlines():
- suffix = self.get_os_str[1]
- if (suffix + '"') in line:
- link_str = '<a href="'
- download_name = line[line.find(link_str) + len(link_str) : \
- line.find(suffix) + len(suffix)]
- break
- return '%s%s' % (self.ff_download_site(self.get_os_str[0]), download_name)
-
- def run(self):
- print 'Installing Firefox'
- if 'darwin' in sys.platform:
- urllib.urlretrieve(self.get_download_url(), 'firefox.dmg')
- run_cmd('hdiutil mount firefox.dmg')
- run_cmd('sudo cp -R /Volumes/firefox/Firefox.app /Applications')
- run_cmd('hdiutil unmount /Volumes/firefox/')
- elif 'win' in sys.platform:
- urllib.urlretrieve(self.get_download_url(), 'firefox_install.exe')
- run_cmd('firefox_install.exe -ms')
- else:
- run_cmd('wget -O - %s | tar -C ~ -jxv' % self.get_download_url())
-
-
-class SeleniumBindingsInstaller(object):
- """Install the Selenium Webdriver bindings for Python."""
-
- SETUPTOOLS_SITE = 'http://python-distribute.org/distribute_setup.py'
- PIP_SITE = 'https://raw.github.com/pypa/pip/master/contrib/get-pip.py'
- def __init__(self, is_buildbot):
- self.is_buildbot = is_buildbot
-
- def run(self):
- print 'Installing Selenium Python Bindings'
- admin_keyword = ''
- python_cmd = 'python'
- if 'win32' not in sys.platform and 'cygwin' not in sys.platform:
- admin_keyword = 'sudo'
- else:
- # The python installation is "special" on Windows buildbots.
- if is_buildbot:
- python_cmd = os.path.join(find_depot_tools_location(is_buildbot),
- 'python-bin', 'python')
- page = urllib2.urlopen(self.SETUPTOOLS_SITE)
- run_cmd('%s %s' % (admin_keyword, python_cmd), page.read())
- page = urllib2.urlopen(self.PIP_SITE)
- run_cmd('%s %s' % (admin_keyword, python_cmd), page.read())
- run_cmd('%s pip install -U selenium' % admin_keyword)
-
-def main():
- args = parse_args()
- SeleniumBindingsInstaller(args.buildbot).run()
- chromedriver_loc = find_depot_tools_location(args.buildbot)
- if args.path:
- chromedriver_loc = args.path
- GoogleCodeInstaller('chromium', chromedriver_loc,
- lambda x: 'chromedriver_%(os)s_%(version)s.zip' % x).run()
- if 'darwin' in sys.platform:
- GoogleCodeInstaller('selenium', os.path.dirname(os.path.abspath(__file__)),
- lambda x: 'selenium-server-standalone-%(version)s.jar' % x).run()
-
- if args.firefox:
- FirefoxInstaller().run()
-
-if __name__ == '__main__':
- main()
« no previous file with comments | « tools/testing/perf_testing/perf_README.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698