From 4c2235fcefc4806c6375461ba30a18cc94819570 Mon Sep 17 00:00:00 2001
From: Brian Warner <warner@allmydata.com>
Date: Tue, 28 Oct 2008 18:17:20 -0700
Subject: [PATCH] web/filenode: oops, fix test failures, not everything has a
 storage index

---
 src/allmydata/test/common.py  | 3 +++
 src/allmydata/web/filenode.py | 9 +++++++--
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/allmydata/test/common.py b/src/allmydata/test/common.py
index 1898acc6..d09ebff2 100644
--- a/src/allmydata/test/common.py
+++ b/src/allmydata/test/common.py
@@ -46,6 +46,9 @@ class FakeCHKFileNode:
         return self.my_uri
     def get_verifier(self):
         return IURI(self.my_uri).get_verifier()
+    def get_storage_index(self):
+        return self.storage_index
+
     def check(self, monitor, verify=False):
         r = CheckerResults(self.storage_index)
         is_bad = self.bad_shares.get(self.storage_index, None)
diff --git a/src/allmydata/web/filenode.py b/src/allmydata/web/filenode.py
index 472f782c..4c200794 100644
--- a/src/allmydata/web/filenode.py
+++ b/src/allmydata/web/filenode.py
@@ -296,6 +296,8 @@ class MutableDownloadable:
         self.node = node
     def get_size(self):
         return self.size
+    def is_mutable(self):
+        return True
     def read(self, consumer, offset=0, size=None):
         d = self.node.download_best_version()
         d.addCallback(self._got_data, consumer, offset, size)
@@ -358,8 +360,11 @@ class FileDownloader(rend.Page):
             # TODO: look more closely at Request.setETag and how it interacts
             # with a conditional "if-etag-equals" request, I think this may
             # need to occur after the setResponseCode below
-            req.setETag(base32.b2a(self.filenode.get_storage_index()))
-            # TODO: for mutable files, use the roothash
+            si = self.filenode.get_storage_index()
+            if si:
+                req.setETag(base32.b2a(si))
+        # TODO: for mutable files, use the roothash. For LIT, hash the data.
+        # or maybe just use the URI for CHK and LIT.
         rangeheader = req.getHeader('range')
         if rangeheader:
             # adapted from nevow.static.File
-- 
2.45.2