]> git.rkrishnan.org Git - tahoe-lafs/tahoe-lafs.git/commitdiff
web: more test work, now all tests either pass or are skipped (POST, XMLRPC, and...
authorBrian Warner <warner@lothar.com>
Sat, 7 Jul 2007 17:34:05 +0000 (10:34 -0700)
committerBrian Warner <warner@lothar.com>
Sat, 7 Jul 2007 17:34:05 +0000 (10:34 -0700)
src/allmydata/dirnode.py
src/allmydata/test/test_web.py
src/allmydata/webish.py

index 418d974ce26958364e892f7a5dc03c02372efea4..f274319303003e20b035fba3866daea2e3d8821b 100644 (file)
@@ -364,7 +364,7 @@ class ImmutableDirectoryNode:
 
     def get_child_at_path(self, path):
         if not path:
-            return self
+            return defer.succeed(self)
         if isinstance(path, (str, unicode)):
             path = path.split("/")
         childname = path[0]
index 26d48a8f928b21d408dd32dcc9c7da86948cdaed..0f7a3bdc08ce4e89d6765c9d744cdefad23057bc 100644 (file)
@@ -559,56 +559,79 @@ class Web(unittest.TestCase):
         f.write("contents of %s\n" % filename)
         f.close()
 
-    def test_PUT_NEWDIRURL_localdir(self): # NO
+    def walk_mynodes(self, node, path=()):
+        yield path, node
+        if interfaces.IDirectoryNode.providedBy(node):
+            for name in sorted(node.children.keys()):
+                child_uri = node.children[name]
+                childnode = self.nodes[child_uri]
+                childpath = path + (name,)
+                for xpath,xnode in self.walk_mynodes(childnode, childpath):
+                    yield xpath, xnode
+
+    def dump_root(self):
+        print "NODEWALK"
+        for path,node in self.walk_mynodes(self.public_root):
+            print path
+
+    def test_PUT_NEWDIRURL_localdir(self): # YES
         localdir = os.path.abspath("web/PUT_NEWDIRURL_localdir")
         # create some files there
-        fileutil.make_dirs(os.path.join(localdir, "web"))
-        fileutil.make_dirs(os.path.join(localdir, "web/one"))
-        fileutil.make_dirs(os.path.join(localdir, "web/two"))
-        fileutil.make_dirs(os.path.join(localdir, "web/three"))
-        self.touch(localdir, "web/three/foo.txt")
-        self.touch(localdir, "web/three/bar.txt")
-        self.touch(localdir, "web/zap.zip")
+        fileutil.make_dirs(os.path.join(localdir, "one"))
+        fileutil.make_dirs(os.path.join(localdir, "one/sub"))
+        fileutil.make_dirs(os.path.join(localdir, "two"))
+        fileutil.make_dirs(os.path.join(localdir, "three"))
+        self.touch(localdir, "three/foo.txt")
+        self.touch(localdir, "three/bar.txt")
+        self.touch(localdir, "zap.zip")
+
         d = self.PUT("/vdrive/global/foo/newdir?localdir=%s" % localdir, "")
         def _check(res):
             self.failUnless("newdir" in self._foo_node.children)
-            webnode = self.nodes[self._foo_node.children["newdir"]]
-            self.failUnlessEqual(sorted(webnode.children.keys()),
+            newnode = self.nodes[self._foo_node.children["newdir"]]
+            self.failUnlessEqual(sorted(newnode.children.keys()),
                                  sorted(["one", "two", "three", "zap.zip"]))
-            threenode = self.nodes[webnode.children["three"]]
+            onenode = self.nodes[newnode.children["one"]]
+            self.failUnlessEqual(sorted(onenode.children.keys()),
+                                 sorted(["sub"]))
+            threenode = self.nodes[newnode.children["three"]]
             self.failUnlessEqual(sorted(threenode.children.keys()),
                                  sorted(["foo.txt", "bar.txt"]))
-            barnode = self.nodes[threenode.children["foo.txt"]]
+            barnode = self.nodes[threenode.children["bar.txt"]]
             contents = self.files[barnode.get_uri()]
-            self.failUnlessEqual(contents, "contents of web/three/bar.txt")
+            self.failUnlessEqual(contents, "contents of three/bar.txt\n")
         d.addCallback(_check)
         return d
 
-    def test_PUT_NEWDIRURL_localdir_mkdirs(self): # NO
+    def test_PUT_NEWDIRURL_localdir_mkdirs(self): # YES
         localdir = os.path.abspath("web/PUT_NEWDIRURL_localdir_mkdirs")
         # create some files there
-        fileutil.make_dirs(os.path.join(localdir, "web"))
-        fileutil.make_dirs(os.path.join(localdir, "web/one"))
-        fileutil.make_dirs(os.path.join(localdir, "web/two"))
-        fileutil.make_dirs(os.path.join(localdir, "web/three"))
-        self.touch(localdir, "web/three/foo.txt")
-        self.touch(localdir, "web/three/bar.txt")
-        self.touch(localdir, "web/zap.zip")
+        fileutil.make_dirs(os.path.join(localdir, "one"))
+        fileutil.make_dirs(os.path.join(localdir, "one/sub"))
+        fileutil.make_dirs(os.path.join(localdir, "two"))
+        fileutil.make_dirs(os.path.join(localdir, "three"))
+        self.touch(localdir, "three/foo.txt")
+        self.touch(localdir, "three/bar.txt")
+        self.touch(localdir, "zap.zip")
+
         d = self.PUT("/vdrive/global/foo/subdir/newdir?localdir=%s" % localdir,
                      "")
         def _check(res):
             self.failUnless("subdir" in self._foo_node.children)
             subnode = self.nodes[self._foo_node.children["subdir"]]
             self.failUnless("newdir" in subnode.children)
-            webnode = self.nodes[subnode.children["newdir"]]
-            self.failUnlessEqual(sorted(webnode.children.keys()),
+            newnode = self.nodes[subnode.children["newdir"]]
+            self.failUnlessEqual(sorted(newnode.children.keys()),
                                  sorted(["one", "two", "three", "zap.zip"]))
-            threenode = self.nodes[webnode.children["three"]]
+            onenode = self.nodes[newnode.children["one"]]
+            self.failUnlessEqual(sorted(onenode.children.keys()),
+                                 sorted(["sub"]))
+            threenode = self.nodes[newnode.children["three"]]
             self.failUnlessEqual(sorted(threenode.children.keys()),
                                  sorted(["foo.txt", "bar.txt"]))
-            barnode = self.nodes[threenode.children["foo.txt"]]
+            barnode = self.nodes[threenode.children["bar.txt"]]
             contents = self.files[barnode.get_uri()]
-            self.failUnlessEqual(contents, "contents of web/three/bar.txt")
+            self.failUnlessEqual(contents, "contents of three/bar.txt\n")
         d.addCallback(_check)
         return d
 
index 974c8ca704c49b384e6e0e33f355bb7321e850e4..f58d77bb68910169c172a1c55873c139b886239d 100644 (file)
@@ -546,6 +546,7 @@ class PUTHandler(rend.Page):
         if localfile:
             d.addCallback(self._upload_localfile, localfile, name)
         elif localdir:
+            d.addCallback(self._get_or_create_directories, self._path[-1:])
             d.addCallback(self._upload_localdir, localdir)
         elif t == "uri":
             d.addCallback(self._attach_uri, req.content, name)
@@ -611,11 +612,18 @@ class PUTHandler(rend.Page):
         return d
 
     def _upload_localdir(self, node, localdir):
+        print "PUTHandler._upload_localdir", localdir
         # build up a list of files to upload
         all_files = []
         all_dirs = []
         for root, dirs, files in os.walk(localdir):
-            path = tuple(root.split(os.sep))
+            print "walking", root
+            if root == localdir:
+                path = ()
+            else:
+                relative_root = root[len(localdir)+1:]
+                path = tuple(relative_root.split(os.sep))
+            print "  path", path
             for d in dirs:
                 all_dirs.append(path + (d,))
             for f in files:
@@ -629,6 +637,7 @@ class PUTHandler(rend.Page):
         return d
 
     def _makedir(self, res, node, dir):
+        print "_makedir", node, dir
         d = defer.succeed(None)
         # get the parent. As long as os.walk gives us parents before
         # children, this ought to work
@@ -638,9 +647,10 @@ class PUTHandler(rend.Page):
         return d
 
     def _upload_one_file(self, res, node, localdir, f):
+        print "_upload_one_file", node, localdir, f
         # get the parent. We can be sure this exists because we already
         # went through and created all the directories we require.
-        localfile = os.path.join(localdir, f)
+        localfile = os.path.join(localdir, *f)
         d = node.get_child_at_path(f[:-1])
         d.addCallback(self._upload_localfile, localfile, f[-1])
         return d