blob: 12324286dcc6cc5f793de57c1279a285d73fdc15 [file] [log] [blame]
David James8c846492011-01-25 17:07:29 -08001#!/usr/bin/python
David Jamesbb20ac82012-07-18 10:59:16 -07002# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
David James8c846492011-01-25 17:07:29 -08003# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
6import copy
7import mox
8import os
David James8fa34ea2011-04-15 13:00:20 -07009import multiprocessing
Chris Sosa471532a2011-02-01 15:10:06 -080010import sys
David James8c846492011-01-25 17:07:29 -080011import tempfile
Chris Sosa471532a2011-02-01 15:10:06 -080012
David Jamesc5cbd472012-06-19 16:25:45 -070013sys.path.insert(0, os.path.join(os.path.dirname(os.path.realpath(__file__)),
14 '..', '..'))
15from chromite.scripts import upload_prebuilts as prebuilt
Brian Harringc92788f2012-09-21 18:07:15 -070016from chromite.lib import cros_test_lib
David James615e5b52011-06-03 11:10:15 -070017from chromite.lib import binpkg
Zdenek Behanc0e18762012-09-22 04:06:17 +020018from chromite.lib import osutils
David James8c846492011-01-25 17:07:29 -080019
David James4058b0d2011-12-08 21:24:50 -080020# pylint: disable=E1120,W0212,R0904
David James615e5b52011-06-03 11:10:15 -070021PUBLIC_PACKAGES = [{'CPV': 'gtk+/public1', 'SHA1': '1', 'MTIME': '1'},
David James8c846492011-01-25 17:07:29 -080022 {'CPV': 'gtk+/public2', 'SHA1': '2',
David James615e5b52011-06-03 11:10:15 -070023 'PATH': 'gtk+/foo.tgz', 'MTIME': '2'}]
24PRIVATE_PACKAGES = [{'CPV': 'private', 'SHA1': '3', 'MTIME': '3'}]
David James8c846492011-01-25 17:07:29 -080025
26
27def SimplePackageIndex(header=True, packages=True):
Chris Sosa58669192011-06-30 12:45:03 -070028 pkgindex = binpkg.PackageIndex()
29 if header:
30 pkgindex.header['URI'] = 'http://www.example.com'
31 if packages:
32 pkgindex.packages = copy.deepcopy(PUBLIC_PACKAGES + PRIVATE_PACKAGES)
33 return pkgindex
David James8c846492011-01-25 17:07:29 -080034
35
Brian Harringc92788f2012-09-21 18:07:15 -070036class TestUpdateFile(cros_test_lib.TempDirTestCase):
David James8c846492011-01-25 17:07:29 -080037
38 def setUp(self):
39 self.contents_str = ['# comment that should be skipped',
40 'PKGDIR="/var/lib/portage/pkgs"',
41 'PORTAGE_BINHOST="http://no.thanks.com"',
42 'portage portage-20100310.tar.bz2',
43 'COMPILE_FLAGS="some_value=some_other"',
44 ]
Zdenek Behanc0e18762012-09-22 04:06:17 +020045 self.version_file = os.path.join(self.tempdir, 'version')
46 osutils.WriteFile(self.version_file, '\n'.join(self.contents_str))
David James8c846492011-01-25 17:07:29 -080047
David James8c846492011-01-25 17:07:29 -080048 def _read_version_file(self, version_file=None):
49 """Read the contents of self.version_file and return as a list."""
50 if not version_file:
51 version_file = self.version_file
52
53 version_fh = open(version_file)
54 try:
55 return [line.strip() for line in version_fh.readlines()]
56 finally:
57 version_fh.close()
58
59 def _verify_key_pair(self, key, val):
60 file_contents = self._read_version_file()
61 # ensure key for verify is wrapped on quotes
62 if '"' not in val:
63 val = '"%s"' % val
64 for entry in file_contents:
65 if '=' not in entry:
66 continue
67 file_key, file_val = entry.split('=')
68 if file_key == key:
69 if val == file_val:
70 break
71 else:
72 self.fail('Could not find "%s=%s" in version file' % (key, val))
73
74 def testAddVariableThatDoesNotExist(self):
75 """Add in a new variable that was no present in the file."""
76 key = 'PORTAGE_BINHOST'
77 value = '1234567'
78 prebuilt.UpdateLocalFile(self.version_file, value)
79 print self.version_file
Chris Sosa58669192011-06-30 12:45:03 -070080 self._read_version_file()
David James8c846492011-01-25 17:07:29 -080081 self._verify_key_pair(key, value)
82 print self.version_file
83
84 def testUpdateVariable(self):
85 """Test updating a variable that already exists."""
86 key, val = self.contents_str[2].split('=')
87 new_val = 'test_update'
88 self._verify_key_pair(key, val)
89 prebuilt.UpdateLocalFile(self.version_file, new_val)
90 self._verify_key_pair(key, new_val)
91
92 def testUpdateNonExistentFile(self):
93 key = 'PORTAGE_BINHOST'
94 value = '1234567'
95 non_existent_file = tempfile.mktemp()
96 try:
97 prebuilt.UpdateLocalFile(non_existent_file, value)
98 file_contents = self._read_version_file(non_existent_file)
Chris Sosa739c8752012-05-16 19:30:35 -070099 self.assertEqual(file_contents, ['%s="%s"' % (key, value)])
David James8c846492011-01-25 17:07:29 -0800100 finally:
101 if os.path.exists(non_existent_file):
102 os.remove(non_existent_file)
103
104
Brian Harringc92788f2012-09-21 18:07:15 -0700105class TestPrebuilt(cros_test_lib.MoxTestCase):
David James8c846492011-01-25 17:07:29 -0800106
107 def testGenerateUploadDict(self):
108 base_local_path = '/b/cbuild/build/chroot/build/x86-dogfood/'
109 gs_bucket_path = 'gs://chromeos-prebuilt/host/version'
110 local_path = os.path.join(base_local_path, 'public1.tbz2')
111 self.mox.StubOutWithMock(prebuilt.os.path, 'exists')
112 prebuilt.os.path.exists(local_path).AndReturn(True)
113 self.mox.ReplayAll()
114 pkgs = [{ 'CPV': 'public1' }]
115 result = prebuilt.GenerateUploadDict(base_local_path, gs_bucket_path, pkgs)
116 expected = { local_path: gs_bucket_path + '/public1.tbz2' }
117 self.assertEqual(result, expected)
118
David James8c846492011-01-25 17:07:29 -0800119 def testDeterminePrebuiltConfHost(self):
120 """Test that the host prebuilt path comes back properly."""
121 expected_path = os.path.join(prebuilt._PREBUILT_MAKE_CONF['amd64'])
122 self.assertEqual(prebuilt.DeterminePrebuiltConfFile('fake_path', 'amd64'),
123 expected_path)
124
David James8c846492011-01-25 17:07:29 -0800125
Brian Harringc92788f2012-09-21 18:07:15 -0700126class TestPackagesFileFiltering(cros_test_lib.TestCase):
David James8c846492011-01-25 17:07:29 -0800127
128 def testFilterPkgIndex(self):
129 pkgindex = SimplePackageIndex()
130 pkgindex.RemoveFilteredPackages(lambda pkg: pkg in PRIVATE_PACKAGES)
131 self.assertEqual(pkgindex.packages, PUBLIC_PACKAGES)
132 self.assertEqual(pkgindex.modified, True)
133
134
Brian Harringc92788f2012-09-21 18:07:15 -0700135class TestPopulateDuplicateDB(cros_test_lib.TestCase):
David James8c846492011-01-25 17:07:29 -0800136
137 def testEmptyIndex(self):
138 pkgindex = SimplePackageIndex(packages=False)
139 db = {}
David James615e5b52011-06-03 11:10:15 -0700140 pkgindex._PopulateDuplicateDB(db, 0)
David James8c846492011-01-25 17:07:29 -0800141 self.assertEqual(db, {})
142
143 def testNormalIndex(self):
144 pkgindex = SimplePackageIndex()
145 db = {}
David James615e5b52011-06-03 11:10:15 -0700146 pkgindex._PopulateDuplicateDB(db, 0)
David James8c846492011-01-25 17:07:29 -0800147 self.assertEqual(len(db), 3)
David James3cbba5e2011-02-14 14:53:15 -0800148 self.assertEqual(db['1'], 'http://www.example.com/gtk+/public1.tbz2')
149 self.assertEqual(db['2'], 'http://www.example.com/gtk+/foo.tgz')
David James8c846492011-01-25 17:07:29 -0800150 self.assertEqual(db['3'], 'http://www.example.com/private.tbz2')
151
152 def testMissingSHA1(self):
153 db = {}
154 pkgindex = SimplePackageIndex()
155 del pkgindex.packages[0]['SHA1']
David James615e5b52011-06-03 11:10:15 -0700156 pkgindex._PopulateDuplicateDB(db, 0)
David James8c846492011-01-25 17:07:29 -0800157 self.assertEqual(len(db), 2)
David James3cbba5e2011-02-14 14:53:15 -0800158 self.assertEqual(db['2'], 'http://www.example.com/gtk+/foo.tgz')
David James8c846492011-01-25 17:07:29 -0800159 self.assertEqual(db['3'], 'http://www.example.com/private.tbz2')
160
161 def testFailedPopulate(self):
162 db = {}
163 pkgindex = SimplePackageIndex(header=False)
David James615e5b52011-06-03 11:10:15 -0700164 self.assertRaises(KeyError, pkgindex._PopulateDuplicateDB, db, 0)
David James8c846492011-01-25 17:07:29 -0800165 pkgindex = SimplePackageIndex()
166 del pkgindex.packages[0]['CPV']
David James615e5b52011-06-03 11:10:15 -0700167 self.assertRaises(KeyError, pkgindex._PopulateDuplicateDB, db, 0)
David James8c846492011-01-25 17:07:29 -0800168
169
Brian Harringc92788f2012-09-21 18:07:15 -0700170class TestResolveDuplicateUploads(cros_test_lib.MoxTestCase):
David James8c846492011-01-25 17:07:29 -0800171
David James615e5b52011-06-03 11:10:15 -0700172 def setUp(self):
David James615e5b52011-06-03 11:10:15 -0700173 self.mox.StubOutWithMock(binpkg.time, 'time')
174 binpkg.time.time().AndReturn(binpkg.TWO_WEEKS)
Brian Harringc92788f2012-09-21 18:07:15 -0700175 # wtf...?
David James615e5b52011-06-03 11:10:15 -0700176 self.mox.ReplayAll()
177
David James8c846492011-01-25 17:07:29 -0800178 def testEmptyList(self):
179 pkgindex = SimplePackageIndex()
180 pristine = SimplePackageIndex()
181 uploads = pkgindex.ResolveDuplicateUploads([])
David James615e5b52011-06-03 11:10:15 -0700182 self.assertEqual(uploads, pkgindex.packages)
183 self.assertEqual(len(pkgindex.packages), len(pristine.packages))
184 for pkg1, pkg2 in zip(pkgindex.packages, pristine.packages):
185 self.assertNotEqual(pkg1['MTIME'], pkg2['MTIME'])
186 del pkg1['MTIME']
187 del pkg2['MTIME']
David James8c846492011-01-25 17:07:29 -0800188 self.assertEqual(pkgindex.modified, False)
189
190 def testEmptyIndex(self):
191 pkgindex = SimplePackageIndex()
192 pristine = SimplePackageIndex()
193 empty = SimplePackageIndex(packages=False)
194 uploads = pkgindex.ResolveDuplicateUploads([empty])
David James615e5b52011-06-03 11:10:15 -0700195 self.assertEqual(uploads, pkgindex.packages)
196 self.assertEqual(len(pkgindex.packages), len(pristine.packages))
197 for pkg1, pkg2 in zip(pkgindex.packages, pristine.packages):
198 self.assertNotEqual(pkg1['MTIME'], pkg2['MTIME'])
199 del pkg1['MTIME']
200 del pkg2['MTIME']
201 self.assertEqual(pkg1, pkg2)
David James8c846492011-01-25 17:07:29 -0800202 self.assertEqual(pkgindex.modified, False)
203
204 def testDuplicates(self):
205 pkgindex = SimplePackageIndex()
206 dup_pkgindex = SimplePackageIndex()
207 expected_pkgindex = SimplePackageIndex()
208 for pkg in expected_pkgindex.packages:
David James3cbba5e2011-02-14 14:53:15 -0800209 pkg.setdefault('PATH', pkg['CPV'] + '.tbz2')
Chris Sosa58669192011-06-30 12:45:03 -0700210 pkgindex.ResolveDuplicateUploads([dup_pkgindex])
David James8c846492011-01-25 17:07:29 -0800211 self.assertEqual(pkgindex.packages, expected_pkgindex.packages)
212
213 def testMissingSHA1(self):
David James8c846492011-01-25 17:07:29 -0800214 pkgindex = SimplePackageIndex()
215 dup_pkgindex = SimplePackageIndex()
216 expected_pkgindex = SimplePackageIndex()
217 del pkgindex.packages[0]['SHA1']
218 del expected_pkgindex.packages[0]['SHA1']
219 for pkg in expected_pkgindex.packages[1:]:
220 pkg.setdefault('PATH', pkg['CPV'] + '.tbz2')
Chris Sosa58669192011-06-30 12:45:03 -0700221 pkgindex.ResolveDuplicateUploads([dup_pkgindex])
David James615e5b52011-06-03 11:10:15 -0700222 self.assertNotEqual(pkgindex.packages[0]['MTIME'],
223 expected_pkgindex.packages[0]['MTIME'])
224 del pkgindex.packages[0]['MTIME']
225 del expected_pkgindex.packages[0]['MTIME']
David James8c846492011-01-25 17:07:29 -0800226 self.assertEqual(pkgindex.packages, expected_pkgindex.packages)
227
228
Brian Harringc92788f2012-09-21 18:07:15 -0700229class TestWritePackageIndex(cros_test_lib.MoxTestCase):
David James8c846492011-01-25 17:07:29 -0800230
231 def testSimple(self):
232 pkgindex = SimplePackageIndex()
233 self.mox.StubOutWithMock(pkgindex, 'Write')
234 pkgindex.Write(mox.IgnoreArg())
235 self.mox.ReplayAll()
236 f = pkgindex.WriteToNamedTemporaryFile()
237 self.assertEqual(f.read(), '')
238
239
Brian Harringd2f971f2012-11-01 16:50:48 -0700240class TestUploadPrebuilt(cros_test_lib.MoxTestCase):
David James05bcb2b2011-02-09 09:25:47 -0800241
242 def setUp(self):
243 class MockTemporaryFile(object):
244 def __init__(self, name):
245 self.name = name
David James05bcb2b2011-02-09 09:25:47 -0800246 self.pkgindex = SimplePackageIndex()
Brian Harring99718532012-06-10 05:12:14 -0700247 self.mox.StubOutWithMock(binpkg, 'GrabLocalPackageIndex')
248 binpkg.GrabLocalPackageIndex('/packages').AndReturn(self.pkgindex)
David James05bcb2b2011-02-09 09:25:47 -0800249 self.mox.StubOutWithMock(prebuilt, 'RemoteUpload')
250 self.mox.StubOutWithMock(self.pkgindex, 'ResolveDuplicateUploads')
251 self.pkgindex.ResolveDuplicateUploads([]).AndReturn(PRIVATE_PACKAGES)
252 self.mox.StubOutWithMock(self.pkgindex, 'WriteToNamedTemporaryFile')
253 fake_pkgs_file = MockTemporaryFile('fake')
254 self.pkgindex.WriteToNamedTemporaryFile().AndReturn(fake_pkgs_file)
255
David James05bcb2b2011-02-09 09:25:47 -0800256 def testSuccessfulGsUpload(self):
257 uploads = {'/packages/private.tbz2': 'gs://foo/private.tbz2'}
258 self.mox.StubOutWithMock(prebuilt, 'GenerateUploadDict')
259 prebuilt.GenerateUploadDict('/packages', 'gs://foo/suffix',
260 PRIVATE_PACKAGES).AndReturn(uploads)
261 uploads = uploads.copy()
262 uploads['fake'] = 'gs://foo/suffix/Packages'
David Jamesfd0b0852011-02-23 11:15:36 -0800263 acl = 'public-read'
David James015af872012-06-19 15:24:36 -0700264 prebuilt.RemoteUpload(acl, uploads)
David James05bcb2b2011-02-09 09:25:47 -0800265 self.mox.ReplayAll()
David Jamesc0f158a2011-02-22 16:07:29 -0800266 uri = self.pkgindex.header['URI']
David James8ece7ee2011-06-29 16:02:30 -0700267 uploader = prebuilt.PrebuiltUploader('gs://foo', acl, uri, [], '/', [],
David Jamese2488642011-11-14 16:15:20 -0800268 False, 'foo', False, 'x86-foo', [])
David Jamesc0f158a2011-02-22 16:07:29 -0800269 uploader._UploadPrebuilt('/packages', 'suffix')
David James05bcb2b2011-02-09 09:25:47 -0800270
David James05bcb2b2011-02-09 09:25:47 -0800271
Brian Harringc92788f2012-09-21 18:07:15 -0700272class TestSyncPrebuilts(cros_test_lib.MoxTestCase):
David James05bcb2b2011-02-09 09:25:47 -0800273
274 def setUp(self):
David James05bcb2b2011-02-09 09:25:47 -0800275 self.mox.StubOutWithMock(prebuilt, 'DeterminePrebuiltConfFile')
David James05bcb2b2011-02-09 09:25:47 -0800276 self.mox.StubOutWithMock(prebuilt, 'RevGitFile')
277 self.mox.StubOutWithMock(prebuilt, 'UpdateBinhostConfFile')
278 self.build_path = '/trunk'
279 self.upload_location = 'gs://upload/'
280 self.version = '1'
281 self.binhost = 'http://prebuilt/'
282 self.key = 'PORTAGE_BINHOST'
David James615e5b52011-06-03 11:10:15 -0700283 self.mox.StubOutWithMock(prebuilt.PrebuiltUploader, '_UploadPrebuilt')
David James05bcb2b2011-02-09 09:25:47 -0800284
David James05bcb2b2011-02-09 09:25:47 -0800285 def testSyncHostPrebuilts(self):
David Jamese2488642011-11-14 16:15:20 -0800286 board = 'x86-foo'
David James4058b0d2011-12-08 21:24:50 -0800287 target = prebuilt.BuildTarget(board, 'aura')
288 slave_targets = [prebuilt.BuildTarget('x86-bar', 'aura')]
David James05bcb2b2011-02-09 09:25:47 -0800289 package_path = os.path.join(self.build_path,
290 prebuilt._HOST_PACKAGES_PATH)
291 url_suffix = prebuilt._REL_HOST_PATH % {'version': self.version,
David James4058b0d2011-12-08 21:24:50 -0800292 'host_arch': prebuilt._HOST_ARCH, 'target': target}
David James8fa34ea2011-04-15 13:00:20 -0700293 packages_url_suffix = '%s/packages' % url_suffix.rstrip('/')
David James615e5b52011-06-03 11:10:15 -0700294 prebuilt.PrebuiltUploader._UploadPrebuilt(package_path,
295 packages_url_suffix).AndReturn(True)
David Jamesf0e6fd72011-04-15 15:58:07 -0700296 url_value = '%s/%s/' % (self.binhost.rstrip('/'),
297 packages_url_suffix.rstrip('/'))
David Jamese2488642011-11-14 16:15:20 -0800298 urls = [url_value.replace('foo', 'bar'), url_value]
David James20b2b6f2011-11-18 15:11:58 -0800299 binhost = ' '.join(urls)
David Jamese2488642011-11-14 16:15:20 -0800300 prebuilt.RevGitFile(mox.IgnoreArg(), binhost, key=self.key, dryrun=False)
301 prebuilt.UpdateBinhostConfFile(mox.IgnoreArg(), self.key, binhost)
David James05bcb2b2011-02-09 09:25:47 -0800302 self.mox.ReplayAll()
David James615e5b52011-06-03 11:10:15 -0700303 uploader = prebuilt.PrebuiltUploader(
304 self.upload_location, 'public-read', self.binhost, [],
David James4058b0d2011-12-08 21:24:50 -0800305 self.build_path, [], False, 'foo', False, target, slave_targets)
Chris Sosa6a5dceb2012-05-14 13:48:56 -0700306 uploader.SyncHostPrebuilts(self.version, self.key, True, True)
David James05bcb2b2011-02-09 09:25:47 -0800307
308 def testSyncBoardPrebuilts(self):
David Jamese2488642011-11-14 16:15:20 -0800309 board = 'x86-foo'
David James4058b0d2011-12-08 21:24:50 -0800310 target = prebuilt.BuildTarget(board, 'aura')
311 slave_targets = [prebuilt.BuildTarget('x86-bar', 'aura')]
David James05bcb2b2011-02-09 09:25:47 -0800312 board_path = os.path.join(self.build_path,
313 prebuilt._BOARD_PATH % {'board': board})
314 package_path = os.path.join(board_path, 'packages')
315 url_suffix = prebuilt._REL_BOARD_PATH % {'version': self.version,
David James4058b0d2011-12-08 21:24:50 -0800316 'target': target}
David James8fa34ea2011-04-15 13:00:20 -0700317 packages_url_suffix = '%s/packages' % url_suffix.rstrip('/')
David James8fa34ea2011-04-15 13:00:20 -0700318 self.mox.StubOutWithMock(multiprocessing.Process, '__init__')
319 self.mox.StubOutWithMock(multiprocessing.Process, 'exitcode')
320 self.mox.StubOutWithMock(multiprocessing.Process, 'start')
321 self.mox.StubOutWithMock(multiprocessing.Process, 'join')
David James615e5b52011-06-03 11:10:15 -0700322 multiprocessing.Process.__init__(target=mox.IgnoreArg(),
Zdenek Behan62a57792012-08-31 15:09:08 +0200323 args=(board_path, url_suffix, self.version, None))
David James8fa34ea2011-04-15 13:00:20 -0700324 multiprocessing.Process.start()
David James615e5b52011-06-03 11:10:15 -0700325 prebuilt.PrebuiltUploader._UploadPrebuilt(package_path,
326 packages_url_suffix).AndReturn(True)
David James8fa34ea2011-04-15 13:00:20 -0700327 multiprocessing.Process.join()
328 multiprocessing.Process.exitcode = 0
David Jamesf0e6fd72011-04-15 15:58:07 -0700329 url_value = '%s/%s/' % (self.binhost.rstrip('/'),
330 packages_url_suffix.rstrip('/'))
David Jamese2488642011-11-14 16:15:20 -0800331 bar_binhost = url_value.replace('foo', 'bar')
David James4058b0d2011-12-08 21:24:50 -0800332 prebuilt.DeterminePrebuiltConfFile(self.build_path,
333 slave_targets[0]).AndReturn('bar')
David Jamese2488642011-11-14 16:15:20 -0800334 prebuilt.RevGitFile('bar', bar_binhost, key=self.key, dryrun=False)
335 prebuilt.UpdateBinhostConfFile(mox.IgnoreArg(), self.key, bar_binhost)
David James4058b0d2011-12-08 21:24:50 -0800336 prebuilt.DeterminePrebuiltConfFile(self.build_path, target).AndReturn('foo')
David James27fa7d12011-06-29 17:24:14 -0700337 prebuilt.RevGitFile('foo', url_value, key=self.key, dryrun=False)
David James05bcb2b2011-02-09 09:25:47 -0800338 prebuilt.UpdateBinhostConfFile(mox.IgnoreArg(), self.key, url_value)
339 self.mox.ReplayAll()
David James615e5b52011-06-03 11:10:15 -0700340 uploader = prebuilt.PrebuiltUploader(
341 self.upload_location, 'public-read', self.binhost, [],
David James4058b0d2011-12-08 21:24:50 -0800342 self.build_path, [], False, 'foo', False, target, slave_targets)
Zdenek Behan62a57792012-08-31 15:09:08 +0200343 uploader.SyncBoardPrebuilts(self.version, self.key, True, True, True, None)
David James05bcb2b2011-02-09 09:25:47 -0800344
345
Brian Harringc92788f2012-09-21 18:07:15 -0700346class TestMain(cros_test_lib.MoxTestCase):
David Jamesc0f158a2011-02-22 16:07:29 -0800347
348 def testMain(self):
349 """Test that the main function works."""
350 options = mox.MockObject(object)
David Jamesc0f158a2011-02-22 16:07:29 -0800351 old_binhost = 'http://prebuilt/1'
352 options.previous_binhost_url = [old_binhost]
David Jamese2488642011-11-14 16:15:20 -0800353 options.board = 'x86-foo'
David James4058b0d2011-12-08 21:24:50 -0800354 options.profile = None
Chris Sosa6a5dceb2012-05-14 13:48:56 -0700355 target = prebuilt.BuildTarget(options.board, options.profile)
David Jamesc0f158a2011-02-22 16:07:29 -0800356 options.build_path = '/trunk'
David James27fa7d12011-06-29 17:24:14 -0700357 options.debug = False
David Jamesfd0b0852011-02-23 11:15:36 -0800358 options.private = True
David James615e5b52011-06-03 11:10:15 -0700359 options.packages = []
David Jamesc0f158a2011-02-22 16:07:29 -0800360 options.sync_host = True
361 options.git_sync = True
David James8fa34ea2011-04-15 13:00:20 -0700362 options.upload_board_tarball = True
Zdenek Behan62a57792012-08-31 15:09:08 +0200363 options.prepackaged_tarball = None
David Jamesc0f158a2011-02-22 16:07:29 -0800364 options.upload = 'gs://upload/'
David Jamesfd0b0852011-02-23 11:15:36 -0800365 options.binhost_base_url = options.upload
David Jamesc0f158a2011-02-22 16:07:29 -0800366 options.prepend_version = True
David James8ece7ee2011-06-29 16:02:30 -0700367 options.set_version = None
368 options.skip_upload = False
David Jamesc0f158a2011-02-22 16:07:29 -0800369 options.filters = True
370 options.key = 'PORTAGE_BINHOST'
David James32b0b2f2011-07-13 20:56:50 -0700371 options.binhost_conf_dir = 'foo'
David Jamesc0f158a2011-02-22 16:07:29 -0800372 options.sync_binhost_conf = True
David James4058b0d2011-12-08 21:24:50 -0800373 options.slave_targets = [prebuilt.BuildTarget('x86-bar', 'aura')]
David Jamesc0f158a2011-02-22 16:07:29 -0800374 self.mox.StubOutWithMock(prebuilt, 'ParseOptions')
Chris Sosa6a5dceb2012-05-14 13:48:56 -0700375 prebuilt.ParseOptions().AndReturn(tuple([options, target]))
Brian Harring99718532012-06-10 05:12:14 -0700376 self.mox.StubOutWithMock(binpkg, 'GrabRemotePackageIndex')
377 binpkg.GrabRemotePackageIndex(old_binhost).AndReturn(True)
David Jamesfd0b0852011-02-23 11:15:36 -0800378 self.mox.StubOutWithMock(prebuilt.PrebuiltUploader, '__init__')
David Jamese5867812012-10-19 12:02:20 -0700379 self.mox.StubOutWithMock(prebuilt, 'GetBoardOverlay')
Scott Zawalskiab1bed32011-03-16 15:24:24 -0700380 fake_overlay_path = '/fake_path'
David Jamese5867812012-10-19 12:02:20 -0700381 prebuilt.GetBoardOverlay(
Scott Zawalskiab1bed32011-03-16 15:24:24 -0700382 options.build_path, options.board).AndReturn(fake_overlay_path)
383 expected_gs_acl_path = os.path.join(fake_overlay_path,
384 prebuilt._GOOGLESTORAGE_ACL_FILE)
385 prebuilt.PrebuiltUploader.__init__(options.upload, expected_gs_acl_path,
David James615e5b52011-06-03 11:10:15 -0700386 options.upload, mox.IgnoreArg(),
David James8ece7ee2011-06-29 16:02:30 -0700387 options.build_path, options.packages,
David Jamese2488642011-11-14 16:15:20 -0800388 False, options.binhost_conf_dir, False,
Chris Sosa6a5dceb2012-05-14 13:48:56 -0700389 target, options.slave_targets)
390 self.mox.StubOutWithMock(prebuilt.PrebuiltUploader, 'SyncHostPrebuilts')
391 prebuilt.PrebuiltUploader.SyncHostPrebuilts(mox.IgnoreArg(), options.key,
David James615e5b52011-06-03 11:10:15 -0700392 options.git_sync, options.sync_binhost_conf)
Chris Sosa6a5dceb2012-05-14 13:48:56 -0700393 self.mox.StubOutWithMock(prebuilt.PrebuiltUploader, 'SyncBoardPrebuilts')
394 prebuilt.PrebuiltUploader.SyncBoardPrebuilts(
David James615e5b52011-06-03 11:10:15 -0700395 mox.IgnoreArg(), options.key, options.git_sync,
Zdenek Behan62a57792012-08-31 15:09:08 +0200396 options.sync_binhost_conf, options.upload_board_tarball, None)
David Jamesc0f158a2011-02-22 16:07:29 -0800397 self.mox.ReplayAll()
David Jamesc5cbd472012-06-19 16:25:45 -0700398 prebuilt.main([])
David Jamesc0f158a2011-02-22 16:07:29 -0800399
David James8c846492011-01-25 17:07:29 -0800400if __name__ == '__main__':
Brian Harringc92788f2012-09-21 18:07:15 -0700401 cros_test_lib.main()