12183: Handle circular directory symlinks
[arvados.git] / services / crunch-run / crunchrun_test.go
index d3606ec6cb9c0ed9e02fbd52f445cfc75252388b..d3c9990770db7c6ac24f92b97fea3d82eb0e8814 100644 (file)
@@ -1699,27 +1699,37 @@ func (s *TestSuite) TestEvalSymlinks(c *C) {
        os.Symlink("/etc/passwd", realTemp+"/p1")
 
        // Relative outside output dir
-       os.Symlink("../..", realTemp+"/p2")
+       os.Symlink("../zip", realTemp+"/p2")
 
        // Circular references
        os.Symlink("p4", realTemp+"/p3")
        os.Symlink("p5", realTemp+"/p4")
        os.Symlink("p3", realTemp+"/p5")
 
-       symlinksToRemove := make(map[string]bool)
+       // Target doesn't exist
+       os.Symlink("p99", realTemp+"/p6")
+
        for _, v := range []string{"p1", "p2", "p3", "p4", "p5"} {
-               var srm []string
-               _, srm, err = cr.EvalSymlinks(realTemp+"/"+v, []string{})
+               info, err := os.Lstat(realTemp + "/" + v)
+               _, _, _, err = cr.derefOutputSymlink(realTemp+"/"+v, info)
                c.Assert(err, NotNil)
-               for _, r := range srm {
-                       symlinksToRemove[r] = true
-               }
        }
-       c.Assert(len(symlinksToRemove), Equals, 5)
+}
+
+func (s *TestSuite) TestEvalSymlinkDir(c *C) {
+       cr := NewContainerRunner(&ArvTestClient{callraw: true}, &KeepTestClient{}, nil, "zzzzz-zzzzz-zzzzzzzzzzzzzzz")
+
+       realTemp, err := ioutil.TempDir("", "crunchrun_test-")
+       c.Assert(err, IsNil)
+       defer os.RemoveAll(realTemp)
+
+       cr.HostOutputDir = realTemp
+
+       // Absolute path outside output dir
+       os.Symlink(".", realTemp+"/loop")
 
-       c.Assert(map[string]bool{realTemp + "/" + "p1": true,
-               realTemp + "/" + "p2": true,
-               realTemp + "/" + "p3": true,
-               realTemp + "/" + "p4": true,
-               realTemp + "/" + "p5": true}, DeepEquals, symlinksToRemove)
+       v := "loop"
+       info, err := os.Lstat(realTemp + "/" + v)
+       _, err = cr.UploadOutputFile(realTemp+"/"+v, info, err, []string{}, nil, "", "", 0)
+       c.Assert(err, NotNil)
 }