예제 #1
0
        def _read_data(version):
            c = consumer.MemoryConsumer()
            c2 = consumer.MemoryConsumer()
            d2 = defer.succeed(None)
            d2.addCallback(lambda ignored: version.read(c))
            d2.addCallback(lambda ignored:
                self.failUnlessEqual(expected, "".join(c.chunks)))

            d2.addCallback(lambda ignored: version.read(c2, offset=0,
                                                        size=len(expected)))
            d2.addCallback(lambda ignored:
                self.failUnlessEqual(expected, "".join(c2.chunks)))
            return d2
예제 #2
0
 def do_download(self, servermap, version=None):
     if version is None:
         version = servermap.best_recoverable_version()
     r = Retrieve(self._fn, self._storage_broker, servermap, version)
     c = consumer.MemoryConsumer()
     d = r.download(consumer=c)
     d.addCallback(lambda mc: "".join(mc.chunks))
     return d
예제 #3
0
 def _do_retrieve(servermap):
     self.failUnless(servermap.get_problems())
     self.failUnless("pubkey doesn't match fingerprint" in str(
         servermap.get_problems()[0]))
     ver = servermap.best_recoverable_version()
     r = Retrieve(self._fn, self._storage_broker, servermap, ver)
     c = consumer.MemoryConsumer()
     return r.download(c)
예제 #4
0
 def _read_data(version):
     c = consumer.MemoryConsumer()
     d2 = defer.succeed(None)
     for i in xrange(0, len(expected), step):
         d2.addCallback(lambda ignored, i=i: version.read(c, i, step))
     d2.addCallback(lambda ignored:
         self.failUnlessEqual(expected, "".join(c.chunks)))
     return d2
예제 #5
0
 def read_encrypted(self, length, hash_only):
     """Returns a deferred which eventually fires with the requested
     ciphertext, as a list of strings."""
     precondition(length) # please don't ask to read 0 bytes
     mc = consumer.MemoryConsumer()
     d = self._filenode.read(mc, self._offset, length)
     self._offset += length
     d.addCallback(lambda ign: mc.chunks)
     return d
예제 #6
0
    def download_to_data(self, fetch_privkey=False, progress=None):
        """
        I return a Deferred that fires with the contents of this
        readable object as a byte string.

        """
        c = consumer.MemoryConsumer(progress=progress)
        d = self.read(c, fetch_privkey=fetch_privkey)
        d.addCallback(lambda mc: "".join(mc.chunks))
        return d
예제 #7
0
 def _try_to_download_data(self):
     """
     I am an unserialized cousin of download_to_data; I am called
     from the children of modify() to download the data associated
     with this mutable version.
     """
     c = consumer.MemoryConsumer()
     # modify will almost certainly write, so we need the privkey.
     d = self._read(c, fetch_privkey=True)
     d.addCallback(lambda mc: "".join(mc.chunks))
     return d
예제 #8
0
 def _do_partial_read(self, version, name, expected, offset, length):
     c = consumer.MemoryConsumer()
     d = version.read(c, offset, length)
     if length is None:
         expected_range = expected[offset:]
     else:
         expected_range = expected[offset:offset+length]
     d.addCallback(lambda ignored: "".join(c.chunks))
     def _check(results):
         if results != expected_range:
             print "read([%d]+%s) got %d bytes, not %d" % \
                   (offset, length, len(results), len(expected_range))
             print "got: %s ... %s" % (results[:20], results[-20:])
             print "exp: %s ... %s" % (expected_range[:20], expected_range[-20:])
             self.fail("results[%s] != expected_range" % name)
         return version # daisy-chained to next call
     d.addCallback(_check)
     return d