kcl-lang.io/kpm@v0.8.7-0.20240520061008-9fc4c5efc8c7/pkg/mvs/mvs_test.go (about) 1 package mvs 2 3 import ( 4 "os" 5 "path/filepath" 6 "sort" 7 "testing" 8 9 "github.com/stretchr/testify/assert" 10 "golang.org/x/mod/module" 11 "kcl-lang.io/kpm/pkg/3rdparty/mvs" 12 "kcl-lang.io/kpm/pkg/client" 13 "kcl-lang.io/kpm/pkg/utils" 14 ) 15 16 const testDataDir = "test_data" 17 18 func getTestDir(subDir string) string { 19 pwd, _ := os.Getwd() 20 testDir := filepath.Join(pwd, testDataDir) 21 testDir = filepath.Join(testDir, subDir) 22 23 return testDir 24 } 25 26 func TestMax(t *testing.T) { 27 reqs := ReqsGraph{} 28 assert.Equal(t, reqs.Max("", "1.0.0", "2.0.0"), "2.0.0") 29 assert.Equal(t, reqs.Max("", "1.2", "2.0"), "2.0") 30 assert.Equal(t, reqs.Max("", "2.5.0", "2.6"), "2.6") 31 assert.Equal(t, reqs.Max("", "2.0.0", "v3.0"), "v3.0") 32 } 33 34 func TestRequired(t *testing.T) { 35 pkg_path := filepath.Join(getTestDir("test_with_internal_deps"), "aaa") 36 assert.Equal(t, utils.DirExists(filepath.Join(pkg_path, "kcl.mod")), true) 37 kpmcli, err := client.NewKpmClient() 38 assert.Equal(t, err, nil) 39 kclPkg, err := kpmcli.LoadPkgFromPath(pkg_path) 40 assert.Equal(t, err, nil) 41 42 _, depGraph, err := kpmcli.InitGraphAndDownloadDeps(kclPkg) 43 assert.Equal(t, err, nil) 44 45 reqs := ReqsGraph{ 46 depGraph, 47 kpmcli, 48 kclPkg, 49 } 50 51 req, err := reqs.Required(module.Version{Path: "aaa", Version: "0.0.1"}) 52 assert.Equal(t, err, nil) 53 assert.Equal(t, len(req), 2) 54 55 expectedReqs := []module.Version{ 56 {Path: "bbb", Version: "0.0.1"}, 57 {Path: "ccc", Version: "0.0.1"}, 58 } 59 sort.Slice(req, func(i, j int) bool { 60 return req[i].Path < req[j].Path 61 }) 62 assert.Equal(t, req, expectedReqs) 63 } 64 65 func TestUpgrade(t *testing.T) { 66 pkg_path := getTestDir("test_with_external_deps") 67 assert.Equal(t, utils.DirExists(filepath.Join(pkg_path, "kcl.mod")), true) 68 kpmcli, err := client.NewKpmClient() 69 assert.Equal(t, err, nil) 70 kclPkg, err := kpmcli.LoadPkgFromPath(pkg_path) 71 assert.Equal(t, err, nil) 72 73 _, depGraph, err := kpmcli.InitGraphAndDownloadDeps(kclPkg) 74 assert.Equal(t, err, nil) 75 76 reqs := ReqsGraph{ 77 depGraph, 78 kpmcli, 79 kclPkg, 80 } 81 82 target := module.Version{Path: kclPkg.GetPkgName(), Version: kclPkg.GetPkgVersion()} 83 upgradeList := []module.Version{ 84 {Path: "argo-cd-order", Version: "0.2.0"}, 85 {Path: "helloworld", Version: "0.1.1"}, 86 } 87 upgrade, err := mvs.Upgrade(target, reqs, upgradeList...) 88 assert.Equal(t, err, nil) 89 90 expectedReqs := []module.Version{ 91 {Path: "test_with_external_deps", Version: "0.0.1"}, 92 {Path: "argo-cd-order", Version: "0.2.0"}, 93 {Path: "helloworld", Version: "0.1.1"}, 94 {Path: "json_merge_patch", Version: "0.1.0"}, 95 {Path: "k8s", Version: "1.29"}, 96 {Path: "podinfo", Version: "0.1.1"}, 97 } 98 assert.Equal(t, upgrade, expectedReqs) 99 } 100 101 func TestUpgradeToLatest(t *testing.T) { 102 pkg_path := getTestDir("test_with_external_deps") 103 assert.Equal(t, utils.DirExists(filepath.Join(pkg_path, "kcl.mod")), true) 104 kpmcli, err := client.NewKpmClient() 105 assert.Equal(t, err, nil) 106 kclPkg, err := kpmcli.LoadPkgFromPath(pkg_path) 107 assert.Equal(t, err, nil) 108 109 _, depGraph, err := kpmcli.InitGraphAndDownloadDeps(kclPkg) 110 assert.Equal(t, err, nil) 111 112 reqs := ReqsGraph{ 113 depGraph, 114 kpmcli, 115 kclPkg, 116 } 117 118 upgrade, err := reqs.Upgrade(module.Version{Path: "k8s", Version: "1.27"}) 119 assert.Equal(t, err, nil) 120 assert.Equal(t, upgrade, module.Version{Path: "k8s", Version: "1.29"}) 121 } 122 123 func TestUpgradeAllToLatest(t *testing.T) { 124 pkg_path := getTestDir("test_with_external_deps") 125 assert.Equal(t, utils.DirExists(filepath.Join(pkg_path, "kcl.mod")), true) 126 kpmcli, err := client.NewKpmClient() 127 assert.Equal(t, err, nil) 128 kclPkg, err := kpmcli.LoadPkgFromPath(pkg_path) 129 assert.Equal(t, err, nil) 130 131 _, depGraph, err := kpmcli.InitGraphAndDownloadDeps(kclPkg) 132 assert.Equal(t, err, nil) 133 134 reqs := ReqsGraph{ 135 depGraph, 136 kpmcli, 137 kclPkg, 138 } 139 140 target := module.Version{Path: kclPkg.GetPkgName(), Version: kclPkg.GetPkgVersion()} 141 142 upgrade, err := mvs.UpgradeAll(target, reqs) 143 assert.Equal(t, err, nil) 144 145 expectedReqs := []module.Version{ 146 {Path: "test_with_external_deps", Version: "0.0.1"}, 147 {Path: "argo-cd-order", Version: "0.2.0"}, 148 {Path: "helloworld", Version: "0.1.2"}, 149 {Path: "json_merge_patch", Version: "0.1.1"}, 150 {Path: "k8s", Version: "1.29"}, 151 {Path: "podinfo", Version: "0.1.1"}, 152 } 153 assert.Equal(t, upgrade, expectedReqs) 154 } 155 156 func TestPrevious(t *testing.T) { 157 pkg_path := getTestDir("test_with_external_deps") 158 assert.Equal(t, utils.DirExists(filepath.Join(pkg_path, "kcl.mod")), true) 159 kpmcli, err := client.NewKpmClient() 160 assert.Equal(t, err, nil) 161 kclPkg, err := kpmcli.LoadPkgFromPath(pkg_path) 162 assert.Equal(t, err, nil) 163 164 _, depGraph, err := kpmcli.InitGraphAndDownloadDeps(kclPkg) 165 assert.Equal(t, err, nil) 166 167 reqs := ReqsGraph{ 168 depGraph, 169 kpmcli, 170 kclPkg, 171 } 172 173 downgrade, err := reqs.Previous(module.Version{Path: "k8s", Version: "1.27"}) 174 assert.Equal(t, err, nil) 175 assert.Equal(t, downgrade, module.Version{Path: "k8s", Version: "1.14"}) 176 } 177 178 func TestUpgradePreviousOfLocalDependency(t *testing.T) { 179 pkg_path := filepath.Join(getTestDir("test_with_internal_deps"), "aaa") 180 assert.Equal(t, utils.DirExists(filepath.Join(pkg_path, "kcl.mod")), true) 181 kpmcli, err := client.NewKpmClient() 182 assert.Equal(t, err, nil) 183 kclPkg, err := kpmcli.LoadPkgFromPath(pkg_path) 184 assert.Equal(t, err, nil) 185 186 _, depGraph, err := kpmcli.InitGraphAndDownloadDeps(kclPkg) 187 assert.Equal(t, err, nil) 188 189 reqs := ReqsGraph{ 190 depGraph, 191 kpmcli, 192 kclPkg, 193 } 194 195 upgrade, err := reqs.Upgrade(module.Version{Path: "bbb", Version: "0.0.1"}) 196 assert.Equal(t, err, nil) 197 assert.Equal(t, upgrade, module.Version{Path: "bbb", Version: "0.0.1"}) 198 199 downgrade, err := reqs.Previous(module.Version{Path: "bbb", Version: "0.0.1"}) 200 assert.Equal(t, err, nil) 201 assert.Equal(t, downgrade, module.Version{Path: "bbb", Version: "0.0.1"}) 202 } 203 204 func TestDowngrade(t *testing.T) { 205 pkg_path := getTestDir("test_with_external_deps") 206 assert.Equal(t, utils.DirExists(filepath.Join(pkg_path, "kcl.mod")), true) 207 kpmcli, err := client.NewKpmClient() 208 assert.Equal(t, err, nil) 209 kclPkg, err := kpmcli.LoadPkgFromPath(pkg_path) 210 assert.Equal(t, err, nil) 211 212 _, depGraph, err := kpmcli.InitGraphAndDownloadDeps(kclPkg) 213 assert.Equal(t, err, nil) 214 215 reqs := ReqsGraph{ 216 depGraph, 217 kpmcli, 218 kclPkg, 219 } 220 221 target := module.Version{Path: kclPkg.GetPkgName(), Version: kclPkg.GetPkgVersion()} 222 downgradeList := []module.Version{ 223 {Path: "k8s", Version: "1.17"}, 224 } 225 downgrade, err := mvs.Downgrade(target, reqs, downgradeList...) 226 assert.Equal(t, err, nil) 227 228 expectedReqs := []module.Version{ 229 {Path: "test_with_external_deps", Version: "0.0.1"}, 230 {Path: "argo-cd-order", Version: "0.1.2"}, 231 {Path: "helloworld", Version: "0.1.0"}, 232 {Path: "json_merge_patch", Version: "0.1.0"}, 233 {Path: "k8s", Version: "1.17"}, 234 } 235 assert.Equal(t, downgrade, expectedReqs) 236 }