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  }