]> git.rkrishnan.org Git - tahoe-lafs/tahoe-lafs.git/commitdiff
test_mutable: exercise short reads too
authorBrian Warner <warner@allmydata.com>
Tue, 11 Mar 2008 01:08:23 +0000 (18:08 -0700)
committerBrian Warner <warner@allmydata.com>
Tue, 11 Mar 2008 01:08:23 +0000 (18:08 -0700)
src/allmydata/mutable.py
src/allmydata/test/test_mutable.py

index 188075fc7e2f901d025e90b330b38cf054235691..03725f585957d33eed08d8b91bf9e628986452ac 100644 (file)
@@ -328,6 +328,13 @@ class Retrieve:
         self._status.set_helper(False)
         self._status.set_progress(0.0)
         self._status.set_active(True)
+        # how much data should be read on the first fetch? It would be nice
+        # if we could grab small directories in a single RTT. The way we pack
+        # dirnodes consumes about 112 bytes per child. The way we pack
+        # mutable files puts about 935 bytes of pubkey+sig+hashes, then our
+        # data, then about 1216 bytes of encprivkey. So 2kB ought to get us
+        # about 9 entries, which seems like a good default.
+        self._read_size = 2000
 
     def log(self, msg, **kwargs):
         prefix = self._log_prefix
@@ -379,13 +386,6 @@ class Retrieve:
         #    remove that share from the sharemap.  and start step#6 again.
 
         initial_query_count = 5
-        # how much data should be read on the first fetch? It would be nice
-        # if we could grab small directories in a single RTT. The way we pack
-        # dirnodes consumes about 112 bytes per child. The way we pack
-        # mutable files puts about 935 bytes of pubkey+sig+hashes, then our
-        # data, then about 1216 bytes of encprivkey. So 2kB ought to get us
-        # about 9 entries, which seems like a good default.
-        self._read_size = 2000
 
         # we might not know how many shares we need yet.
         self._required_shares = self._node.get_required_shares()
index 83a78e2e711ef5e6d1d717a591d66d1c53a0bcda..5f0a57869439c77f993c42338042b4697e17cf09 100644 (file)
@@ -611,3 +611,18 @@ class Roundtrip(unittest.TestCase):
         # a corrupted privkey won't even be noticed by the reader
         return self._corrupt_all("enc_privkey", None, should_succeed=True)
 
+    def test_short_read(self):
+        c, s, fn, p, r = self.setup_for_publish(20)
+        contents = "New contents go here"
+        d = p.publish(contents)
+        def _published(res):
+            # force a short read, to make Retrieve._got_results re-send the
+            # queries. But don't make it so short that we can't read the
+            # header.
+            r._read_size = mutable.HEADER_LENGTH + 10
+            return r.retrieve()
+        d.addCallback(_published)
+        def _retrieved(new_contents):
+            self.failUnlessEqual(contents, new_contents)
+        d.addCallback(_retrieved)
+        return d