mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2024-12-24 07:06:41 +00:00
test_hashtree.py: get full coverage for hashtree.py
This commit is contained in:
parent
30133a7cdf
commit
0ecb26ec44
@ -23,6 +23,8 @@ class Complete(unittest.TestCase):
|
|||||||
self.failUnlessEqual(ht.get_leaf(0), tagged_hash("tag", "0"))
|
self.failUnlessEqual(ht.get_leaf(0), tagged_hash("tag", "0"))
|
||||||
self.failUnlessRaises(IndexError, ht.get_leaf, 8)
|
self.failUnlessRaises(IndexError, ht.get_leaf, 8)
|
||||||
self.failUnlessEqual(ht.get_leaf_index(0), 7)
|
self.failUnlessEqual(ht.get_leaf_index(0), 7)
|
||||||
|
self.failUnlessRaises(IndexError, ht.parent, 0)
|
||||||
|
self.failUnlessRaises(IndexError, ht.needed_for, -1)
|
||||||
|
|
||||||
def test_needed_hashes(self):
|
def test_needed_hashes(self):
|
||||||
ht = make_tree(8)
|
ht = make_tree(8)
|
||||||
@ -82,8 +84,8 @@ class Incomplete(unittest.TestCase):
|
|||||||
iht = hashtree.IncompleteHashTree(6)
|
iht = hashtree.IncompleteHashTree(6)
|
||||||
|
|
||||||
current_hashes = list(iht)
|
current_hashes = list(iht)
|
||||||
|
# this should fail because there aren't enough hashes known
|
||||||
try:
|
try:
|
||||||
# this should fail because there aren't enough hashes known
|
|
||||||
iht.set_hashes(leaves={0: tagged_hash("tag", "0")})
|
iht.set_hashes(leaves={0: tagged_hash("tag", "0")})
|
||||||
except hashtree.NotEnoughHashesError:
|
except hashtree.NotEnoughHashesError:
|
||||||
pass
|
pass
|
||||||
@ -96,14 +98,23 @@ class Incomplete(unittest.TestCase):
|
|||||||
self.failUnlessEqual(iht.needed_hashes(0), set([8, 4, 2]))
|
self.failUnlessEqual(iht.needed_hashes(0), set([8, 4, 2]))
|
||||||
|
|
||||||
chain = {0: ht[0], 2: ht[2], 4: ht[4], 8: ht[8]}
|
chain = {0: ht[0], 2: ht[2], 4: ht[4], 8: ht[8]}
|
||||||
|
# this should fail because the leaf hash is just plain wrong
|
||||||
try:
|
try:
|
||||||
# this should fail because the leaf hash is just plain wrong
|
|
||||||
iht.set_hashes(chain, leaves={0: tagged_hash("bad tag", "0")})
|
iht.set_hashes(chain, leaves={0: tagged_hash("bad tag", "0")})
|
||||||
except hashtree.BadHashError:
|
except hashtree.BadHashError:
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
self.fail("didn't catch bad hash")
|
self.fail("didn't catch bad hash")
|
||||||
|
|
||||||
|
# this should fail because we give it conflicting hashes: one as an
|
||||||
|
# internal node, another as a leaf
|
||||||
|
try:
|
||||||
|
iht.set_hashes(chain, leaves={1: tagged_hash("bad tag", "1")})
|
||||||
|
except hashtree.BadHashError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
self.fail("didn't catch bad hash")
|
||||||
|
|
||||||
bad_chain = chain.copy()
|
bad_chain = chain.copy()
|
||||||
bad_chain[2] = ht[2] + "BOGUS"
|
bad_chain[2] = ht[2] + "BOGUS"
|
||||||
|
|
||||||
@ -130,6 +141,15 @@ class Incomplete(unittest.TestCase):
|
|||||||
except hashtree.BadHashError:
|
except hashtree.BadHashError:
|
||||||
self.fail("bad hash")
|
self.fail("bad hash")
|
||||||
|
|
||||||
|
# this should fail because we give it hashes that conflict with some
|
||||||
|
# that we added successfully before
|
||||||
|
try:
|
||||||
|
iht.set_hashes(leaves={1: tagged_hash("bad tag", "1")})
|
||||||
|
except hashtree.BadHashError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
self.fail("didn't catch bad hash")
|
||||||
|
|
||||||
# now that leaves 0 and 1 are known, some of the internal nodes are
|
# now that leaves 0 and 1 are known, some of the internal nodes are
|
||||||
# known
|
# known
|
||||||
self.failUnlessEqual(iht.needed_hashes(4), set([12, 6]))
|
self.failUnlessEqual(iht.needed_hashes(4), set([12, 6]))
|
||||||
|
Loading…
Reference in New Issue
Block a user