github.com/olli-ai/jx/v2@v2.0.400-0.20210921045218-14731b4dd448/pkg/cmd/upgrade/upgrade_boot_integration_test.go (about) 1 // +build integration 2 3 package upgrade 4 5 import ( 6 "io/ioutil" 7 "os" 8 "path/filepath" 9 "strings" 10 "testing" 11 12 "github.com/blang/semver" 13 14 "github.com/olli-ai/jx/v2/pkg/cmd/opts" 15 "github.com/olli-ai/jx/v2/pkg/config" 16 "github.com/olli-ai/jx/v2/pkg/gits" 17 "github.com/olli-ai/jx/v2/pkg/util" 18 "github.com/stretchr/testify/assert" 19 "github.com/stretchr/testify/require" 20 ) 21 22 func TestUpgradeAvailable(t *testing.T) { 23 o := UpgradeBootOptions{ 24 CommonOptions: &opts.CommonOptions{}, 25 } 26 27 tests := []struct { 28 name string 29 versionStreamRef string 30 latestRelease bool 31 wantSha bool 32 wantTag bool 33 upgradeVSRef string 34 }{ 35 { 36 name: "TestUpgradeAvailableFromTaggedVersion", 37 versionStreamRef: "v1.0.35", 38 wantSha: true, 39 }, 40 { 41 name: "TestUpgradeAvailableFromSha", 42 versionStreamRef: "282fd7579ef82df408ccd2d425f99779784f75a9", 43 wantSha: true, 44 }, 45 { 46 name: "TestUpgradeAvailableLatestReleaseFromTaggedVersion", 47 versionStreamRef: "v1.0.35", 48 latestRelease: true, 49 wantTag: true, 50 }, 51 { 52 name: "TestUpgradeAvailableLatestReleaseFromSha", 53 versionStreamRef: "282fd7579ef82df408ccd2d425f99779784f75a9", 54 latestRelease: true, 55 wantTag: true, 56 }, 57 } 58 for _, tt := range tests { 59 t.Run(tt.name, func(t *testing.T) { 60 if tt.latestRelease { 61 o.LatestRelease = true 62 } 63 64 upgradeRef, err := o.upgradeAvailable(config.DefaultVersionsURL, tt.versionStreamRef, config.DefaultVersionsRef) 65 assert.NoError(t, err) 66 67 if tt.wantSha { 68 assert.Equal(t, len(upgradeRef), 40) 69 } 70 71 if tt.wantTag { 72 upgradeRefText := strings.TrimPrefix(upgradeRef, "v") 73 _, err = semver.Parse(upgradeRefText) 74 assert.NoError(t, err) 75 } 76 }) 77 } 78 } 79 80 func TestUpdateBootConfig(t *testing.T) { 81 origJxHome := os.Getenv("JX_HOME") 82 83 tmpJxHome, err := ioutil.TempDir("", "jx-test-"+t.Name()) 84 assert.NoError(t, err) 85 86 err = os.Setenv("JX_HOME", tmpJxHome) 87 assert.NoError(t, err) 88 89 defer func() { 90 _ = os.RemoveAll(tmpJxHome) 91 err = os.Setenv("JX_HOME", origJxHome) 92 }() 93 94 o := UpgradeBootOptions{ 95 CommonOptions: &opts.CommonOptions{}, 96 } 97 98 // Prep the local clone with the contents of the boot config version we're going to upgrade from 99 tmpDir := initializeTempGitRepo(t, o.Git(), "v1.0.35") 100 defer func() { 101 err := os.RemoveAll(tmpDir) 102 require.NoError(t, err, "could not clean up temp boot clone") 103 }() 104 105 o.Dir = tmpDir 106 107 err = o.updateBootConfig(config.DefaultVersionsURL, "v1.0.161", config.DefaultBootRepository, "282fd7579ef82df408ccd2d425f99779784f75a9") 108 assert.NoError(t, err) 109 } 110 111 func initializeTempGitRepo(t *testing.T, gitter gits.Gitter, bootRef string) string { 112 dir, err := ioutil.TempDir("", "") 113 assert.NoError(t, err) 114 115 tmpCloneDir, err := ioutil.TempDir("", "update-boot-config-test-") 116 assert.NoError(t, err) 117 118 defer func() { 119 err := os.RemoveAll(tmpCloneDir) 120 require.NoError(t, err, "could not clean up temp boot clone") 121 }() 122 123 // Clone the boot config repo 124 err = gitter.Clone(config.DefaultBootRepository, tmpCloneDir) 125 assert.NoError(t, err) 126 127 // Fetch tags. 128 err = gitter.FetchTags(tmpCloneDir) 129 assert.NoError(t, err) 130 131 // Check out the boot ref. 132 err = gitter.Checkout(tmpCloneDir, bootRef) 133 assert.NoError(t, err) 134 135 // Copy the contents of the boot config repo to the temp repo. 136 err = util.CopyDir(tmpCloneDir, dir, true) 137 assert.NoError(t, err) 138 139 // Remove the .git directory 140 err = os.RemoveAll(filepath.Join(dir, ".git")) 141 assert.NoError(t, err) 142 143 err = gitter.Init(dir) 144 assert.NoError(t, err) 145 146 err = gitter.Add(dir, ".") 147 assert.NoError(t, err) 148 149 err = gitter.AddCommit(dir, "Initial Commit") 150 assert.NoError(t, err) 151 152 return dir 153 }