github.com/olli-ai/jx/v2@v2.0.400-0.20210921045218-14731b4dd448/pkg/jenkinsfile/gitresolver/buildpack_test.go (about)

     1  // +build unit
     2  
     3  package gitresolver
     4  
     5  import (
     6  	"io/ioutil"
     7  	"os"
     8  	"path/filepath"
     9  	"testing"
    10  
    11  	"github.com/google/uuid"
    12  	"github.com/jenkins-x/jx-logging/pkg/log"
    13  	"github.com/olli-ai/jx/v2/pkg/gits"
    14  	"github.com/olli-ai/jx/v2/pkg/gits/testhelpers"
    15  	"github.com/olli-ai/jx/v2/pkg/util"
    16  	"github.com/stretchr/testify/assert"
    17  )
    18  
    19  func TestBuildPackInitClone(t *testing.T) {
    20  	mainRepo, err := ioutil.TempDir("", uuid.New().String())
    21  	assert.NoError(t, err)
    22  
    23  	remoteRepo, err := ioutil.TempDir("", uuid.New().String())
    24  	assert.NoError(t, err)
    25  
    26  	defer func() {
    27  		err := os.RemoveAll(mainRepo)
    28  		err2 := os.RemoveAll(remoteRepo)
    29  		if err != nil || err2 != nil {
    30  			log.Logger().Errorf("Error cleaning up tmpdirs because %v", err)
    31  		}
    32  	}()
    33  
    34  	err = os.Setenv("JX_HOME", mainRepo)
    35  	assert.NoError(t, err)
    36  	gitDir := mainRepo + "/draft/packs"
    37  	err = os.MkdirAll(gitDir, 0755)
    38  	assert.NoError(t, err)
    39  
    40  	gitter := gits.NewGitCLI()
    41  	assert.NoError(t, err)
    42  
    43  	// Prepare a git repo to test - this is our "remote"
    44  	err = gitter.Init(remoteRepo)
    45  	assert.NoError(t, err)
    46  
    47  	readme := "README"
    48  	initialReadme := "Cheesy!"
    49  
    50  	readmePath := filepath.Join(remoteRepo, readme)
    51  	err = ioutil.WriteFile(readmePath, []byte(initialReadme), 0600)
    52  	assert.NoError(t, err)
    53  	err = gitter.Add(remoteRepo, readme)
    54  	assert.NoError(t, err)
    55  	err = gitter.CommitDir(remoteRepo, "Initial Commit")
    56  	assert.NoError(t, err)
    57  
    58  	// Prepare another git repo, this is local repo
    59  	err = gitter.Init(gitDir)
    60  	assert.NoError(t, err)
    61  	// Set up the remote
    62  	err = gitter.AddRemote(gitDir, "origin", remoteRepo)
    63  	assert.NoError(t, err)
    64  	err = gitter.FetchBranch(gitDir, "origin", "master")
    65  	assert.NoError(t, err)
    66  	err = gitter.Merge(gitDir, "origin/master")
    67  	assert.NoError(t, err)
    68  
    69  	// Removing the remote tracking information, after executing InitBuildPack, it should have not failed and it should've set a remote tracking branch
    70  	testhelpers.GitCmd(func(s string, i ...int) {}, gitDir, "branch", "--unset-upstream")
    71  
    72  	_, err = InitBuildPack(gitter, "", "master")
    73  
    74  	testhelpers.GitCmd(func(s string, i ...int) {}, gitDir, "status", "-sb")
    75  
    76  	args := []string{"status", "-sb"}
    77  	cmd := util.Command{
    78  		Dir:  gitDir,
    79  		Name: "git",
    80  		Args: args,
    81  	}
    82  	output, err := cmd.RunWithoutRetry()
    83  	assert.NoError(t, err, "it should not fail to pull from the branch as remote tracking information has been set")
    84  
    85  	// Check the current branch is tracking the origin/master one
    86  	assert.Equal(t, "## master...origin/master", output)
    87  }