Index: prebuilt_unittest.py |
diff --git a/prebuilt_unittest.py b/prebuilt_unittest.py |
index fe2387fbf71da63bf58d372869a8d4294f7ed313..9d26692ccf1e21fce3dee348902188d3896a4041 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.""" |
@@ -195,6 +197,73 @@ class TestPrebuilt(unittest.TestCase): |
class TestPackagesFileFiltering(unittest.TestCase): |
+ def testFilterPkgIndex(self): |
+ pkgindex = SimplePackageIndex() |
+ pkgindex.RemoveFilteredPackages(lambda pkg: pkg in PRIVATE_PACKAGES) |
+ self.assertEqual(pkgindex.packages, PUBLIC_PACKAGES) |
+ self.assertEqual(pkgindex.modified, True) |
+ |
+ |
+class TestPopulateDuplicateDB(unittest.TestCase): |
+ |
+ def testEmptyIndex(self): |
+ pkgindex = SimplePackageIndex(packages=False) |
+ db = {} |
+ pkgindex._PopulateDuplicateDB(db) |
+ self.assertEqual(db, {}) |
+ |
+ def testNormalIndex(self): |
+ pkgindex = SimplePackageIndex() |
+ db = {} |
+ pkgindex._PopulateDuplicateDB(db) |
+ 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 testFailedPopulate(self): |
+ db = {} |
+ pkgindex = SimplePackageIndex(header=False) |
+ self.assertRaises(KeyError, pkgindex._PopulateDuplicateDB, db) |
+ pkgindex = SimplePackageIndex() |
+ del pkgindex.packages[0]['CPV'] |
+ self.assertRaises(KeyError, pkgindex._PopulateDuplicateDB, db) |
+ pkgindex = SimplePackageIndex() |
+ del pkgindex.packages[0]['SHA1'] |
+ self.assertRaises(KeyError, pkgindex._PopulateDuplicateDB, db) |
+ |
+ |
+class TestResolveDuplicateUploads(unittest.TestCase): |
+ |
+ def testEmptyList(self): |
+ pkgindex = SimplePackageIndex() |
+ pristine = SimplePackageIndex() |
+ uploads = pkgindex.ResolveDuplicateUploads([]) |
+ self.assertEqual(uploads, pristine.packages) |
+ self.assertEqual(pkgindex.packages, pristine.packages) |
+ self.assertEqual(pkgindex.modified, False) |
+ |
+ def testEmptyIndex(self): |
+ pkgindex = SimplePackageIndex() |
+ pristine = SimplePackageIndex() |
+ empty = SimplePackageIndex(packages=False) |
+ uploads = pkgindex.ResolveDuplicateUploads([empty]) |
+ self.assertEqual(uploads, pristine.packages) |
+ self.assertEqual(pkgindex.packages, pristine.packages) |
+ self.assertEqual(pkgindex.modified, False) |
+ |
+ def testDuplicates(self): |
+ pkgindex = SimplePackageIndex() |
+ dup_pkgindex = SimplePackageIndex() |
+ expected_pkgindex = SimplePackageIndex() |
+ for pkg in expected_pkgindex.packages: |
+ pkg.setdefault('PATH', pkg['CPV'] + '.tbz2') |
+ uploads = pkgindex.ResolveDuplicateUploads([dup_pkgindex]) |
+ self.assertEqual(pkgindex.packages, expected_pkgindex.packages) |
+ |
+ |
+class TestWritePackageIndex(unittest.TestCase): |
+ |
def setUp(self): |
self.mox = mox.Mox() |
@@ -202,31 +271,13 @@ class TestPackagesFileFiltering(unittest.TestCase): |
self.mox.UnsetStubs() |
self.mox.VerifyAll() |
- def testFilterAllPackages(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", |
- ] |
+ 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 = pkgindex.WriteToNamedTemporaryFile() |
+ self.assertEqual(f.read(), '') |
if __name__ == '__main__': |