blob: 6f8de151adf035adc6dbbfe0e5bd5e901f094bea [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 James2c7ccb42012-11-04 15:34:28 -080017from chromite.lib import gs
David James615e5b52011-06-03 11:10:15 -070018from chromite.lib import binpkg
Zdenek Behanc0e18762012-09-22 04:06:17 +020019from chromite.lib import osutils
David James8c846492011-01-25 17:07:29 -080020
David James4058b0d2011-12-08 21:24:50 -080021# pylint: disable=E1120,W0212,R0904
David James615e5b52011-06-03 11:10:15 -070022PUBLIC_PACKAGES = [{'CPV': 'gtk+/public1', 'SHA1': '1', 'MTIME': '1'},
David James8c846492011-01-25 17:07:29 -080023 {'CPV': 'gtk+/public2', 'SHA1': '2',
David James615e5b52011-06-03 11:10:15 -070024 'PATH': 'gtk+/foo.tgz', 'MTIME': '2'}]
25PRIVATE_PACKAGES = [{'CPV': 'private', 'SHA1': '3', 'MTIME': '3'}]
David James8c846492011-01-25 17:07:29 -080026
27
28def SimplePackageIndex(header=True, packages=True):
Chris Sosa58669192011-06-30 12:45:03 -070029 pkgindex = binpkg.PackageIndex()
30 if header:
David James2c7ccb42012-11-04 15:34:28 -080031 pkgindex.header['URI'] = 'gs://example'
Chris Sosa58669192011-06-30 12:45:03 -070032 if packages:
33 pkgindex.packages = copy.deepcopy(PUBLIC_PACKAGES + PRIVATE_PACKAGES)
34 return pkgindex
David James8c846492011-01-25 17:07:29 -080035
36
Brian Harringc92788f2012-09-21 18:07:15 -070037class TestUpdateFile(cros_test_lib.TempDirTestCase):
David James8c846492011-01-25 17:07:29 -080038
39 def setUp(self):
40 self.contents_str = ['# comment that should be skipped',
41 'PKGDIR="/var/lib/portage/pkgs"',
42 'PORTAGE_BINHOST="http://no.thanks.com"',
43 'portage portage-20100310.tar.bz2',
44 'COMPILE_FLAGS="some_value=some_other"',
45 ]
Zdenek Behanc0e18762012-09-22 04:06:17 +020046 self.version_file = os.path.join(self.tempdir, 'version')
47 osutils.WriteFile(self.version_file, '\n'.join(self.contents_str))
David James8c846492011-01-25 17:07:29 -080048
David James8c846492011-01-25 17:07:29 -080049 def _read_version_file(self, version_file=None):
50 """Read the contents of self.version_file and return as a list."""
51 if not version_file:
52 version_file = self.version_file
53
54 version_fh = open(version_file)
55 try:
56 return [line.strip() for line in version_fh.readlines()]
57 finally:
58 version_fh.close()
59
60 def _verify_key_pair(self, key, val):
61 file_contents = self._read_version_file()
62 # ensure key for verify is wrapped on quotes
63 if '"' not in val:
64 val = '"%s"' % val
65 for entry in file_contents:
66 if '=' not in entry:
67 continue
68 file_key, file_val = entry.split('=')
69 if file_key == key:
70 if val == file_val:
71 break
72 else:
73 self.fail('Could not find "%s=%s" in version file' % (key, val))
74
75 def testAddVariableThatDoesNotExist(self):
76 """Add in a new variable that was no present in the file."""
77 key = 'PORTAGE_BINHOST'
78 value = '1234567'
79 prebuilt.UpdateLocalFile(self.version_file, value)
80 print self.version_file
Chris Sosa58669192011-06-30 12:45:03 -070081 self._read_version_file()
David James8c846492011-01-25 17:07:29 -080082 self._verify_key_pair(key, value)
83 print self.version_file
84
85 def testUpdateVariable(self):
86 """Test updating a variable that already exists."""
87 key, val = self.contents_str[2].split('=')
88 new_val = 'test_update'
89 self._verify_key_pair(key, val)
90 prebuilt.UpdateLocalFile(self.version_file, new_val)
91 self._verify_key_pair(key, new_val)
92
93 def testUpdateNonExistentFile(self):
94 key = 'PORTAGE_BINHOST'
95 value = '1234567'
96 non_existent_file = tempfile.mktemp()
97 try:
98 prebuilt.UpdateLocalFile(non_existent_file, value)
99 file_contents = self._read_version_file(non_existent_file)
Chris Sosa739c8752012-05-16 19:30:35 -0700100 self.assertEqual(file_contents, ['%s="%s"' % (key, value)])
David James8c846492011-01-25 17:07:29 -0800101 finally:
102 if os.path.exists(non_existent_file):
103 os.remove(non_existent_file)
104
105
Brian Harringc92788f2012-09-21 18:07:15 -0700106class TestPrebuilt(cros_test_lib.MoxTestCase):
David James8c846492011-01-25 17:07:29 -0800107
108 def testGenerateUploadDict(self):
109 base_local_path = '/b/cbuild/build/chroot/build/x86-dogfood/'
110 gs_bucket_path = 'gs://chromeos-prebuilt/host/version'
111 local_path = os.path.join(base_local_path, 'public1.tbz2')
112 self.mox.StubOutWithMock(prebuilt.os.path, 'exists')
113 prebuilt.os.path.exists(local_path).AndReturn(True)
114 self.mox.ReplayAll()
115 pkgs = [{ 'CPV': 'public1' }]
116 result = prebuilt.GenerateUploadDict(base_local_path, gs_bucket_path, pkgs)
117 expected = { local_path: gs_bucket_path + '/public1.tbz2' }
118 self.assertEqual(result, expected)
119
David James8c846492011-01-25 17:07:29 -0800120 def testDeterminePrebuiltConfHost(self):
121 """Test that the host prebuilt path comes back properly."""
122 expected_path = os.path.join(prebuilt._PREBUILT_MAKE_CONF['amd64'])
123 self.assertEqual(prebuilt.DeterminePrebuiltConfFile('fake_path', 'amd64'),
124 expected_path)
125
David James8c846492011-01-25 17:07:29 -0800126
David James2c7ccb42012-11-04 15:34:28 -0800127class TestPkgIndex(cros_test_lib.TestCase):
128
129 def setUp(self):
130 self.db = {}
131 self.pkgindex = SimplePackageIndex()
132 self.empty = SimplePackageIndex(packages=False)
133
134 def assertURIs(self, uris):
135 """Verify that the duplicate DB has the specified URLs."""
136 expected = [v.uri for _, v in sorted(self.db.items())]
137 self.assertEqual(expected, uris)
138
139
140class TestPackagesFileFiltering(TestPkgIndex):
David James8c846492011-01-25 17:07:29 -0800141
142 def testFilterPkgIndex(self):
David James2c7ccb42012-11-04 15:34:28 -0800143 """Test filtering out of private packages."""
144 self.pkgindex.RemoveFilteredPackages(lambda pkg: pkg in PRIVATE_PACKAGES)
145 self.assertEqual(self.pkgindex.packages, PUBLIC_PACKAGES)
146 self.assertEqual(self.pkgindex.modified, True)
David James8c846492011-01-25 17:07:29 -0800147
148
David James2c7ccb42012-11-04 15:34:28 -0800149class TestPopulateDuplicateDB(TestPkgIndex):
David James8c846492011-01-25 17:07:29 -0800150
151 def testEmptyIndex(self):
David James2c7ccb42012-11-04 15:34:28 -0800152 """Test population of the duplicate DB with an empty index."""
153 self.empty._PopulateDuplicateDB(self.db, 0)
154 self.assertEqual(self.db, {})
David James8c846492011-01-25 17:07:29 -0800155
156 def testNormalIndex(self):
David James2c7ccb42012-11-04 15:34:28 -0800157 """Test population of the duplicate DB with a full index."""
158 self.pkgindex._PopulateDuplicateDB(self.db, 0)
159 self.assertURIs(['gs://example/gtk+/public1.tbz2',
160 'gs://example/gtk+/foo.tgz',
161 'gs://example/private.tbz2'])
David James8c846492011-01-25 17:07:29 -0800162
163 def testMissingSHA1(self):
David James2c7ccb42012-11-04 15:34:28 -0800164 """Test population of the duplicate DB with a missing SHA1."""
165 del self.pkgindex.packages[0]['SHA1']
166 self.pkgindex._PopulateDuplicateDB(self.db, 0)
167 self.assertURIs(['gs://example/gtk+/foo.tgz',
168 'gs://example/private.tbz2'])
David James8c846492011-01-25 17:07:29 -0800169
170 def testFailedPopulate(self):
David James2c7ccb42012-11-04 15:34:28 -0800171 """Test failure conditions for the populate method."""
172 headerless = SimplePackageIndex(header=False)
173 self.assertRaises(KeyError, headerless._PopulateDuplicateDB, self.db, 0)
174 del self.pkgindex.packages[0]['CPV']
175 self.assertRaises(KeyError, self.pkgindex._PopulateDuplicateDB, self.db, 0)
David James8c846492011-01-25 17:07:29 -0800176
177
David James2c7ccb42012-11-04 15:34:28 -0800178class TestResolveDuplicateUploads(cros_test_lib.MoxTestCase, TestPkgIndex):
David James8c846492011-01-25 17:07:29 -0800179
David James615e5b52011-06-03 11:10:15 -0700180 def setUp(self):
David James615e5b52011-06-03 11:10:15 -0700181 self.mox.StubOutWithMock(binpkg.time, 'time')
182 binpkg.time.time().AndReturn(binpkg.TWO_WEEKS)
183 self.mox.ReplayAll()
David James2c7ccb42012-11-04 15:34:28 -0800184 self.db = {}
185 self.dup = SimplePackageIndex()
186 self.expected_pkgindex = SimplePackageIndex()
187
188 def assertNoDuplicates(self, candidates):
189 """Verify no duplicates are found with the specified candidates."""
190 uploads = self.pkgindex.ResolveDuplicateUploads(candidates)
191 self.assertEqual(uploads, self.pkgindex.packages)
192 self.assertEqual(len(self.pkgindex.packages),
193 len(self.expected_pkgindex.packages))
194 for pkg1, pkg2 in zip(self.pkgindex.packages,
195 self.expected_pkgindex.packages):
196 self.assertNotEqual(pkg1['MTIME'], pkg2['MTIME'])
197 del pkg1['MTIME']
198 del pkg2['MTIME']
199 self.assertEqual(self.pkgindex.modified, False)
200 self.assertEqual(self.pkgindex.packages, self.expected_pkgindex.packages)
201
202 def assertAllDuplicates(self, candidates):
203 """Verify every package is a duplicate in the specified list."""
204 for pkg in self.expected_pkgindex.packages:
205 pkg.setdefault('PATH', pkg['CPV'] + '.tbz2')
206 self.pkgindex.ResolveDuplicateUploads(candidates)
207 self.assertEqual(self.pkgindex.packages, self.expected_pkgindex.packages)
David James615e5b52011-06-03 11:10:15 -0700208
David James8c846492011-01-25 17:07:29 -0800209 def testEmptyList(self):
David James2c7ccb42012-11-04 15:34:28 -0800210 """If no candidates are supplied, no duplicates should be found."""
211 self.assertNoDuplicates([])
David James8c846492011-01-25 17:07:29 -0800212
213 def testEmptyIndex(self):
David James2c7ccb42012-11-04 15:34:28 -0800214 """If no packages are supplied, no duplicates should be found."""
215 self.assertNoDuplicates([self.empty])
David James8c846492011-01-25 17:07:29 -0800216
David James2c7ccb42012-11-04 15:34:28 -0800217 def testDifferentURI(self):
218 """If the URI differs, no duplicates should be found."""
219 self.dup.header['URI'] = 'gs://example2'
220 self.assertNoDuplicates([self.dup])
221
222 def testUpdateModificationTime(self):
223 """When duplicates are found, we should use the latest mtime."""
224 for pkg in self.expected_pkgindex.packages:
225 pkg['MTIME'] = '10'
226 for pkg in self.dup.packages:
227 pkg['MTIME'] = '4'
228 self.assertAllDuplicates([self.expected_pkgindex, self.dup])
229
230 def testCanonicalUrl(self):
231 """If the URL is in a different format, we should still find duplicates."""
232 self.dup.header['URI'] = gs.PUBLIC_BASE_HTTPS_URL + 'example'
233 self.assertAllDuplicates([self.dup])
David James8c846492011-01-25 17:07:29 -0800234
235 def testMissingSHA1(self):
David James2c7ccb42012-11-04 15:34:28 -0800236 """We should not find duplicates if there is no SHA1."""
237 del self.pkgindex.packages[0]['SHA1']
238 del self.expected_pkgindex.packages[0]['SHA1']
239 for pkg in self.expected_pkgindex.packages[1:]:
David James8c846492011-01-25 17:07:29 -0800240 pkg.setdefault('PATH', pkg['CPV'] + '.tbz2')
David James2c7ccb42012-11-04 15:34:28 -0800241 self.pkgindex.ResolveDuplicateUploads([self.dup])
242 self.assertNotEqual(self.pkgindex.packages[0]['MTIME'],
243 self.expected_pkgindex.packages[0]['MTIME'])
244 del self.pkgindex.packages[0]['MTIME']
245 del self.expected_pkgindex.packages[0]['MTIME']
246 self.assertEqual(self.pkgindex.packages, self.expected_pkgindex.packages)
David James8c846492011-01-25 17:07:29 -0800247
248
David James2c7ccb42012-11-04 15:34:28 -0800249class TestWritePackageIndex(cros_test_lib.MoxTestCase, TestPkgIndex):
David James8c846492011-01-25 17:07:29 -0800250
251 def testSimple(self):
David James2c7ccb42012-11-04 15:34:28 -0800252 """Test simple call of WriteToNamedTemporaryFile()"""
253 self.mox.StubOutWithMock(self.pkgindex, 'Write')
254 self.pkgindex.Write(mox.IgnoreArg())
David James8c846492011-01-25 17:07:29 -0800255 self.mox.ReplayAll()
David James2c7ccb42012-11-04 15:34:28 -0800256 f = self.pkgindex.WriteToNamedTemporaryFile()
David James8c846492011-01-25 17:07:29 -0800257 self.assertEqual(f.read(), '')
258
259
Brian Harringd2f971f2012-11-01 16:50:48 -0700260class TestUploadPrebuilt(cros_test_lib.MoxTestCase):
David James05bcb2b2011-02-09 09:25:47 -0800261
262 def setUp(self):
263 class MockTemporaryFile(object):
264 def __init__(self, name):
265 self.name = name
David James05bcb2b2011-02-09 09:25:47 -0800266 self.pkgindex = SimplePackageIndex()
Brian Harring99718532012-06-10 05:12:14 -0700267 self.mox.StubOutWithMock(binpkg, 'GrabLocalPackageIndex')
268 binpkg.GrabLocalPackageIndex('/packages').AndReturn(self.pkgindex)
David James05bcb2b2011-02-09 09:25:47 -0800269 self.mox.StubOutWithMock(prebuilt, 'RemoteUpload')
270 self.mox.StubOutWithMock(self.pkgindex, 'ResolveDuplicateUploads')
271 self.pkgindex.ResolveDuplicateUploads([]).AndReturn(PRIVATE_PACKAGES)
272 self.mox.StubOutWithMock(self.pkgindex, 'WriteToNamedTemporaryFile')
273 fake_pkgs_file = MockTemporaryFile('fake')
274 self.pkgindex.WriteToNamedTemporaryFile().AndReturn(fake_pkgs_file)
275
David James05bcb2b2011-02-09 09:25:47 -0800276 def testSuccessfulGsUpload(self):
277 uploads = {'/packages/private.tbz2': 'gs://foo/private.tbz2'}
278 self.mox.StubOutWithMock(prebuilt, 'GenerateUploadDict')
279 prebuilt.GenerateUploadDict('/packages', 'gs://foo/suffix',
280 PRIVATE_PACKAGES).AndReturn(uploads)
281 uploads = uploads.copy()
282 uploads['fake'] = 'gs://foo/suffix/Packages'
David Jamesfd0b0852011-02-23 11:15:36 -0800283 acl = 'public-read'
David James015af872012-06-19 15:24:36 -0700284 prebuilt.RemoteUpload(acl, uploads)
David James05bcb2b2011-02-09 09:25:47 -0800285 self.mox.ReplayAll()
David Jamesc0f158a2011-02-22 16:07:29 -0800286 uri = self.pkgindex.header['URI']
David James8ece7ee2011-06-29 16:02:30 -0700287 uploader = prebuilt.PrebuiltUploader('gs://foo', acl, uri, [], '/', [],
David Jamese2488642011-11-14 16:15:20 -0800288 False, 'foo', False, 'x86-foo', [])
David Jamesc0f158a2011-02-22 16:07:29 -0800289 uploader._UploadPrebuilt('/packages', 'suffix')
David James05bcb2b2011-02-09 09:25:47 -0800290
David James05bcb2b2011-02-09 09:25:47 -0800291
Brian Harringc92788f2012-09-21 18:07:15 -0700292class TestSyncPrebuilts(cros_test_lib.MoxTestCase):
David James05bcb2b2011-02-09 09:25:47 -0800293
294 def setUp(self):
David James05bcb2b2011-02-09 09:25:47 -0800295 self.mox.StubOutWithMock(prebuilt, 'DeterminePrebuiltConfFile')
David James05bcb2b2011-02-09 09:25:47 -0800296 self.mox.StubOutWithMock(prebuilt, 'RevGitFile')
297 self.mox.StubOutWithMock(prebuilt, 'UpdateBinhostConfFile')
298 self.build_path = '/trunk'
299 self.upload_location = 'gs://upload/'
300 self.version = '1'
301 self.binhost = 'http://prebuilt/'
302 self.key = 'PORTAGE_BINHOST'
David James615e5b52011-06-03 11:10:15 -0700303 self.mox.StubOutWithMock(prebuilt.PrebuiltUploader, '_UploadPrebuilt')
David James05bcb2b2011-02-09 09:25:47 -0800304
David James05bcb2b2011-02-09 09:25:47 -0800305 def testSyncHostPrebuilts(self):
David Jamese2488642011-11-14 16:15:20 -0800306 board = 'x86-foo'
David James4058b0d2011-12-08 21:24:50 -0800307 target = prebuilt.BuildTarget(board, 'aura')
308 slave_targets = [prebuilt.BuildTarget('x86-bar', 'aura')]
David James05bcb2b2011-02-09 09:25:47 -0800309 package_path = os.path.join(self.build_path,
310 prebuilt._HOST_PACKAGES_PATH)
311 url_suffix = prebuilt._REL_HOST_PATH % {'version': self.version,
David James4058b0d2011-12-08 21:24:50 -0800312 'host_arch': prebuilt._HOST_ARCH, 'target': target}
David James8fa34ea2011-04-15 13:00:20 -0700313 packages_url_suffix = '%s/packages' % url_suffix.rstrip('/')
David James615e5b52011-06-03 11:10:15 -0700314 prebuilt.PrebuiltUploader._UploadPrebuilt(package_path,
315 packages_url_suffix).AndReturn(True)
David Jamesf0e6fd72011-04-15 15:58:07 -0700316 url_value = '%s/%s/' % (self.binhost.rstrip('/'),
317 packages_url_suffix.rstrip('/'))
David Jamese2488642011-11-14 16:15:20 -0800318 urls = [url_value.replace('foo', 'bar'), url_value]
David James20b2b6f2011-11-18 15:11:58 -0800319 binhost = ' '.join(urls)
David Jamese2488642011-11-14 16:15:20 -0800320 prebuilt.RevGitFile(mox.IgnoreArg(), binhost, key=self.key, dryrun=False)
321 prebuilt.UpdateBinhostConfFile(mox.IgnoreArg(), self.key, binhost)
David James05bcb2b2011-02-09 09:25:47 -0800322 self.mox.ReplayAll()
David James615e5b52011-06-03 11:10:15 -0700323 uploader = prebuilt.PrebuiltUploader(
324 self.upload_location, 'public-read', self.binhost, [],
David James4058b0d2011-12-08 21:24:50 -0800325 self.build_path, [], False, 'foo', False, target, slave_targets)
Chris Sosa6a5dceb2012-05-14 13:48:56 -0700326 uploader.SyncHostPrebuilts(self.version, self.key, True, True)
David James05bcb2b2011-02-09 09:25:47 -0800327
328 def testSyncBoardPrebuilts(self):
David Jamese2488642011-11-14 16:15:20 -0800329 board = 'x86-foo'
David James4058b0d2011-12-08 21:24:50 -0800330 target = prebuilt.BuildTarget(board, 'aura')
331 slave_targets = [prebuilt.BuildTarget('x86-bar', 'aura')]
David James05bcb2b2011-02-09 09:25:47 -0800332 board_path = os.path.join(self.build_path,
333 prebuilt._BOARD_PATH % {'board': board})
334 package_path = os.path.join(board_path, 'packages')
335 url_suffix = prebuilt._REL_BOARD_PATH % {'version': self.version,
David James4058b0d2011-12-08 21:24:50 -0800336 'target': target}
David James8fa34ea2011-04-15 13:00:20 -0700337 packages_url_suffix = '%s/packages' % url_suffix.rstrip('/')
David James8fa34ea2011-04-15 13:00:20 -0700338 self.mox.StubOutWithMock(multiprocessing.Process, '__init__')
339 self.mox.StubOutWithMock(multiprocessing.Process, 'exitcode')
340 self.mox.StubOutWithMock(multiprocessing.Process, 'start')
341 self.mox.StubOutWithMock(multiprocessing.Process, 'join')
David James615e5b52011-06-03 11:10:15 -0700342 multiprocessing.Process.__init__(target=mox.IgnoreArg(),
Zdenek Behan62a57792012-08-31 15:09:08 +0200343 args=(board_path, url_suffix, self.version, None))
David James8fa34ea2011-04-15 13:00:20 -0700344 multiprocessing.Process.start()
David James615e5b52011-06-03 11:10:15 -0700345 prebuilt.PrebuiltUploader._UploadPrebuilt(package_path,
346 packages_url_suffix).AndReturn(True)
David James8fa34ea2011-04-15 13:00:20 -0700347 multiprocessing.Process.join()
348 multiprocessing.Process.exitcode = 0
David Jamesf0e6fd72011-04-15 15:58:07 -0700349 url_value = '%s/%s/' % (self.binhost.rstrip('/'),
350 packages_url_suffix.rstrip('/'))
David Jamese2488642011-11-14 16:15:20 -0800351 bar_binhost = url_value.replace('foo', 'bar')
David James4058b0d2011-12-08 21:24:50 -0800352 prebuilt.DeterminePrebuiltConfFile(self.build_path,
353 slave_targets[0]).AndReturn('bar')
David Jamese2488642011-11-14 16:15:20 -0800354 prebuilt.RevGitFile('bar', bar_binhost, key=self.key, dryrun=False)
355 prebuilt.UpdateBinhostConfFile(mox.IgnoreArg(), self.key, bar_binhost)
David James4058b0d2011-12-08 21:24:50 -0800356 prebuilt.DeterminePrebuiltConfFile(self.build_path, target).AndReturn('foo')
David James27fa7d12011-06-29 17:24:14 -0700357 prebuilt.RevGitFile('foo', url_value, key=self.key, dryrun=False)
David James05bcb2b2011-02-09 09:25:47 -0800358 prebuilt.UpdateBinhostConfFile(mox.IgnoreArg(), self.key, url_value)
359 self.mox.ReplayAll()
David James615e5b52011-06-03 11:10:15 -0700360 uploader = prebuilt.PrebuiltUploader(
361 self.upload_location, 'public-read', self.binhost, [],
David James4058b0d2011-12-08 21:24:50 -0800362 self.build_path, [], False, 'foo', False, target, slave_targets)
Zdenek Behan62a57792012-08-31 15:09:08 +0200363 uploader.SyncBoardPrebuilts(self.version, self.key, True, True, True, None)
David James05bcb2b2011-02-09 09:25:47 -0800364
365
Brian Harringc92788f2012-09-21 18:07:15 -0700366class TestMain(cros_test_lib.MoxTestCase):
David Jamesc0f158a2011-02-22 16:07:29 -0800367
368 def testMain(self):
369 """Test that the main function works."""
370 options = mox.MockObject(object)
David Jamesc0f158a2011-02-22 16:07:29 -0800371 old_binhost = 'http://prebuilt/1'
372 options.previous_binhost_url = [old_binhost]
David Jamese2488642011-11-14 16:15:20 -0800373 options.board = 'x86-foo'
David James4058b0d2011-12-08 21:24:50 -0800374 options.profile = None
Chris Sosa6a5dceb2012-05-14 13:48:56 -0700375 target = prebuilt.BuildTarget(options.board, options.profile)
David Jamesc0f158a2011-02-22 16:07:29 -0800376 options.build_path = '/trunk'
David James27fa7d12011-06-29 17:24:14 -0700377 options.debug = False
David Jamesfd0b0852011-02-23 11:15:36 -0800378 options.private = True
David James615e5b52011-06-03 11:10:15 -0700379 options.packages = []
David Jamesc0f158a2011-02-22 16:07:29 -0800380 options.sync_host = True
381 options.git_sync = True
David James8fa34ea2011-04-15 13:00:20 -0700382 options.upload_board_tarball = True
Zdenek Behan62a57792012-08-31 15:09:08 +0200383 options.prepackaged_tarball = None
David Jamesc0f158a2011-02-22 16:07:29 -0800384 options.upload = 'gs://upload/'
David Jamesfd0b0852011-02-23 11:15:36 -0800385 options.binhost_base_url = options.upload
David Jamesc0f158a2011-02-22 16:07:29 -0800386 options.prepend_version = True
David James8ece7ee2011-06-29 16:02:30 -0700387 options.set_version = None
388 options.skip_upload = False
David Jamesc0f158a2011-02-22 16:07:29 -0800389 options.filters = True
390 options.key = 'PORTAGE_BINHOST'
David James32b0b2f2011-07-13 20:56:50 -0700391 options.binhost_conf_dir = 'foo'
David Jamesc0f158a2011-02-22 16:07:29 -0800392 options.sync_binhost_conf = True
David James4058b0d2011-12-08 21:24:50 -0800393 options.slave_targets = [prebuilt.BuildTarget('x86-bar', 'aura')]
David Jamesc0f158a2011-02-22 16:07:29 -0800394 self.mox.StubOutWithMock(prebuilt, 'ParseOptions')
Chris Sosa6a5dceb2012-05-14 13:48:56 -0700395 prebuilt.ParseOptions().AndReturn(tuple([options, target]))
Brian Harring99718532012-06-10 05:12:14 -0700396 self.mox.StubOutWithMock(binpkg, 'GrabRemotePackageIndex')
397 binpkg.GrabRemotePackageIndex(old_binhost).AndReturn(True)
David Jamesfd0b0852011-02-23 11:15:36 -0800398 self.mox.StubOutWithMock(prebuilt.PrebuiltUploader, '__init__')
David Jamese5867812012-10-19 12:02:20 -0700399 self.mox.StubOutWithMock(prebuilt, 'GetBoardOverlay')
Scott Zawalskiab1bed32011-03-16 15:24:24 -0700400 fake_overlay_path = '/fake_path'
David Jamese5867812012-10-19 12:02:20 -0700401 prebuilt.GetBoardOverlay(
Scott Zawalskiab1bed32011-03-16 15:24:24 -0700402 options.build_path, options.board).AndReturn(fake_overlay_path)
403 expected_gs_acl_path = os.path.join(fake_overlay_path,
404 prebuilt._GOOGLESTORAGE_ACL_FILE)
405 prebuilt.PrebuiltUploader.__init__(options.upload, expected_gs_acl_path,
David James615e5b52011-06-03 11:10:15 -0700406 options.upload, mox.IgnoreArg(),
David James8ece7ee2011-06-29 16:02:30 -0700407 options.build_path, options.packages,
David Jamese2488642011-11-14 16:15:20 -0800408 False, options.binhost_conf_dir, False,
Chris Sosa6a5dceb2012-05-14 13:48:56 -0700409 target, options.slave_targets)
410 self.mox.StubOutWithMock(prebuilt.PrebuiltUploader, 'SyncHostPrebuilts')
411 prebuilt.PrebuiltUploader.SyncHostPrebuilts(mox.IgnoreArg(), options.key,
David James615e5b52011-06-03 11:10:15 -0700412 options.git_sync, options.sync_binhost_conf)
Chris Sosa6a5dceb2012-05-14 13:48:56 -0700413 self.mox.StubOutWithMock(prebuilt.PrebuiltUploader, 'SyncBoardPrebuilts')
414 prebuilt.PrebuiltUploader.SyncBoardPrebuilts(
David James615e5b52011-06-03 11:10:15 -0700415 mox.IgnoreArg(), options.key, options.git_sync,
Zdenek Behan62a57792012-08-31 15:09:08 +0200416 options.sync_binhost_conf, options.upload_board_tarball, None)
David Jamesc0f158a2011-02-22 16:07:29 -0800417 self.mox.ReplayAll()
David Jamesc5cbd472012-06-19 16:25:45 -0700418 prebuilt.main([])
David Jamesc0f158a2011-02-22 16:07:29 -0800419
David James8c846492011-01-25 17:07:29 -0800420if __name__ == '__main__':
Brian Harringc92788f2012-09-21 18:07:15 -0700421 cros_test_lib.main()