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  }