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

Side by Side Diff: chrome/test/pyautolib/fetch_prebuilt_pyauto.py

Issue 7762010: Change fetch prebuilt pyauto script to download chromedriver. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/chrome/test/
Patch Set: address comments Created 9 years, 3 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/python 1 #!/usr/bin/python
2 2
3 # Copyright (c) 2011 The Chromium Authors. All rights reserved. 3 # Copyright (c) 2011 The Chromium Authors. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be 4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file. 5 # found in the LICENSE file.
6 6
7 """Fetch prebuilt binaries to run PyAuto. 7 """Fetch prebuilt binaries to run PyAuto.
8 8
9 Sets up Chrome and PyAuto binaries using prebuilt binaries from the 9 Sets up Chrome and PyAuto binaries using prebuilt binaries from the
10 continuous build archives. Works on mac, win, linux (32 & 64 bit). 10 continuous build archives. Works on mac, win, linux (32 & 64 bit).
11 11
12 Examples: 12 Examples:
13 On Mac: 13 On Mac:
14 $ python fetch_prebuilt_pyauto.py -d xcodebuild/Release 14 $ python fetch_prebuilt_pyauto.py -d xcodebuild/Release
15 http://build.chromium.org/f/chromium/continuous/mac/LATEST 15 http://build.chromium.org/f/chromium/continuous/mac/LATEST
16 16
17 On Win: 17 On Win:
18 $ python fetch_prebuilt_pyauto.py -d chrome\Release 18 $ python fetch_prebuilt_pyauto.py -d chrome\Release
19 http://build.chromium.org/f/chromium/continuous/win/LATEST 19 http://build.chromium.org/f/chromium/continuous/win/LATEST
20 """ 20 """
21 21
22 import glob 22 import glob
23 import httplib
23 import optparse 24 import optparse
24 import os 25 import os
25 import shutil 26 import shutil
26 import sys 27 import sys
27 import urllib 28 import urllib
29 import urlparse
28 30
29 import pyauto_utils 31 import pyauto_utils
30 32
31 33
32 class FetchPrebuilt(object): 34 class FetchPrebuilt(object):
33 """Util class to fetch prebuilt binaries to run PyAuto.""" 35 """Util class to fetch prebuilt binaries to run PyAuto."""
34 36
35 def _ParseArgs(self): 37 def _ParseArgs(self):
36 parser = optparse.OptionParser() 38 parser = optparse.OptionParser()
37 parser.add_option( 39 parser.add_option(
38 '-d', '--outdir', type='string', default=None, 40 '-d', '--outdir', type='string', default=None,
39 help='Directory in which to setup. This is typically the directory ' 41 help='Directory in which to setup. This is typically the directory '
40 'where the binaries would go when compiled from source.') 42 'where the binaries would go when compiled from source.')
41 parser.add_option( 43 parser.add_option(
42 '-p', '--platform', type='string', 44 '-p', '--platform', type='string',
43 default=pyauto_utils.GetCurrentPlatform(), 45 default=pyauto_utils.GetCurrentPlatform(),
44 help='Platform. Valid options: win, mac, linux32, linux64. ' 46 help='Platform. Valid options: win, mac, linux32, linux64. '
45 'Default: current platform (%s)' % 47 'Default: current platform (%s)' %
46 pyauto_utils.GetCurrentPlatform()) 48 pyauto_utils.GetCurrentPlatform())
47 self._options, self._args = parser.parse_args() 49 self._options, self._args = parser.parse_args()
48 if not self._options.outdir: 50 if not self._options.outdir:
49 print >>sys.stderr, 'Need output directory: -d/--outdir' 51 print >>sys.stderr, 'Need output directory: -d/--outdir'
50 sys.exit(1) 52 sys.exit(1)
51 if not self._args: 53 if not self._args:
52 print >>sys.stderr, 'Need download url' 54 print >>sys.stderr, 'Need download url'
53 sys.exit(2) 55 sys.exit(2)
54 self._outdir = self._options.outdir 56 self._outdir = self._options.outdir
55 self._url = self._args[0] 57 self._url = self._args[0]
56 58
57 # Setup urls to download 59 # Determine name of zip.
58 self._chrome_zip_name = 'chrome-%s' % { 'linux64': 'linux64bit', 60 if not self._options.platform.startswith('linux'):
59 'linux32': 'linux32bit', 61 self._chrome_zip_name = 'chrome-%s' % { 'mac': 'mac',
60 'mac': 'mac', 62 'win': 'win32'
61 'win': 'win32' 63 }[self._options.platform]
62 }[self._options.platform] 64 else:
65 linux_32_names = ['linux', 'lucid32bit']
66 linux_64_names = ['linux64', 'lucid64bit']
67 linux_names = { 'linux': linux_32_names + linux_64_names,
68 'linux32': linux_32_names,
69 'linux64': linux_64_names
70 }[self._options.platform]
71 for name in linux_names:
72 zip_name = 'chrome-' + name
73 if self._DoesURLExist('%s/%s.zip' % (self._url, zip_name)):
74 self._chrome_zip_name = zip_name
75 break
76 else:
77 raise RuntimeError('Could not find chrome zip at ' + self._url)
78
79 # Setup urls to download.
63 self._chrome_zip_url = '%s/%s.zip' % (self._url, self._chrome_zip_name) 80 self._chrome_zip_url = '%s/%s.zip' % (self._url, self._chrome_zip_name)
64 chrome_test_url = '%s/%s.test' % (self._url, self._chrome_zip_name) 81 chrome_test_url = '%s/%s.test' % (self._url, self._chrome_zip_name)
65 self._pyautolib_py_url = '%s/pyautolib.py' % chrome_test_url 82 self._pyautolib_py_url = '%s/pyautolib.py' % chrome_test_url
66 self._pyautolib_so_url = '%s/%s' % (chrome_test_url, 83 if self._options.platform == 'win':
67 { 'linux64': '_pyautolib.so', 84 self._pyautolib_so_name = '_pyautolib.pyd'
68 'linux32': '_pyautolib.so', 85 self._chromedriver_name = 'chromedriver.exe'
69 'mac': '_pyautolib.so', 86 else:
70 'win': '_pyautolib.pyd', 87 self._pyautolib_so_name = '_pyautolib.so'
71 }[self._options.platform]) 88 self._chromedriver_name = 'chromedriver'
89 self._pyautolib_so_url = chrome_test_url + '/' + self._pyautolib_so_name
90 self._chromedriver_url = chrome_test_url + '/' + self._chromedriver_name
91
92 def _DoesURLExist(self, url):
93 """Determines whether a resource exists at the given URL."""
94 parsed = urlparse.urlparse(url)
95 conn = httplib.HTTPConnection(parsed.netloc)
96 conn.request('HEAD', parsed.path)
97 return conn.getresponse().status == 200
72 98
73 def Cleanup(self): 99 def Cleanup(self):
74 """Remove old binaries, if any.""" 100 """Remove old binaries, if any."""
75 pass 101 pass
76 102
77 def Run(self): 103 def Run(self):
78 self._ParseArgs() 104 self._ParseArgs()
79 if not os.path.isdir(self._outdir): 105 if not os.path.isdir(self._outdir):
80 os.makedirs(self._outdir) 106 os.makedirs(self._outdir)
81 107
82 # Fetch chrome & pyauto binaries 108 # Fetch chrome & pyauto binaries
83 print 'Fetching' 109 print 'Fetching'
84 print self._chrome_zip_url 110 print self._chrome_zip_url
85 print self._pyautolib_py_url 111 print self._pyautolib_py_url
86 print self._pyautolib_so_url 112 print self._pyautolib_so_url
113 print self._chromedriver_url
87 chrome_zip = urllib.urlretrieve(self._chrome_zip_url)[0] 114 chrome_zip = urllib.urlretrieve(self._chrome_zip_url)[0]
88 pyautolib_py = urllib.urlretrieve(self._pyautolib_py_url)[0] 115 pyautolib_py = urllib.urlretrieve(self._pyautolib_py_url)[0]
89 pyautolib_so = urllib.urlretrieve(self._pyautolib_so_url)[0] 116 pyautolib_so = urllib.urlretrieve(self._pyautolib_so_url)[0]
117 chromedriver = urllib.urlretrieve(self._chromedriver_url)[0]
90 chrome_unzip_dir = os.path.join(self._outdir, self._chrome_zip_name) 118 chrome_unzip_dir = os.path.join(self._outdir, self._chrome_zip_name)
91 if os.path.exists(chrome_unzip_dir): 119 if os.path.exists(chrome_unzip_dir):
92 print 'Cleaning', chrome_unzip_dir 120 print 'Cleaning', chrome_unzip_dir
93 pyauto_utils.RemovePath(chrome_unzip_dir) 121 pyauto_utils.RemovePath(chrome_unzip_dir)
94 pyauto_utils.UnzipFilenameToDir(chrome_zip, self._outdir) 122 pyauto_utils.UnzipFilenameToDir(chrome_zip, self._outdir)
95 123
96 # Copy over the binaries to outdir 124 # Copy over the binaries to outdir
97 items_to_copy = { 125 items_to_copy = {
98 pyautolib_py: os.path.join(self._outdir, 'pyautolib.py'), 126 pyautolib_py: os.path.join(self._outdir, 'pyautolib.py'),
99 pyautolib_so: os.path.join(self._outdir, 127 pyautolib_so: os.path.join(self._outdir, self._pyautolib_so_name),
100 { 'linux64': '_pyautolib.so', 128 chromedriver: os.path.join(self._outdir, self._chromedriver_name)
101 'linux32': '_pyautolib.so',
102 'mac': '_pyautolib.so',
103 'win': '_pyautolib.pyd'
104 }[self._options.platform])
105 } 129 }
106 unzip_dir_contents = glob.glob(os.path.join(chrome_unzip_dir, '*')) 130 unzip_dir_contents = glob.glob(os.path.join(chrome_unzip_dir, '*'))
107 for item in unzip_dir_contents: 131 for item in unzip_dir_contents:
108 name = os.path.basename(item) 132 name = os.path.basename(item)
109 items_to_copy[item] = os.path.join(self._outdir, name) 133 items_to_copy[item] = os.path.join(self._outdir, name)
110 134
111 for src, dest in items_to_copy.iteritems(): 135 for src, dest in items_to_copy.iteritems():
112 pyauto_utils.RemovePath(dest) 136 pyauto_utils.RemovePath(dest)
113 print '%s ==> %s' % (os.path.basename(src), dest) 137 print '%s ==> %s' % (os.path.basename(src), dest)
114 shutil.move(src, dest) 138 shutil.move(src, dest)
115 pyauto_utils.RemovePath(chrome_unzip_dir) 139 pyauto_utils.RemovePath(chrome_unzip_dir)
116 140
117 # Final setup (if any) 141 # Final setup (if any)
142 # Set executable bit on chromedriver binary.
143 if not self._options.platform == 'win':
144 if not os.access(items_to_copy[chromedriver], os.R_OK | os.X_OK):
145 os.chmod(items_to_copy[chromedriver], 0500)
146
118 # Create symlink to .framework on Mac 147 # Create symlink to .framework on Mac
119 if self._options.platform == 'mac': 148 if self._options.platform == 'mac':
120 mac_app_name = os.path.basename([x for x in unzip_dir_contents 149 mac_app_name = os.path.basename([x for x in unzip_dir_contents
121 if x.endswith('.app')][0]) 150 if x.endswith('.app')][0])
122 os.chdir(self._outdir) 151 os.chdir(self._outdir)
123 framework = glob.glob(os.path.join( 152 framework = glob.glob(os.path.join(
124 mac_app_name, 'Contents', 'Versions', '*', '*.framework'))[0] 153 mac_app_name, 'Contents', 'Versions', '*', '*.framework'))[0]
125 print framework 154 print framework
126 dest = os.path.basename(framework) 155 dest = os.path.basename(framework)
127 os.path.lexists(dest) and os.remove(dest) 156 os.path.lexists(dest) and os.remove(dest)
128 print 'Creating symlink "%s"' % dest 157 print 'Creating symlink "%s"' % dest
129 os.symlink(framework, dest) 158 os.symlink(framework, dest)
130 159
131 print 'Prepared binaries in "%s"' % self._outdir 160 print 'Prepared binaries in "%s"' % self._outdir
132 161
133 162
134 if __name__ == '__main__': 163 if __name__ == '__main__':
135 FetchPrebuilt().Run() 164 FetchPrebuilt().Run()
136
OLDNEW
« 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