github.com/git-hooks/git-hooks@v1.3.1/util_test.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "github.com/stretchr/testify/assert" 6 "github.com/urfave/cli" 7 "io/ioutil" 8 "net/http" 9 "net/http/httptest" 10 "os" 11 "path/filepath" 12 "testing" 13 ) 14 15 func TestGetGitRoot(t *testing.T) { 16 root, err := getGitRepoRoot() 17 assert.Nil(t, err) 18 assert.Equal(t, "git-hooks", filepath.Base(root)) 19 } 20 21 func TestGetDirPath(t *testing.T) { 22 path, err := getGitDirPath() 23 assert.Nil(t, err) 24 assert.Equal(t, ".git", filepath.Base(path)) 25 } 26 27 func TestGitExec(t *testing.T) { 28 identity, err := gitExec(GIT["FirstCommit"]) 29 assert.Nil(t, err) 30 assert.Equal(t, "553ec650fd4f90003774e2ff00b10bc9aa9ec802", identity) 31 } 32 33 func TestGitExecWithDir(t *testing.T) { 34 wd, err := os.Getwd() 35 assert.Nil(t, err) 36 37 identity, err := gitExecWithDir(wd, GIT["FirstCommit"]) 38 assert.Nil(t, err) 39 assert.Equal(t, "553ec650fd4f90003774e2ff00b10bc9aa9ec802", identity) 40 } 41 42 func TestBind(t *testing.T) { 43 sum := 0 44 f := bind(func(a, b int) { 45 sum = a + b 46 }, 1, 2) 47 f(&cli.Context{}) 48 assert.Equal(t, 3, sum) 49 } 50 51 func TestExists(t *testing.T) { 52 isExist, err := exists("notExistFileName") 53 assert.Nil(t, err) 54 assert.False(t, isExist) 55 } 56 57 func TestDownloadFromUrl(t *testing.T) { 58 content := "Hello, client" 59 // start test server 60 ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 61 fmt.Fprint(w, content) 62 })) 63 defer ts.Close() 64 65 fileName, err := downloadFromUrl(ts.URL) 66 assert.Nil(t, err) 67 68 file, err := os.Open(fileName) 69 assert.Nil(t, err) 70 71 fileinfo, err := file.Stat() 72 assert.Nil(t, err) 73 74 b := make([]byte, fileinfo.Size()) 75 _, err = file.Read(b) 76 assert.Nil(t, err) 77 assert.Equal(t, string(b), content) 78 } 79 80 func TestExtract(t *testing.T) { 81 fileName, err := extract("./fixtures/test.tar.gz") 82 assert.Nil(t, err) 83 84 file, err := os.Open(fileName) 85 assert.Nil(t, err) 86 87 fileinfo, err := file.Stat() 88 assert.Nil(t, err) 89 90 bytes := make([]byte, fileinfo.Size()) 91 _, err = file.Read(bytes) 92 assert.Nil(t, err) 93 // vim store the file with extra newline at the EOF 94 assert.Equal(t, "test\n", string(bytes)) 95 } 96 97 func TestAbsExePath(t *testing.T) { 98 path, err := absExePath("ls") 99 assert.Nil(t, err) 100 assert.Equal(t, "/bin/ls", path) 101 102 // should follow symlic 103 temp, err := ioutil.TempDir(os.TempDir(), "git-hooks-test") 104 assert.Nil(t, err) 105 os.Setenv("PATH", temp+":$PATH") 106 err = os.Symlink("/bin/ls", filepath.Join(temp, "ls")) 107 assert.Nil(t, err) 108 path, err = absExePath("ls") 109 assert.Nil(t, err) 110 assert.Equal(t, "/bin/ls", path) 111 } 112 113 func TestIsExecutable(t *testing.T) { 114 fileinfo, err := os.Stat("/bin/ls") 115 assert.Nil(t, err) 116 assert.True(t, isExecutable(fileinfo)) 117 }