immutable: repairer: add a simple test to exercise the "leftover" code path, fix the bug (and rename the variable "leftover" to "extra")

This commit is contained in:
Zooko O'Whielacronx 2009-02-10 12:12:45 -07:00
parent 3fa19973e4
commit ef1bfdd2bf
2 changed files with 17 additions and 3 deletions
src/allmydata

@ -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()

@ -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