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