From: Zooko O'Whielacronx Date: Tue, 10 Feb 2009 19:12:45 +0000 (-0700) Subject: immutable: repairer: add a simple test to exercise the "leftover" code path, fix... X-Git-Tag: allmydata-tahoe-1.3.0~44 X-Git-Url: https://git.rkrishnan.org/simplejson/components/com_hotproperty/somewhere?a=commitdiff_plain;h=ef1bfdd2bf4246a817b37db85cf2a46c346013d0;p=tahoe-lafs%2Ftahoe-lafs.git immutable: repairer: add a simple test to exercise the "leftover" code path, fix the bug (and rename the variable "leftover" to "extra") --- diff --git a/src/allmydata/immutable/repairer.py b/src/allmydata/immutable/repairer.py index 1fae5cd6..880188c8 100644 --- a/src/allmydata/immutable/repairer.py +++ b/src/allmydata/immutable/repairer.py @@ -139,9 +139,9 @@ class DownUpConnector(log.PrefixingLogMixin): res.append(nextbuf) ressize += len(nextbuf) if ressize > nrl: - leftover = ressize - nrl - self.bufs.appendleft(nextbuf[leftover:]) - res[-1] = nextbuf[:leftover] + extra = ressize - nrl + self.bufs.appendleft(nextbuf[:-extra]) + res[-1] = nextbuf[:-extra] self.bufsiz -= nrl if self.bufsiz < self.buflim and self.producer: self.producer.resumeProducing() diff --git a/src/allmydata/test/test_repairer.py b/src/allmydata/test/test_repairer.py index cea1713c..d15f2eae 100644 --- a/src/allmydata/test/test_repairer.py +++ b/src/allmydata/test/test_repairer.py @@ -353,6 +353,20 @@ class DownUpConnector(unittest.TestCase): duc.write('\x02') return d + def test_leftovers(self): + duc = repairer.DownUpConnector() + duc.registerProducer(None, True) # just because you have to call registerProducer first + # case 1: total data in buf is < requested data at time of request + duc.write('\x01') + d = duc.read_encrypted(2, False) + def _then(data): + self.failUnlessEqual(len(data), 2) + self.failUnlessEqual(data[0], '\x01') + self.failUnlessEqual(data[1], '\x02') + d.addCallback(_then) + duc.write('\x02\0x03') + return d + class Repairer(common.ShareManglingMixin, unittest.TestCase): def test_test_code(self): # The following process of stashing the shares, running