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

Side by Side Diff: prebuilt_unittest.py

Issue 5344002: Update cbuildbot.py and prebuilt.py to deduplicate preflight prebuilts. (Closed) Base URL: None@preflight_upload
Patch Set: Reset against cros/master Created 10 years 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
« no previous file with comments | « 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,
183 'overlay-x86-generic', 'make.conf'), 185 'overlay-x86-generic', 'make.conf'),
184 'arm-tegra2_vogue': os.path.join( 186 'arm-tegra2_vogue': os.path.join(
185 prebuilt._BINHOST_BASE_DIR, 187 prebuilt._BINHOST_BASE_DIR,
186 'overlay-variant-arm-tegra2-vogue', 'make.conf'),} 188 'overlay-variant-arm-tegra2-vogue', 'make.conf'),}
187 for target in targets: 189 for target in targets:
188 self.assertEqual(prebuilt.DetermineMakeConfFile(target), targets[target]) 190 self.assertEqual(prebuilt.DetermineMakeConfFile(target), targets[target])
189 191
190 def testDetermineMakeConfGarbage(self): 192 def testDetermineMakeConfGarbage(self):
191 """Ensure an exception is raised on bad input.""" 193 """Ensure an exception is raised on bad input."""
192 self.assertRaises(prebuilt.UnknownBoardFormat, prebuilt.DetermineMakeConfFil e, 194 self.assertRaises(prebuilt.UnknownBoardFormat, prebuilt.DetermineMakeConfFil e,
193 'asdfasdf') 195 'asdfasdf')
194 196
195 197
196 class TestPackagesFileFiltering(unittest.TestCase): 198 class TestPackagesFileFiltering(unittest.TestCase):
197 199
200 def testFilterPkgIndex(self):
201 pkgindex = SimplePackageIndex()
202 pkgindex.RemoveFilteredPackages(lambda pkg: pkg in PRIVATE_PACKAGES)
203 self.assertEqual(pkgindex.packages, PUBLIC_PACKAGES)
204 self.assertEqual(pkgindex.modified, True)
205
206
207 class TestPopulateDuplicateDB(unittest.TestCase):
208
209 def testEmptyIndex(self):
210 pkgindex = SimplePackageIndex(packages=False)
211 db = {}
212 pkgindex._PopulateDuplicateDB(db)
213 self.assertEqual(db, {})
214
215 def testNormalIndex(self):
216 pkgindex = SimplePackageIndex()
217 db = {}
218 pkgindex._PopulateDuplicateDB(db)
219 self.assertEqual(len(db), 3)
220 self.assertEqual(db['1'], 'http://www.example.com/public1.tbz2')
221 self.assertEqual(db['2'], 'http://www.example.com/foo.tgz')
222 self.assertEqual(db['3'], 'http://www.example.com/private.tbz2')
223
224 def testFailedPopulate(self):
225 db = {}
226 pkgindex = SimplePackageIndex(header=False)
227 self.assertRaises(KeyError, pkgindex._PopulateDuplicateDB, db)
228 pkgindex = SimplePackageIndex()
229 del pkgindex.packages[0]['CPV']
230 self.assertRaises(KeyError, pkgindex._PopulateDuplicateDB, db)
231 pkgindex = SimplePackageIndex()
232 del pkgindex.packages[0]['SHA1']
233 self.assertRaises(KeyError, pkgindex._PopulateDuplicateDB, db)
234
235
236 class TestResolveDuplicateUploads(unittest.TestCase):
237
238 def testEmptyList(self):
239 pkgindex = SimplePackageIndex()
240 pristine = SimplePackageIndex()
241 uploads = pkgindex.ResolveDuplicateUploads([])
242 self.assertEqual(uploads, pristine.packages)
243 self.assertEqual(pkgindex.packages, pristine.packages)
244 self.assertEqual(pkgindex.modified, False)
245
246 def testEmptyIndex(self):
247 pkgindex = SimplePackageIndex()
248 pristine = SimplePackageIndex()
249 empty = SimplePackageIndex(packages=False)
250 uploads = pkgindex.ResolveDuplicateUploads([empty])
251 self.assertEqual(uploads, pristine.packages)
252 self.assertEqual(pkgindex.packages, pristine.packages)
253 self.assertEqual(pkgindex.modified, False)
254
255 def testDuplicates(self):
256 pkgindex = SimplePackageIndex()
257 dup_pkgindex = SimplePackageIndex()
258 expected_pkgindex = SimplePackageIndex()
259 for pkg in expected_pkgindex.packages:
260 pkg.setdefault('PATH', pkg['CPV'] + '.tbz2')
261 uploads = pkgindex.ResolveDuplicateUploads([dup_pkgindex])
262 self.assertEqual(pkgindex.packages, expected_pkgindex.packages)
263
264
265 class TestWritePackageIndex(unittest.TestCase):
266
198 def setUp(self): 267 def setUp(self):
199 self.mox = mox.Mox() 268 self.mox = mox.Mox()
200 269
201 def tearDown(self): 270 def tearDown(self):
202 self.mox.UnsetStubs() 271 self.mox.UnsetStubs()
203 self.mox.VerifyAll() 272 self.mox.VerifyAll()
204 273
205 def testFilterAllPackages(self): 274 def testSimple(self):
206 self.mox.StubOutWithMock(prebuilt, 'ShouldFilterPackage') 275 pkgindex = SimplePackageIndex()
207 prebuilt.ShouldFilterPackage("public1").AndReturn(False) 276 self.mox.StubOutWithMock(pkgindex, 'Write')
208 prebuilt.ShouldFilterPackage("private").AndReturn(True) 277 pkgindex.Write(mox.IgnoreArg())
209 prebuilt.ShouldFilterPackage("public2").AndReturn(False)
210 full_packages_file = [
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() 278 self.mox.ReplayAll()
222 temp_packages_file = tempfile.NamedTemporaryFile() 279 f = pkgindex.WriteToNamedTemporaryFile()
223 temp_packages_file.write("".join(full_packages_file)) 280 self.assertEqual(f.read(), '')
224 temp_packages_file.flush()
225 new_packages_file = prebuilt.FilterPackagesFile(temp_packages_file.name)
226 new_contents = open(new_packages_file.name).read()
227 self.assertEqual("".join(private_packages_file), new_contents)
228 self.assertEqual("".join(private_packages_file), new_packages_file.read())
229 new_packages_file.close()
230 281
231 282
232 if __name__ == '__main__': 283 if __name__ == '__main__':
233 unittest.main() 284 unittest.main()
OLDNEW
« no previous file with comments | « prebuilt.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698