From: Brian Warner Date: Tue, 17 Apr 2007 00:15:44 +0000 (-0700) Subject: download: validate handling of missing sharehashes too X-Git-Tag: tahoe_v0.1.0-0-UNSTABLE~91 X-Git-Url: https://git.rkrishnan.org/listings/FOOURL?a=commitdiff_plain;h=2f5fb518485e30fddb3a88f9154d915cfd8977ab;p=tahoe-lafs%2Ftahoe-lafs.git download: validate handling of missing sharehashes too --- diff --git a/src/allmydata/test/test_encode.py b/src/allmydata/test/test_encode.py index eb311037..fcbcabca 100644 --- a/src/allmydata/test/test_encode.py +++ b/src/allmydata/test/test_encode.py @@ -94,6 +94,11 @@ class FakeBucketWriter: hashes = self.share_hashes[:] hashes[1] = (hashes[1][0], self.flip_bit(hashes[1][1])) return hashes + if self.mode == "missing sharehash": + # one sneaky attack would be to pretend we don't know our own + # sharehash, which could manage to frame someone else. + # download.py is supposed to guard against this case. + return [] return self.share_hashes @@ -256,3 +261,26 @@ class Roundtrip(unittest.TestCase): d.addBoth(_done) return d + def test_missing_sharehashes(self): + # the first 74 servers are missing their sharehashes, so the + # sharehash tree will not validate + modemap = dict([(i, "missing sharehash") + for i in range(74)] + + [(i, "good") + for i in range(74, 100)]) + return self.send_and_recover(100, bucket_modes=modemap) + + def test_missing_sharehashes_failure(self): + # the first 76 servers are missing their sharehashes, so the + # sharehash tree will not validate, and the download will fail + modemap = dict([(i, "missing sharehash") + for i in range(76)] + + [(i, "good") + for i in range(76, 100)]) + d = self.send_and_recover(100, bucket_modes=modemap) + def _done(res): + self.failUnless(isinstance(res, Failure)) + self.failUnless(res.check(download.NotEnoughPeersError)) + d.addBoth(_done) + return d +