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

Side by Side Diff: prebuilt_unittest.py

Issue 4969003: Update cbuildbot.py to upload prebuilts from preflight buildbot. (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/crosutils.git@master
Patch Set: Add lots more unit tests. Created 10 years, 1 month 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
« prebuilt.py ('K') | « prebuilt.py ('k') | 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 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. 2 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 import copy
6 import mox 7 import mox
7 import os 8 import os
8 import prebuilt 9 import prebuilt
9 import shutil 10 import shutil
10 import tempfile 11 import tempfile
11 import unittest 12 import unittest
12 from chromite.lib import cros_build_lib 13 from chromite.lib import cros_build_lib
14 from chromite.lib.binpkg import PackageIndex
15
16 PUBLIC_PACKAGES = [{'CPV': 'public1', 'SHA1': '1'},
17 {'CPV': 'public2', 'SHA1': '2', 'PATH': 'foo.tgz'}]
18 PRIVATE_PACKAGES = [{'CPV': 'private', 'SHA1': '3'}]
19
20
21 def SimplePackageIndex(header=True, packages=True):
22 pkgindex = PackageIndex()
23 if header:
24 pkgindex.header['URI'] = 'http://www.example.com'
25 if packages:
26 pkgindex.packages = copy.deepcopy(PUBLIC_PACKAGES + PRIVATE_PACKAGES)
27 return pkgindex
28
13 29
14 class TestUpdateFile(unittest.TestCase): 30 class TestUpdateFile(unittest.TestCase):
15 31
16 def setUp(self): 32 def setUp(self):
17 self.contents_str = ['# comment that should be skipped', 33 self.contents_str = ['# comment that should be skipped',
18 'PKGDIR="/var/lib/portage/pkgs"', 34 'PKGDIR="/var/lib/portage/pkgs"',
19 'PORTAGE_BINHOST="http://no.thanks.com"', 35 'PORTAGE_BINHOST="http://no.thanks.com"',
20 'portage portage-20100310.tar.bz2', 36 'portage portage-20100310.tar.bz2',
21 'COMPILE_FLAGS="some_value=some_other"', 37 'COMPILE_FLAGS="some_value=some_other"',
22 ] 38 ]
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 self.assertEqual(self.expected_filters, prebuilt._FILTER_PACKAGES) 146 self.assertEqual(self.expected_filters, prebuilt._FILTER_PACKAGES)
131 147
132 def testEmptyFiltersErrors(self): 148 def testEmptyFiltersErrors(self):
133 """Ensure LoadPrivateFilters errors if an empty list is generated.""" 149 """Ensure LoadPrivateFilters errors if an empty list is generated."""
134 os.makedirs(os.path.join(self.tmp_dir, prebuilt._PRIVATE_OVERLAY_DIR)) 150 os.makedirs(os.path.join(self.tmp_dir, prebuilt._PRIVATE_OVERLAY_DIR))
135 self.assertRaises(prebuilt.FiltersEmpty, prebuilt.LoadPrivateFilters, 151 self.assertRaises(prebuilt.FiltersEmpty, prebuilt.LoadPrivateFilters,
136 self.tmp_dir) 152 self.tmp_dir)
137 153
138 154
139 class TestPrebuilt(unittest.TestCase): 155 class TestPrebuilt(unittest.TestCase):
140 fake_path = '/b/cbuild/build/chroot/build/x86-dogfood/'
141 bin_package_mock = ['packages/x11-misc/shared-mime-info-0.70.tbz2',
142 'packages/x11-misc/util-macros-1.5.0.tbz2',
143 'packages/x11-misc/xbitmaps-1.1.0.tbz2',
144 'packages/x11-misc/read-edid-1.4.2.tbz2',
145 'packages/x11-misc/xdg-utils-1.0.2-r3.tbz2']
146
147 files_to_sync = [os.path.join(fake_path, file) for file in bin_package_mock]
148 156
149 def setUp(self): 157 def setUp(self):
150 self.mox = mox.Mox() 158 self.mox = mox.Mox()
151 159
152 def tearDown(self): 160 def tearDown(self):
153 self.mox.UnsetStubs() 161 self.mox.UnsetStubs()
154 self.mox.VerifyAll() 162 self.mox.VerifyAll()
155 163
156 def _generate_dict_results(self, gs_bucket_path):
157 """
158 Generate a dictionary result similar to GenerateUploadDict
159 """
160 results = {}
161 for entry in self.files_to_sync:
162 results[entry] = os.path.join(
163 gs_bucket_path, entry.replace(self.fake_path, '').lstrip('/'))
164 return results
165
166 def testGenerateUploadDict(self): 164 def testGenerateUploadDict(self):
165 base_local_path = '/b/cbuild/build/chroot/build/x86-dogfood/'
167 gs_bucket_path = 'gs://chromeos-prebuilt/host/version' 166 gs_bucket_path = 'gs://chromeos-prebuilt/host/version'
168 self.mox.StubOutWithMock(cros_build_lib, 'ListFiles') 167 local_path = os.path.join(base_local_path, 'public1.tbz2')
169 cros_build_lib.ListFiles(self.fake_path).AndReturn(self.files_to_sync) 168 self.mox.StubOutWithMock(prebuilt.os.path, 'exists')
169 prebuilt.os.path.exists(local_path).AndReturn(True)
170 self.mox.ReplayAll() 170 self.mox.ReplayAll()
171 result = prebuilt.GenerateUploadDict(self.fake_path, gs_bucket_path) 171 pkgs = [{ 'CPV': 'public1' }]
172 self.assertEqual(result, self._generate_dict_results(gs_bucket_path)) 172 result = prebuilt.GenerateUploadDict(base_local_path, gs_bucket_path, pkgs)
173 expected = { local_path: gs_bucket_path + '/public1.tbz2' }
174 self.assertEqual(result, expected)
173 175
174 def testFailonUploadFail(self): 176 def testFailonUploadFail(self):
175 """Make sure we fail if one of the upload processes fail.""" 177 """Make sure we fail if one of the upload processes fail."""
176 files = {'test': '/uasd'} 178 files = {'test': '/uasd'}
177 self.assertEqual(prebuilt.RemoteUpload(files), set([('test', '/uasd')])) 179 self.assertEqual(prebuilt.RemoteUpload(files), set([('test', '/uasd')]))
178 180
179 def testDetermineMakeConf(self): 181 def testDetermineMakeConf(self):
180 """Test the different known variants of boards for proper path discovery.""" 182 """Test the different known variants of boards for proper path discovery."""
181 targets = {'amd64': os.path.join(prebuilt._PREBUILT_MAKE_CONF['amd64']), 183 targets = {'amd64': os.path.join(prebuilt._PREBUILT_MAKE_CONF['amd64']),
182 'x86-generic': os.path.join(prebuilt._BINHOST_BASE_DIR, 184 'x86-generic': os.path.join(prebuilt._BINHOST_BASE_DIR,
(...skipping 12 matching lines...) Expand all
195 197
196 class TestPackagesFileFiltering(unittest.TestCase): 198 class TestPackagesFileFiltering(unittest.TestCase):
197 199
198 def setUp(self): 200 def setUp(self):
199 self.mox = mox.Mox() 201 self.mox = mox.Mox()
200 202
201 def tearDown(self): 203 def tearDown(self):
202 self.mox.UnsetStubs() 204 self.mox.UnsetStubs()
203 self.mox.VerifyAll() 205 self.mox.VerifyAll()
204 206
205 def testFilterAllPackages(self): 207 def testFilterPkgIndex(self):
206 self.mox.StubOutWithMock(prebuilt, 'ShouldFilterPackage') 208 self.mox.StubOutWithMock(prebuilt, 'ShouldFilterPackage')
207 prebuilt.ShouldFilterPackage("public1").AndReturn(False) 209 prebuilt.ShouldFilterPackage('public1').AndReturn(False)
208 prebuilt.ShouldFilterPackage("private").AndReturn(True) 210 prebuilt.ShouldFilterPackage('public2').AndReturn(False)
209 prebuilt.ShouldFilterPackage("public2").AndReturn(False) 211 prebuilt.ShouldFilterPackage('private').AndReturn(True)
210 full_packages_file = [ 212 pkgindex = SimplePackageIndex()
211 "foo: bar\n", "\n",
212 "CPV: public1\n", "foo: bar1\n", "\n",
213 "CPV: private\n", "foo: bar2\n", "\n",
214 "CPV: public2\n", "foo: bar3\n", "\n",
215 ]
216 private_packages_file = [
217 "foo: bar\n", "\n",
218 "CPV: public1\n", "foo: bar1\n", "\n",
219 "CPV: public2\n", "foo: bar3\n", "\n",
220 ]
221 self.mox.ReplayAll() 213 self.mox.ReplayAll()
222 temp_packages_file = tempfile.NamedTemporaryFile() 214 prebuilt.FilterPackagesIndex(pkgindex)
223 temp_packages_file.write("".join(full_packages_file)) 215 self.assertEqual(pkgindex.packages, PUBLIC_PACKAGES)
224 temp_packages_file.flush() 216 self.assertEqual(pkgindex.modified, True)
225 new_packages_file = prebuilt.FilterPackagesFile(temp_packages_file.name) 217
226 new_contents = open(new_packages_file.name).read() 218
227 self.assertEqual("".join(private_packages_file), new_contents) 219 class TestGrabPackageURLs(unittest.TestCase):
228 self.assertEqual("".join(private_packages_file), new_packages_file.read()) 220
229 new_packages_file.close() 221 def testEmptyIndex(self):
222 pkgindex = SimplePackageIndex(packages=False)
223 db = prebuilt.GrabPackageURLs(pkgindex)
224 self.assertEqual(db, {})
225
226 def testNormalIndex(self):
227 pkgindex = SimplePackageIndex()
228 db = prebuilt.GrabPackageURLs(pkgindex)
229 self.assertEqual(len(db), 3)
230 self.assertEqual(db['1'], 'http://www.example.com/public1.tbz2')
231 self.assertEqual(db['2'], 'http://www.example.com/foo.tgz')
232 self.assertEqual(db['3'], 'http://www.example.com/private.tbz2')
233
234 def testFailedGrabPackageURLs(self):
235 pkgindex = SimplePackageIndex(header=False)
236 self.assertRaises(KeyError, prebuilt.GrabPackageURLs, pkgindex)
237 pkgindex = SimplePackageIndex()
238 del pkgindex.packages[0]['CPV']
239 self.assertRaises(KeyError, prebuilt.GrabPackageURLs, pkgindex)
240 pkgindex = SimplePackageIndex()
241 del pkgindex.packages[0]['SHA1']
242 self.assertRaises(KeyError, prebuilt.GrabPackageURLs, pkgindex)
243
244
245 class TestFindDuplicates(unittest.TestCase):
246
247 def testEmptyIndex(self):
248 pkgindex = SimplePackageIndex(packages=False)
249 dupdb = {}
250 orig, dups = prebuilt.FindDuplicates(pkgindex, dupdb)
251 self.assertEqual(orig, [])
252 self.assertEqual(dups, [])
253
254 def testNormalIndex(self):
255 pkgindex = SimplePackageIndex()
256 dupdb = {}
257 orig, dups = prebuilt.FindDuplicates(pkgindex, dupdb)
258 self.assertEqual(orig, pkgindex.packages)
259 self.assertEqual(dups, [])
260
261 def testDuplicateIndex(self):
262 pkgindex = SimplePackageIndex()
263 dupdb = prebuilt.GrabPackageURLs(pkgindex)
264 orig, dups = prebuilt.FindDuplicates(pkgindex, dupdb)
265 self.assertEqual(orig, [])
266 expected = [(pkg, dupdb[pkg['SHA1']]) for pkg in pkgindex.packages]
267 self.assertEqual(dups, expected)
268
269 def testPartialIndex(self):
270 pkgindex = SimplePackageIndex()
271 dupdb = prebuilt.GrabPackageURLs(pkgindex)
272 del dupdb['3']
273 orig, dups = prebuilt.FindDuplicates(pkgindex, dupdb)
274 self.assertEqual(orig, [pkgindex.packages[2]])
275 expected = [(pkg, dupdb[pkg['SHA1']]) for pkg in pkgindex.packages[:-1]]
276 self.assertEqual(dups, expected)
277
278
279 class TestResolveDuplicates(unittest.TestCase):
280
281 def testNoDuplicates(self):
282 pkgindex = SimplePackageIndex()
283 prebuilt.ResolveDuplicates(pkgindex, [])
284 self.assertEqual(pkgindex.modified, False)
285 self.assertEqual(pkgindex.packages, SimplePackageIndex().packages)
286
287 def testDuplicates(self):
288 pkgindex = SimplePackageIndex()
289 dupdb = prebuilt.GrabPackageURLs(pkgindex)
290 _, dups = prebuilt.FindDuplicates(pkgindex, dupdb)
291 expected = copy.deepcopy(pkgindex.packages)
292 for pkg in expected:
293 pkg['PATH'] = os.path.basename(dupdb[pkg['SHA1']])
294 prebuilt.ResolveDuplicates(pkgindex, dups)
295 self.assertEqual(pkgindex.packages, expected)
296
297
298 class TestWritePackageIndex(unittest.TestCase):
299
300 def setUp(self):
301 self.mox = mox.Mox()
302
303 def tearDown(self):
304 self.mox.UnsetStubs()
305 self.mox.VerifyAll()
306
307 def testSimple(self):
308 pkgindex = SimplePackageIndex()
309 self.mox.StubOutWithMock(pkgindex, 'Write')
310 pkgindex.Write(mox.IgnoreArg())
311 self.mox.ReplayAll()
312 f = prebuilt.WritePackageIndex(pkgindex)
313 self.assertEqual(f.read(), '')
230 314
231 315
232 if __name__ == '__main__': 316 if __name__ == '__main__':
233 unittest.main() 317 unittest.main()
OLDNEW
« prebuilt.py ('K') | « prebuilt.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698