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  }