github.com/uded/go-getter@v1.3.1/detect_file_unix_test.go (about) 1 // +build test unix 2 3 package getter 4 5 import ( 6 "io/ioutil" 7 "os" 8 "path/filepath" 9 "testing" 10 ) 11 12 // If a relative symlink is passed in as the pwd to Detect, the resulting URL 13 // can have an invalid path. 14 func TestFileDetector_relativeSymlink(t *testing.T) { 15 tmpDir, err := ioutil.TempDir("", "go-getter") 16 if err != nil { 17 t.Fatal(err) 18 } 19 20 defer os.RemoveAll(tmpDir) 21 22 // We may have a symlinked tmp dir, 23 // e.g. OSX uses /var -> /private/var 24 tmpDir, err = filepath.EvalSymlinks(tmpDir) 25 if err != nil { 26 t.Fatal(err) 27 } 28 29 err = os.Mkdir(filepath.Join(tmpDir, "realPWD"), 0755) 30 if err != nil { 31 t.Fatal(err) 32 } 33 34 subdir := filepath.Join(tmpDir, "subdir") 35 err = os.Mkdir(subdir, 0755) 36 if err != nil { 37 t.Fatal(err) 38 } 39 40 prevDir, err := os.Getwd() 41 if err != nil { 42 t.Fatal(err) 43 } 44 defer os.Chdir(prevDir) 45 46 err = os.Chdir(subdir) 47 if err != nil { 48 t.Fatal(err) 49 } 50 51 err = os.Symlink("../realPWD", "linkedPWD") 52 if err != nil { 53 t.Fatal(err) 54 } 55 56 // if detech doesn't fully resolve the pwd symlink, the output will be the 57 // invalid path: "file:///../modules/foo" 58 f := new(FileDetector) 59 out, ok, err := f.Detect("../modules/foo", "./linkedPWD") 60 if err != nil { 61 t.Fatalf("err: %v", err) 62 } 63 if !ok { 64 t.Fatal("not ok") 65 } 66 if out != "file://"+filepath.Join(tmpDir, "modules/foo") { 67 t.Logf("expected: %v", "file://"+filepath.Join(tmpDir, "modules/foo")) 68 t.Fatalf("bad: %v", out) 69 } 70 }