github.com/weiwenhao/getter@v1.30.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  }