12764: Handle empty directories. Fix test.
authorPeter Amstutz <pamstutz@veritasgenetics.com>
Wed, 31 Jan 2018 01:46:50 +0000 (20:46 -0500)
committerPeter Amstutz <pamstutz@veritasgenetics.com>
Wed, 31 Jan 2018 01:46:50 +0000 (20:46 -0500)
Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <pamstutz@veritasgenetics.com>

services/crunch-run/crunchrun.go
services/crunch-run/crunchrun_test.go

index dfb1eb85e08c54652335b71a6f88ec88aa9818ef..5c4f105f9c7037e5bdafba55df1ca6f2559b5199 100644 (file)
@@ -588,8 +588,7 @@ func (runner *ContainerRunner) SetupMounts() (err error) {
                                if walkinfo.Mode().IsRegular() {
                                        return copyfile(walkpath, path.Join(cp.bind, walkpath[len(cp.src):]))
                                } else if walkinfo.Mode().IsDir() {
-                                       // will be visited by Walk()
-                                       return nil
+                                       return os.MkdirAll(path.Join(cp.bind, walkpath[len(cp.src):]), 0770)
                                } else {
                                        return fmt.Errorf("Source %q is not a regular file or directory", cp.src)
                                }
index 5965a7d02c90f9daca0b40760a4db396ffa57298..8a7139fb59aeb33f12f999ccc8cb9b3789106123 100644 (file)
@@ -1243,15 +1243,26 @@ func (s *TestSuite) TestSetupMounts(c *C) {
                        "/tmp/foo": {Kind: "collection",
                                PortableDataHash: "59389a8f9ee9d399be35462a0f92541c+53",
                                Writable:         true},
+                       "/tmp/bar": {Kind: "collection",
+                               PortableDataHash: "59389a8f9ee9d399be35462a0f92541d+53",
+                               Path:             "baz",
+                               Writable:         true},
                }
                cr.OutputPath = "/tmp"
 
                os.MkdirAll(realTemp+"/keep1/by_id/59389a8f9ee9d399be35462a0f92541c+53", os.ModePerm)
+               os.MkdirAll(realTemp+"/keep1/by_id/59389a8f9ee9d399be35462a0f92541d+53/baz", os.ModePerm)
+
+               rf, _ := os.Create(realTemp+"/keep1/by_id/59389a8f9ee9d399be35462a0f92541d+53/baz/quux")
+               rf.Write([]byte("bar"))
+               rf.Close()
 
                err := cr.SetupMounts()
                c.Check(err, IsNil)
                _, err = os.Stat(cr.HostOutputDir + "/foo")
                c.Check(err, IsNil)
+               _, err = os.Stat(cr.HostOutputDir + "/bar/quux")
+               c.Check(err, IsNil)
                os.RemoveAll(cr.ArvMountPoint)
                cr.CleanupDirs()
                checkEmpty()