diff options
Diffstat (limited to 'obnam/objTests.py')
-rw-r--r-- | obnam/objTests.py | 522 |
1 files changed, 0 insertions, 522 deletions
diff --git a/obnam/objTests.py b/obnam/objTests.py deleted file mode 100644 index f6c333be..00000000 --- a/obnam/objTests.py +++ /dev/null @@ -1,522 +0,0 @@ -# Copyright (C) 2006, 2007, 2008 Lars Wirzenius <liw@iki.fi> -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - -"""Unit tests for obnam.obj.""" - - -import os -import unittest - - -from obnam.obj import * -import obnam - - -class ObjectKindNameTests(unittest.TestCase): - - def test(self): - self.failUnlessEqual(kind_name(-12765), "UNKNOWN") - self.failUnlessEqual(kind_name(FILEPART), "FILEPART") - self.failUnlessEqual(kind_name(GEN), "GEN") - self.failUnlessEqual(kind_name(SIG), "SIG") - self.failUnlessEqual(kind_name(HOST), "HOST") - self.failUnlessEqual(kind_name(FILECONTENTS), "FILECONTENTS") - self.failUnlessEqual(kind_name(FILELIST), "FILELIST") - self.failUnlessEqual(kind_name(DELTA), "DELTA") - self.failUnlessEqual(kind_name(DELTAPART), "DELTAPART") - self.failUnlessEqual(kind_name(DIR), "DIR") - self.failUnlessEqual(kind_name(FILEGROUP), "FILEGROUP") - - -class ObjectIdTests(unittest.TestCase): - - def testHasCorrectProperties(self): - id = obnam.obj.object_id_new() - self.failUnlessEqual(type(id), type("")) - - -class StorageObjectTests(unittest.TestCase): - - components = [ - obnam.cmp.Component(obnam.cmp.OBJID, "pink"), - obnam.cmp.Component(obnam.cmp.OBJKIND, - obnam.varint.encode(obnam.obj.HOST)), - obnam.cmp.Component(0xdeadbeef, "hello"), - obnam.cmp.Component(0xcafebabe, "world"), - ] - - def setUp(self): - self.o = obnam.obj.StorageObject(components=self.components) - - def testInitializesComponentListCorrectlyFromComponents(self): - self.failUnlessEqual(len(self.o.get_components()), - len(self.components)) - - def testInitalizesIdCorrectlyFromComponents(self): - self.failUnlessEqual(self.o.get_id(), "pink") - - def testInitalizesKindCorrectlyFromComponents(self): - self.failUnlessEqual(self.o.get_kind(), obnam.obj.HOST) - - def testInitializesIdCorrectlyFromArguments(self): - o = obnam.obj.StorageObject(id="pink") - self.failUnlessEqual(o.get_id(), "pink") - - def testEncodesAndDecodesToIdenticalObject(self): - o = obnam.obj.StorageObject(components=self.components) - encoded = o.encode() - o2 = obnam.obj.decode(encoded) - encoded2 = o2.encode() - self.failUnlessEqual(encoded, encoded2) - - def testAddsComponentCorrectly(self): - c = obnam.cmp.Component(obnam.cmp.FILENAME, "pretty") - self.o.add(c) - self.failUnless(self.o.find_by_kind(obnam.cmp.FILENAME), [c]) - - -class ObjectQueueTests(unittest.TestCase): - - def testCreate(self): - oq = obnam.obj.ObjectQueue() - self.failUnlessEqual(oq.combined_size(), 0) - - def testAdd(self): - oq = obnam.obj.ObjectQueue() - oq.add("xx", "abc") - self.failUnlessEqual(oq.combined_size(), 3) - - def testSize(self): - oq = obnam.obj.ObjectQueue() - self.failUnless(oq.is_empty()) - oq.add("xx", "abc") - self.failUnlessEqual(oq.combined_size(), 3) - oq.add("yy", "abc") - self.failUnlessEqual(oq.combined_size(), 6) - - def testClear(self): - oq = obnam.obj.ObjectQueue() - oq_orig = oq - self.failUnless(oq.is_empty()) - oq.clear() - self.failUnlessEqual(oq.combined_size(), 0) - oq.add("xx", "abc") - self.failUnlessEqual(oq.combined_size(), 3) - oq.clear() - self.failUnless(oq.is_empty()) - self.failUnless(oq == oq_orig) - - -class BlockWithoutCookieTests(unittest.TestCase): - - def setUp(self): - self.e = obnam.obj.BlockWithoutCookie("\x01\x02\x03") - - def testIncludesBlockHexDumpInMessage(self): - self.failUnless("01 02 03" in str(self.e)) - - -class BlockCreateTests(unittest.TestCase): - - def testDecodeInvalidObject(self): - self.failUnlessRaises(obnam.obj.BlockWithoutCookie, - obnam.obj.block_decode, "pink") - - def testDecodeEmptyBlock(self): - self.failUnlessRaises(obnam.obj.EmptyBlock, - obnam.obj.block_decode, obnam.obj.BLOCK_COOKIE) - - def testEmptyObjectQueue(self): - oq = obnam.obj.ObjectQueue() - block = oq.as_block("blkid") - list = obnam.obj.block_decode(block) - self.failUnlessEqual( - obnam.cmp.first_string_by_kind(list, obnam.cmp.BLKID), - "blkid") - self.failUnlessEqual(len(list), 1) - self.failUnlessEqual(oq.ids(), []) - - def testObjectQueue(self): - o = obnam.obj.StorageObject(id="pink") - o.add(obnam.cmp.Component(2, "pretty")) - oq = obnam.obj.ObjectQueue() - oq.add("pink", o.encode()) - block = oq.as_block("blkid") - - list = obnam.obj.block_decode(block) - self.failUnlessEqual( - obnam.cmp.first_string_by_kind(list, obnam.cmp.BLKID), - "blkid") - self.failUnlessEqual(len(list), 2) - o2 = obnam.cmp.first_by_kind(list, obnam.cmp.OBJECT) - self.failUnlessEqual(o.first_string_by_kind(2), "pretty") - self.failUnlessEqual(oq.ids(), ["pink"]) - - -class GenerationTests(unittest.TestCase): - - def testEncodeDecode(self): - id1 = "pink" - fl1 = "pretty" - dirs1 = ["dir1", "dir2"] - fg1 = ["fg1", "fg2"] - start1 = 12765 - end1 = 37337 - gen = obnam.obj.GenerationObject(id=id1, filelist_id=fl1, - dirrefs=dirs1, filegrouprefs=fg1, - start=start1, end=end1).encode() - (id2, fl2, dirs2, fg2, start2, end2) = generation_object_decode(gen) - self.failUnlessEqual(id1, id2) - self.failUnlessEqual(fl1, fl2) - self.failUnlessEqual(dirs1, dirs2) - self.failUnlessEqual(fg1, fg2) - self.failUnlessEqual(start1, start2) - self.failUnlessEqual(end1, end2) - - def setUp(self): - self.gen = GenerationObject(id="objid", filelist_id="filelistref", - dirrefs=["dir2", "dir1"], - filegrouprefs=["fg2", "fg1"], - start=123, end=456) - - def testSetsFilelistRefCorrectly(self): - self.failUnlessEqual(self.gen.get_filelistref(), "filelistref") - - def testSetsDirRefsCorrectly(self): - self.failUnlessEqual(sorted(self.gen.get_dirrefs()), - sorted(["dir1", "dir2"])) - - def testSetsFileGroupRefsCorrectly(self): - self.failUnlessEqual(sorted(self.gen.get_filegrouprefs()), - sorted(["fg1", "fg2"])) - - def testSetsStartTimeCorrectly(self): - self.failUnlessEqual(self.gen.get_start_time(), 123) - - def testSetsEndTimeCorrectly(self): - self.failUnlessEqual(self.gen.get_end_time(), 456) - - -class OldStorageObjectTests(unittest.TestCase): - - def testCreateSignatureObject(self): - context = obnam.context.Context() - id = "pink" - sig = obnam.rsync.compute_signature(context, "Makefile") - sig_object = obnam.obj.SignatureObject(id=id, sigdata=sig) - encoded = sig_object.encode() - o = obnam.obj.decode(encoded) - self.failUnlessEqual(o.get_id(), "pink") - self.failUnlessEqual(o.get_kind(), obnam.obj.SIG) - self.failUnlessEqual(len(o.get_components()), 1+2) - self.failUnlessEqual(o.first_string_by_kind(obnam.cmp.SIGDATA), sig) - - def testCreateDeltaObjectWithContRef(self): - id = "pink" - deltapart_ref = "xyzzy" - do = obnam.obj.DeltaObject(id=id, deltapart_refs=[deltapart_ref], - cont_ref="pretty") - encoded = do.encode() - o = obnam.obj.decode(encoded) - self.failUnlessEqual(o.get_id(), "pink") - self.failUnlessEqual(o.get_kind(), obnam.obj.DELTA) - self.failUnlessEqual(len(o.get_components()), 2+2) - self.failUnlessEqual(o.first_string_by_kind(obnam.cmp.DELTAPARTREF), - deltapart_ref) - self.failUnlessEqual(o.first_string_by_kind(obnam.cmp.CONTREF), - "pretty") - - def testCreateDeltaObjectWithDeltaRef(self): - id = "pink" - deltapart_ref = "xyzzy" - do = obnam.obj.DeltaObject(id=id, deltapart_refs=[deltapart_ref], - delta_ref="pretty") - encoded = do.encode() - o = obnam.obj.decode(encoded) - self.failUnlessEqual(o.get_id(), "pink") - self.failUnlessEqual(o.get_kind(), obnam.obj.DELTA) - self.failUnlessEqual(len(o.get_components()), 2+2) - self.failUnlessEqual(o.first_string_by_kind(obnam.cmp.DELTAPARTREF), - deltapart_ref) - self.failUnlessEqual(o.first_string_by_kind(obnam.cmp.DELTAREF), - "pretty") - - -class HostBlockTests(unittest.TestCase): - - def testEncodeDecode(self): - host_id = "pink" - gen_ids = ["pretty", "beautiful"] - map_ids = ["black", "box"] - contmap_ids = ["tilu", "lii"] - host = obnam.obj.HostBlockObject(host_id=host_id, gen_ids=gen_ids, - map_block_ids=map_ids, - contmap_block_ids=contmap_ids) - host = host.encode() - self.failUnless(host.startswith(obnam.obj.BLOCK_COOKIE)) - host2 = obnam.obj.create_host_from_block(host) - self.failUnlessEqual(host_id, host2.get_id()) - self.failUnlessEqual(gen_ids, host2.get_generation_ids()) - self.failUnlessEqual(map_ids, host2.get_map_block_ids()) - self.failUnlessEqual(contmap_ids, host2.get_contmap_block_ids()) - - def testFormatVersion(self): - encoded = obnam.obj.HostBlockObject(host_id="pink", gen_ids=[], - map_block_ids=[], - contmap_block_ids=[]).encode() - decoded = obnam.obj.block_decode(encoded) - c = obnam.cmp.first_by_kind(decoded, obnam.cmp.OBJECT) - id = c.first_string_by_kind(obnam.cmp.OBJID) - self.failUnlessEqual(id, "pink") - ver = c.first_string_by_kind(obnam.cmp.FORMATVERSION) - self.failUnlessEqual(ver, "1") - - def make_block(self, gen_ids=None, map_ids=None, contmap_ids=None): - host = obnam.obj.HostBlockObject(host_id="pink", gen_ids=gen_ids, - map_block_ids=map_ids, - contmap_block_ids=contmap_ids) - return host.encode() - - def testReturnsEmtpyListForBlockWithNoGenerations(self): - block = self.make_block() - host = obnam.obj.create_host_from_block(block) - self.failUnlessEqual(host.get_generation_ids(), []) - - def testReturnsCorrectListForBlockWithSomeGenerations(self): - block = self.make_block(gen_ids=["pretty", "black"]) - host = obnam.obj.create_host_from_block(block) - self.failUnlessEqual(host.get_generation_ids(), ["pretty", "black"]) - - def testReturnsEmtpyListForBlockWithNoMaps(self): - block = self.make_block() - host = obnam.obj.create_host_from_block(block) - self.failUnlessEqual(host.get_map_block_ids(), []) - - def testReturnsCorrectListForBlockWithSomeMaps(self): - block = self.make_block(map_ids=["pretty", "black"]) - host = obnam.obj.create_host_from_block(block) - self.failUnlessEqual(host.get_map_block_ids(), ["pretty", "black"]) - - def testReturnsEmtpyListForBlockWithNoContentMaps(self): - block = self.make_block() - host = obnam.obj.create_host_from_block(block) - self.failUnlessEqual(host.get_contmap_block_ids(), []) - - def testReturnsCorrectListForBlockWithSomeContentMaps(self): - block = self.make_block(contmap_ids=["pretty", "black"]) - host = obnam.obj.create_host_from_block(block) - self.failUnlessEqual(host.get_contmap_block_ids(), - ["pretty", "black"]) - - -class GetComponentTests(unittest.TestCase): - - def setUp(self): - self.o = obnam.obj.StorageObject([ - obnam.cmp.Component(1, "pink"), - obnam.cmp.Component(2, "pretty"), - obnam.cmp.Component(3, "red"), - obnam.cmp.Component(3, "too"), - ]) - - def testGetByKind(self): - find = lambda t: \ - [c.get_string_value() for c in self.o.find_by_kind(t)] - self.failUnlessEqual(find(1), ["pink"]) - self.failUnlessEqual(find(2), ["pretty"]) - self.failUnlessEqual(find(3), ["red", "too"]) - self.failUnlessEqual(find(0), []) - - def testGetStringsByKind(self): - find = lambda t: self.o.find_strings_by_kind(t) - self.failUnlessEqual(find(1), ["pink"]) - self.failUnlessEqual(find(2), ["pretty"]) - self.failUnlessEqual(find(3), ["red", "too"]) - self.failUnlessEqual(find(0), []) - - def helper(self, wanted_kind): - c = self.o.first_by_kind(wanted_kind) - if c: - return c.get_string_value() - else: - return None - - def testGetFirstByKind(self): - self.failUnlessEqual(self.helper(1), "pink") - self.failUnlessEqual(self.helper(2), "pretty") - self.failUnlessEqual(self.helper(3), "red") - self.failUnlessEqual(self.helper(0), None) - - def testGetFirstStringByKind(self): - find = lambda t: self.o.first_string_by_kind(t) - self.failUnlessEqual(find(1), "pink") - self.failUnlessEqual(find(2), "pretty") - self.failUnlessEqual(find(3), "red") - self.failUnlessEqual(find(0), None) - - def testGetVarintsByKind(self): - numbers = range(1024) - components = [obnam.cmp.Component(0, obnam.varint.encode(i)) - for i in numbers] - o = obnam.obj.StorageObject(components=components) - self.failUnlessEqual(o.find_varints_by_kind(0), numbers) - - def testGetFirstSVarintByKind(self): - numbers = range(0, 1024, 17) - components = [obnam.cmp.Component(i, obnam.varint.encode(i)) - for i in numbers] - o = obnam.obj.StorageObject(components=components) - for i in numbers: - self.failUnlessEqual(o.first_varint_by_kind(i), i) - self.failUnlessEqual(o.first_varint_by_kind(-1), None) - - -class DirObjectTests(unittest.TestCase): - - def setUp(self): - self.stat = os.stat(".") - self.dir = DirObject(id="pink", name="name", stat=self.stat, - dirrefs=["dir2", "dir1"], - filegrouprefs=["fg2", "fg1"]) - - def testSetsNameCorrectly(self): - self.failUnlessEqual(self.dir.get_name(), "name") - - def testSetsStatCorrectly(self): - self.failUnlessEqual(self.dir.get_stat(), self.stat) - - def testSetsDirrefsCorrectly(self): - self.failUnlessEqual(sorted(self.dir.get_dirrefs()), - sorted(["dir1", "dir2"])) - - def testSetsFilegrouprefsCorrectly(self): - self.failUnlessEqual(sorted(self.dir.get_filegrouprefs()), - sorted(["fg1", "fg2"])) - - -class FileGroupObjectTests(unittest.TestCase): - - def setUp(self): - stat = os.stat("README") - self.files = [ - ("pink", stat, "pink_contref", "pink_sigref", None), - ("pretty", stat, None, "pretty_sigref", "pretty_deltaref"), - ("black", stat, "black_contref", "black_sigref", None), - ] - self.names = [x[0] for x in self.files] - self.fg = FileGroupObject(id="objid") - for name, stat, contref, sigref, deltaref in self.files: - self.fg.add_file(name, stat, contref, sigref, deltaref) - - def testReturnsNoneIfSoughtFileNotFound(self): - self.failUnlessEqual(self.fg.get_file("xxx"), None) - - def testSetsNamesCorrectly(self): - self.failUnlessEqual(sorted(self.fg.get_names()), sorted(self.names)) - - def testSetsStatCorrectly(self): - for x in self.files: - self.failUnlessEqual(x[1], self.fg.get_stat(x[0])) - - def testSetsContentRefCorrectly(self): - for x in self.files: - self.failUnlessEqual(x[2], self.fg.get_contref(x[0])) - - def testSetsSigRefCorrectly(self): - for x in self.files: - self.failUnlessEqual(x[3], self.fg.get_sigref(x[0])) - - def testSetsDeltaRefCorrectly(self): - for x in self.files: - self.failUnlessEqual(x[4], self.fg.get_deltaref(x[0])) - - -class StorageObjectFactoryTests(unittest.TestCase): - - def setUp(self): - self.factory = StorageObjectFactory() - - def make_component(self, objkind): - list = [] - - list.append(obnam.cmp.Component(obnam.cmp.OBJID, "objid")) - list.append(obnam.cmp.Component(obnam.cmp.OBJKIND, - obnam.varint.encode(objkind))) - - - if objkind == obnam.obj.GEN: - list.append(obnam.cmp.Component(obnam.cmp.GENSTART, - obnam.varint.encode(1))) - list.append(obnam.cmp.Component(obnam.cmp.GENEND, - obnam.varint.encode(2))) - - return list - - def make_object(self, objkind): - return self.factory.get_object(self.make_component(objkind)) - - def testCreatesFilePartObjectCorrectly(self): - o = self.make_object(obnam.obj.FILEPART) - self.failUnlessEqual(type(o), obnam.obj.FilePartObject) - - def testCreatesGenerationObjectCorrectly(self): - o = self.make_object(obnam.obj.GEN) - self.failUnlessEqual(type(o), obnam.obj.GenerationObject) - self.failUnlessEqual(o.get_start_time(), 1) - self.failUnlessEqual(o.get_end_time(), 2) - - def testCreatesSignatureObjectCorrectly(self): - o = self.make_object(obnam.obj.SIG) - self.failUnlessEqual(type(o), obnam.obj.SignatureObject) - - def testCreatesHostBlockObjectCorrectly(self): - o = self.make_object(obnam.obj.HOST) - self.failUnlessEqual(type(o), obnam.obj.HostBlockObject) - - def testCreatesHostBlockObjectCorrectlyFromParsedBlock(self): - host = obnam.obj.HostBlockObject(host_id="pink") - block = host.encode() - host2 = obnam.obj.create_host_from_block(block) - self.failUnlessEqual(host.get_id(), host2.get_id()) - - def testCreatesFileContentsObjectCorrectly(self): - o = self.make_object(obnam.obj.FILECONTENTS) - self.failUnlessEqual(type(o), obnam.obj.FileContentsObject) - - def testCreatesFileListObjectCorrectly(self): - o = self.make_object(obnam.obj.FILELIST) - self.failUnlessEqual(type(o), obnam.obj.FileListObject) - - def testCreatesDeltaObjectCorrectly(self): - o = self.make_object(obnam.obj.DELTA) - self.failUnlessEqual(type(o), obnam.obj.DeltaObject) - - def testCreatesDeltaPartObjectCorrectly(self): - o = self.make_object(obnam.obj.DELTAPART) - self.failUnlessEqual(type(o), obnam.obj.DeltaPartObject) - - def testCreatesDirObjectCorrectly(self): - o = self.make_object(obnam.obj.DIR) - self.failUnlessEqual(type(o), obnam.obj.DirObject) - - def testCreatesFileGroupObjectCorrectly(self): - o = self.make_object(obnam.obj.FILEGROUP) - self.failUnlessEqual(type(o), obnam.obj.FileGroupObject) - - def testRaisesExceptionForUnknownObjectKind(self): - self.failUnlessRaises(obnam.ObnamException, - self.make_object, 0xdeadbeef) |