From a2ed17f2a0d69ec35785d7478deebd763a287d7a Mon Sep 17 00:00:00 2001
From: david-sarah <david-sarah@jacaranda.org>
Date: Wed, 24 Feb 2010 20:18:24 -0800
Subject: [PATCH] Additional test for DIR2-LIT directories in test_web.py,
 fixed version (#948)

---
 src/allmydata/test/common.py   | 16 ++++++++++++----
 src/allmydata/test/test_web.py |  9 +++++++++
 2 files changed, 21 insertions(+), 4 deletions(-)

diff --git a/src/allmydata/test/common.py b/src/allmydata/test/common.py
index 6c37f8c6..f1bfe3dc 100644
--- a/src/allmydata/test/common.py
+++ b/src/allmydata/test/common.py
@@ -113,6 +113,8 @@ class FakeCHKFileNode:
         pass
 
     def get_size(self):
+        if isinstance(self.my_uri, uri.LiteralFileURI):
+            return self.my_uri.get_size()
         try:
             data = self.all_contents[self.my_uri.to_string()]
         except KeyError, le:
@@ -131,9 +133,12 @@ class FakeCHKFileNode:
         return d
 
     def _read(self, ignored, consumer, offset, size):
-        if self.my_uri.to_string() not in self.all_contents:
-            raise NotEnoughSharesError(None, 0, 3)
-        data = self.all_contents[self.my_uri.to_string()]
+        if isinstance(self.my_uri, uri.LiteralFileURI):
+            data = self.my_uri.data
+        else:
+            if self.my_uri.to_string() not in self.all_contents:
+                raise NotEnoughSharesError(None, 0, 3)
+            data = self.all_contents[self.my_uri.to_string()]
         start = offset
         if size is not None:
             end = offset + size
@@ -288,9 +293,12 @@ class FakeMutableFileNode:
         return d
 
     def download_best_version(self):
+        if isinstance(self.my_uri, uri.LiteralFileURI):
+            return defer.succeed(self.my_uri.data)
         if self.storage_index not in self.all_contents:
             return defer.fail(NotEnoughSharesError(None, 0, 3))
         return defer.succeed(self.all_contents[self.storage_index])
+
     def overwrite(self, new_contents):
         if len(new_contents) > self.MUTABLE_SIZELIMIT:
             raise FileTooLargeError("SDMF is limited to one segment, and "
@@ -464,7 +472,7 @@ class SystemTestMixin(pollmixin.PollMixin, testutil.StallMixin):
             if self.stats_gatherer_furl:
                 write("stats_gatherer.furl", self.stats_gatherer_furl)
 
-        # give subclasses a chance to append liens to the node's tahoe.cfg
+        # give subclasses a chance to append lines to the node's tahoe.cfg
         # files before they are launched.
         self._set_up_nodes_extra_config()
 
diff --git a/src/allmydata/test/test_web.py b/src/allmydata/test/test_web.py
index f9e37513..b1485981 100644
--- a/src/allmydata/test/test_web.py
+++ b/src/allmydata/test/test_web.py
@@ -994,6 +994,15 @@ class Web(WebMixin, WebErrorMixin, testutil.StallMixin, unittest.TestCase):
             self.failUnless(MKDIR_BUTTON_RE.search(res), res)
         d.addCallback(_check4)
 
+        # and at a literal directory
+        tiny_litdir_uri = "URI:DIR2-LIT:gqytunj2onug64tufqzdcosvkjetutcjkq5gw4tvm5vwszdgnz5hgyzufqydulbshj5x2lbm" # contains one child which is itself also LIT
+        d.addCallback(lambda res:
+                      self.GET("/uri/" + tiny_litdir_uri + "/", followRedirect=True))
+        def _check5(res):
+            self.failUnless('(immutable)' in res, res)
+            self.failUnless(re.search('<td>FILE</td>'
+                                      r'\s+<td><a href="[\.\/]+/file/URI%3ALIT%3Akrugkidfnzsc4/@@named=/short">short</a></td>', res), res)
+        d.addCallback(_check5)
         return d
 
     def test_GET_DIRURL_badtype(self):
-- 
2.45.2