github.com/tilt-dev/go-get@v0.2.3/get_test.go (about) 1 package get 2 3 import ( 4 "errors" 5 "io/ioutil" 6 "os" 7 "path/filepath" 8 "regexp" 9 "strings" 10 "testing" 11 12 "github.com/stretchr/testify/assert" 13 "github.com/stretchr/testify/require" 14 ) 15 16 func tmpdir(t *testing.T) string { 17 t.Helper() 18 dir, err := ioutil.TempDir("", t.Name()) 19 require.NoError(t, err, "Could not create tmpdir") 20 t.Cleanup(func() { 21 _ = os.RemoveAll(dir) 22 }) 23 return dir 24 } 25 26 func setupDir(t *testing.T) string { 27 t.Helper() 28 29 // force the tests to run in an empty working directory 30 // because otherwise the working directory will be the `go-get` local 31 // repo path, which is itself a git command, so commands that don't 32 // properly chdir could inadvertently run against this repo 33 fakeWd := tmpdir(t) 34 cwd, err := os.Getwd() 35 require.NoError(t, err, "Could not get cwd") 36 require.NoError(t, os.Chdir(fakeWd), "Could not change cwd") 37 t.Cleanup(func() { 38 if err := os.Chdir(cwd); err != nil { 39 t.Errorf("failed to restore current working directory: %v", err) 40 } 41 }) 42 43 return tmpdir(t) 44 } 45 46 func TestGet(t *testing.T) { 47 dir := setupDir(t) 48 downloader := NewDownloader(dir) 49 path, err := downloader.Download("github.com/tilt-dev/tilt-extensions/hello_world") 50 require.NoError(t, err) 51 52 tiltfile, err := ioutil.ReadFile(filepath.Join(path, "Tiltfile")) 53 require.NoError(t, err) 54 assert.Contains(t, string(tiltfile), `print("Hello world!")`) 55 56 path, err = downloader.Download("gitlab.com/nicks6/tilt-extension-experiment") 57 require.NoError(t, err) 58 59 tiltfile, err = ioutil.ReadFile(filepath.Join(path, "tilt_extension", "Tiltfile")) 60 require.NoError(t, err) 61 assert.Contains(t, string(tiltfile), `def dotnet_build(ref,context = ".", version = "latest"):`) 62 assert.Contains(t, string(tiltfile), `def vue_build(ref,context = ".", version = "latest"):`) 63 } 64 65 func TestDestinationPath(t *testing.T) { 66 dir := setupDir(t) 67 downloader := NewDownloader(dir) 68 result := downloader.DestinationPath("github.com/tilt-dev/tilt-extensions/hello_world") 69 assert.True(t, strings.HasSuffix(result, filepath.Join("github.com", "tilt-dev", "tilt-extensions", "hello_world"))) 70 71 result = downloader.DestinationPath("gitlab.com/nicks6/tilt-extension-experiment") 72 assert.True(t, strings.HasSuffix(result, filepath.Join("gitlab.com", "nicks6", "tilt-extension-experiment"))) 73 } 74 75 func TestTagSync(t *testing.T) { 76 dir := setupDir(t) 77 dlr := NewDownloader(dir) 78 result, err := dlr.Download("github.com/tilt-dev/tilt-extensions") 79 require.NoError(t, err) 80 81 err = dlr.RefSync("github.com/tilt-dev/tilt-extensions", 82 "5670e8d8c5925981d019e6065a30058fc50eb299") // initial commit 83 require.NoError(t, err) 84 85 contents, err := ioutil.ReadFile(filepath.Join(result, "README.md")) 86 require.NoError(t, err) 87 88 assert.Equal(t, "# tilt-extensions", string(contents)) 89 90 result, err = dlr.Download("gitlab.com/nicks6/tilt-extension-experiment") 91 require.NoError(t, err) 92 93 err = dlr.RefSync("gitlab.com/nicks6/tilt-extension-experiment", 94 "93df1cfd37237550d0e10b2384a45a889200c1ef") 95 require.NoError(t, err) 96 97 contents, err = ioutil.ReadFile(filepath.Join(result, "README.md")) 98 require.NoError(t, err) 99 100 assert.Contains(t, string(contents), "# tilt-extension-experiment") 101 } 102 103 func TestVersionTagSync(t *testing.T) { 104 dir := setupDir(t) 105 dlr := NewDownloader(dir) 106 result, err := dlr.Download("github.com/tilt-dev/tilt-extensions") 107 require.NoError(t, err) 108 109 err = dlr.RefSync("github.com/tilt-dev/tilt-extensions", "v0.25.0") 110 require.NoError(t, err) 111 112 contents, err := ioutil.ReadFile(filepath.Join(result, "README.md")) 113 require.NoError(t, err) 114 115 assert.True(t, strings.HasPrefix(string(contents), "# Tilt Extensions")) 116 117 result, err = dlr.Download("gitlab.com/brshore/tilt-extension-experiment") 118 require.NoError(t, err) 119 120 err = dlr.RefSync("gitlab.com/brshore/tilt-extension-experiment", "v0.0.1") 121 require.NoError(t, err) 122 123 contents, err = ioutil.ReadFile(filepath.Join(result, "README.md")) 124 require.NoError(t, err) 125 126 assert.True(t, strings.HasPrefix(string(contents), "# tilt-extension-experiment")) 127 } 128 129 func TestHeadRef(t *testing.T) { 130 dir := setupDir(t) 131 downloader := NewDownloader(dir) 132 _, err := downloader.HeadRef("github.com/tilt-dev/tilt-extensions/hello_world") 133 if assert.Error(t, err) { 134 var pathErr *os.PathError // use *os.PathError type, error string differs between OS 135 assert.True(t, errors.As(err, &pathErr)) 136 } 137 138 _, err = downloader.Download("github.com/tilt-dev/tilt-extensions/hello_world") 139 require.NoError(t, err) 140 141 ref, err := downloader.HeadRef("github.com/tilt-dev/tilt-extensions/hello_world") 142 require.NoError(t, err) 143 assert.True(t, regexp.MustCompile("^[0-9a-f]{40}$").MatchString(ref)) 144 145 _, err = downloader.Download("gitlab.com/nicks6/tilt-extension-experiment") 146 require.NoError(t, err) 147 148 ref, err = downloader.HeadRef("gitlab.com/nicks6/tilt-extension-experiment") 149 require.NoError(t, err) 150 assert.True(t, regexp.MustCompile("^[0-9a-f]{40}$").MatchString(ref)) 151 } 152 153 func TestGetCached(t *testing.T) { 154 dir := setupDir(t) 155 downloader := NewDownloader(dir) 156 path, err := downloader.Download("github.com/tilt-dev/tilt-extensions/hello_world") 157 require.NoError(t, err) 158 159 err = ioutil.WriteFile(filepath.Join(path, "Tiltfile"), []byte(`print("Goodbye world!")`), os.FileMode(0644)) 160 require.NoError(t, err) 161 162 // Make sure that running a second downloader doesn't overwrite. 163 // 164 // TODO(nick): Do we need a mechanism to force an update? Or should that be up 165 // to the app to delete the cached download? 166 downloader2 := NewDownloader(dir) 167 path2, err := downloader2.Download("github.com/tilt-dev/tilt-extensions/hello_world") 168 require.NoError(t, err) 169 170 tiltfile, err := ioutil.ReadFile(filepath.Join(path2, "Tiltfile")) 171 require.NoError(t, err) 172 assert.Contains(t, string(tiltfile), `print("Goodbye world!")`) 173 174 path, err = downloader.Download("gitlab.com/nicks6/tilt-extension-experiment") 175 require.NoError(t, err) 176 177 err = ioutil.WriteFile(filepath.Join(path, "tilt_extension", "Tiltfile"), []byte(`print("Goodbye world!")`), os.FileMode(0644)) 178 require.NoError(t, err) 179 180 path2, err = downloader2.Download("gitlab.com/nicks6/tilt-extension-experiment") 181 require.NoError(t, err) 182 183 tiltfile, err = ioutil.ReadFile(filepath.Join(path2, "tilt_extension", "Tiltfile")) 184 require.NoError(t, err) 185 assert.Contains(t, string(tiltfile), `print("Goodbye world!")`) 186 }