| Index: prebuilt_unittest.py
|
| diff --git a/prebuilt_unittest.py b/prebuilt_unittest.py
|
| index fe2387fbf71da63bf58d372869a8d4294f7ed313..5d4e106ba66e2835a405d6091e1566896519911e 100755
|
| --- a/prebuilt_unittest.py
|
| +++ b/prebuilt_unittest.py
|
| @@ -3,6 +3,7 @@
|
| # Use of this source code is governed by a BSD-style license that can be
|
| # found in the LICENSE file.
|
|
|
| +import copy
|
| import mox
|
| import os
|
| import prebuilt
|
| @@ -10,6 +11,21 @@ import shutil
|
| import tempfile
|
| import unittest
|
| from chromite.lib import cros_build_lib
|
| +from chromite.lib.binpkg import PackageIndex
|
| +
|
| +PUBLIC_PACKAGES = [{'CPV': 'public1', 'SHA1': '1'},
|
| + {'CPV': 'public2', 'SHA1': '2', 'PATH': 'foo.tgz'}]
|
| +PRIVATE_PACKAGES = [{'CPV': 'private', 'SHA1': '3'}]
|
| +
|
| +
|
| +def SimplePackageIndex(header=True, packages=True):
|
| + pkgindex = PackageIndex()
|
| + if header:
|
| + pkgindex.header['URI'] = 'http://www.example.com'
|
| + if packages:
|
| + pkgindex.packages = copy.deepcopy(PUBLIC_PACKAGES + PRIVATE_PACKAGES)
|
| + return pkgindex
|
| +
|
|
|
| class TestUpdateFile(unittest.TestCase):
|
|
|
| @@ -137,14 +153,6 @@ class TestPrebuiltFilters(unittest.TestCase):
|
|
|
|
|
| class TestPrebuilt(unittest.TestCase):
|
| - fake_path = '/b/cbuild/build/chroot/build/x86-dogfood/'
|
| - bin_package_mock = ['packages/x11-misc/shared-mime-info-0.70.tbz2',
|
| - 'packages/x11-misc/util-macros-1.5.0.tbz2',
|
| - 'packages/x11-misc/xbitmaps-1.1.0.tbz2',
|
| - 'packages/x11-misc/read-edid-1.4.2.tbz2',
|
| - 'packages/x11-misc/xdg-utils-1.0.2-r3.tbz2']
|
| -
|
| - files_to_sync = [os.path.join(fake_path, file) for file in bin_package_mock]
|
|
|
| def setUp(self):
|
| self.mox = mox.Mox()
|
| @@ -153,23 +161,17 @@ class TestPrebuilt(unittest.TestCase):
|
| self.mox.UnsetStubs()
|
| self.mox.VerifyAll()
|
|
|
| - def _generate_dict_results(self, gs_bucket_path):
|
| - """
|
| - Generate a dictionary result similar to GenerateUploadDict
|
| - """
|
| - results = {}
|
| - for entry in self.files_to_sync:
|
| - results[entry] = os.path.join(
|
| - gs_bucket_path, entry.replace(self.fake_path, '').lstrip('/'))
|
| - return results
|
| -
|
| def testGenerateUploadDict(self):
|
| + base_local_path = '/b/cbuild/build/chroot/build/x86-dogfood/'
|
| gs_bucket_path = 'gs://chromeos-prebuilt/host/version'
|
| - self.mox.StubOutWithMock(cros_build_lib, 'ListFiles')
|
| - cros_build_lib.ListFiles(self.fake_path).AndReturn(self.files_to_sync)
|
| + local_path = os.path.join(base_local_path, 'public1.tbz2')
|
| + self.mox.StubOutWithMock(prebuilt.os.path, 'exists')
|
| + prebuilt.os.path.exists(local_path).AndReturn(True)
|
| self.mox.ReplayAll()
|
| - result = prebuilt.GenerateUploadDict(self.fake_path, gs_bucket_path)
|
| - self.assertEqual(result, self._generate_dict_results(gs_bucket_path))
|
| + pkgs = [{ 'CPV': 'public1' }]
|
| + result = prebuilt.GenerateUploadDict(base_local_path, gs_bucket_path, pkgs)
|
| + expected = { local_path: gs_bucket_path + '/public1.tbz2' }
|
| + self.assertEqual(result, expected)
|
|
|
| def testFailonUploadFail(self):
|
| """Make sure we fail if one of the upload processes fail."""
|
| @@ -202,31 +204,113 @@ class TestPackagesFileFiltering(unittest.TestCase):
|
| self.mox.UnsetStubs()
|
| self.mox.VerifyAll()
|
|
|
| - def testFilterAllPackages(self):
|
| + def testFilterPkgIndex(self):
|
| self.mox.StubOutWithMock(prebuilt, 'ShouldFilterPackage')
|
| - prebuilt.ShouldFilterPackage("public1").AndReturn(False)
|
| - prebuilt.ShouldFilterPackage("private").AndReturn(True)
|
| - prebuilt.ShouldFilterPackage("public2").AndReturn(False)
|
| - full_packages_file = [
|
| - "foo: bar\n", "\n",
|
| - "CPV: public1\n", "foo: bar1\n", "\n",
|
| - "CPV: private\n", "foo: bar2\n", "\n",
|
| - "CPV: public2\n", "foo: bar3\n", "\n",
|
| - ]
|
| - private_packages_file = [
|
| - "foo: bar\n", "\n",
|
| - "CPV: public1\n", "foo: bar1\n", "\n",
|
| - "CPV: public2\n", "foo: bar3\n", "\n",
|
| - ]
|
| + prebuilt.ShouldFilterPackage('public1').AndReturn(False)
|
| + prebuilt.ShouldFilterPackage('public2').AndReturn(False)
|
| + prebuilt.ShouldFilterPackage('private').AndReturn(True)
|
| + pkgindex = SimplePackageIndex()
|
| + self.mox.ReplayAll()
|
| + prebuilt.FilterPackagesIndex(pkgindex)
|
| + self.assertEqual(pkgindex.packages, PUBLIC_PACKAGES)
|
| + self.assertEqual(pkgindex.modified, True)
|
| +
|
| +
|
| +class TestGrabPackageURLs(unittest.TestCase):
|
| +
|
| + def testEmptyIndex(self):
|
| + pkgindex = SimplePackageIndex(packages=False)
|
| + db = prebuilt.GrabPackageURLs(pkgindex)
|
| + self.assertEqual(db, {})
|
| +
|
| + def testNormalIndex(self):
|
| + pkgindex = SimplePackageIndex()
|
| + db = prebuilt.GrabPackageURLs(pkgindex)
|
| + self.assertEqual(len(db), 3)
|
| + self.assertEqual(db['1'], 'http://www.example.com/public1.tbz2')
|
| + self.assertEqual(db['2'], 'http://www.example.com/foo.tgz')
|
| + self.assertEqual(db['3'], 'http://www.example.com/private.tbz2')
|
| +
|
| + def testFailedGrabPackageURLs(self):
|
| + pkgindex = SimplePackageIndex(header=False)
|
| + self.assertRaises(KeyError, prebuilt.GrabPackageURLs, pkgindex)
|
| + pkgindex = SimplePackageIndex()
|
| + del pkgindex.packages[0]['CPV']
|
| + self.assertRaises(KeyError, prebuilt.GrabPackageURLs, pkgindex)
|
| + pkgindex = SimplePackageIndex()
|
| + del pkgindex.packages[0]['SHA1']
|
| + self.assertRaises(KeyError, prebuilt.GrabPackageURLs, pkgindex)
|
| +
|
| +
|
| +class TestFindDuplicates(unittest.TestCase):
|
| +
|
| + def testEmptyIndex(self):
|
| + pkgindex = SimplePackageIndex(packages=False)
|
| + dupdb = {}
|
| + orig, dups = prebuilt.FindDuplicates(pkgindex, dupdb)
|
| + self.assertEqual(orig, [])
|
| + self.assertEqual(dups, [])
|
| +
|
| + def testNormalIndex(self):
|
| + pkgindex = SimplePackageIndex()
|
| + dupdb = {}
|
| + orig, dups = prebuilt.FindDuplicates(pkgindex, dupdb)
|
| + self.assertEqual(orig, pkgindex.packages)
|
| + self.assertEqual(dups, [])
|
| +
|
| + def testDuplicateIndex(self):
|
| + pkgindex = SimplePackageIndex()
|
| + dupdb = prebuilt.GrabPackageURLs(pkgindex)
|
| + orig, dups = prebuilt.FindDuplicates(pkgindex, dupdb)
|
| + self.assertEqual(orig, [])
|
| + expected = [(pkg, dupdb[pkg['SHA1']]) for pkg in pkgindex.packages]
|
| + self.assertEqual(dups, expected)
|
| +
|
| + def testPartialIndex(self):
|
| + pkgindex = SimplePackageIndex()
|
| + dupdb = prebuilt.GrabPackageURLs(pkgindex)
|
| + del dupdb['3']
|
| + orig, dups = prebuilt.FindDuplicates(pkgindex, dupdb)
|
| + self.assertEqual(orig, [pkgindex.packages[2]])
|
| + expected = [(pkg, dupdb[pkg['SHA1']]) for pkg in pkgindex.packages[:-1]]
|
| + self.assertEqual(dups, expected)
|
| +
|
| +
|
| +class TestResolveDuplicates(unittest.TestCase):
|
| +
|
| + def testNoDuplicates(self):
|
| + pkgindex = SimplePackageIndex()
|
| + prebuilt.ResolveDuplicates(pkgindex, [])
|
| + self.assertEqual(pkgindex.modified, False)
|
| + self.assertEqual(pkgindex.packages, SimplePackageIndex().packages)
|
| +
|
| + def testDuplicates(self):
|
| + pkgindex = SimplePackageIndex()
|
| + dupdb = prebuilt.GrabPackageURLs(pkgindex)
|
| + _, dups = prebuilt.FindDuplicates(pkgindex, dupdb)
|
| + expected = copy.deepcopy(pkgindex.packages)
|
| + for pkg in expected:
|
| + pkg['PATH'] = os.path.basename(dupdb[pkg['SHA1']])
|
| + prebuilt.ResolveDuplicates(pkgindex, dups)
|
| + self.assertEqual(pkgindex.packages, expected)
|
| +
|
| +
|
| +class TestWritePackageIndex(unittest.TestCase):
|
| +
|
| + def setUp(self):
|
| + self.mox = mox.Mox()
|
| +
|
| + def tearDown(self):
|
| + self.mox.UnsetStubs()
|
| + self.mox.VerifyAll()
|
| +
|
| + def testSimple(self):
|
| + pkgindex = SimplePackageIndex()
|
| + self.mox.StubOutWithMock(pkgindex, 'Write')
|
| + pkgindex.Write(mox.IgnoreArg())
|
| self.mox.ReplayAll()
|
| - temp_packages_file = tempfile.NamedTemporaryFile()
|
| - temp_packages_file.write("".join(full_packages_file))
|
| - temp_packages_file.flush()
|
| - new_packages_file = prebuilt.FilterPackagesFile(temp_packages_file.name)
|
| - new_contents = open(new_packages_file.name).read()
|
| - self.assertEqual("".join(private_packages_file), new_contents)
|
| - self.assertEqual("".join(private_packages_file), new_packages_file.read())
|
| - new_packages_file.close()
|
| + f = prebuilt.WritePackageIndex(pkgindex)
|
| + self.assertEqual(f.read(), '')
|
|
|
|
|
| if __name__ == '__main__':
|
|
|