kcl-lang.io/kpm@v0.8.7-0.20240520061008-9fc4c5efc8c7/pkg/package/package_test.go (about)

     1  package pkg
     2  
     3  import (
     4  	"os"
     5  	"path/filepath"
     6  	"testing"
     7  
     8  	"github.com/stretchr/testify/assert"
     9  	"kcl-lang.io/kpm/pkg/env"
    10  	"kcl-lang.io/kpm/pkg/opt"
    11  	"kcl-lang.io/kpm/pkg/reporter"
    12  	"kcl-lang.io/kpm/pkg/runner"
    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 initTestDir(subDir string) string {
    27  	testDir := getTestDir(subDir)
    28  	// clean the test data
    29  	_ = os.RemoveAll(testDir)
    30  	_ = os.Mkdir(testDir, 0755)
    31  
    32  	return testDir
    33  }
    34  
    35  func TestLoadKclPkg(t *testing.T) {
    36  	testDir := initTestDir("test_init_empty_mod")
    37  	kclPkg, err := LoadKclPkg(testDir)
    38  	if err == nil && kclPkg != nil {
    39  		t.Errorf("Failed to 'LoadKclPkg'.")
    40  	}
    41  
    42  	mfile := NewModFile(&opt.InitOptions{Name: "test_name", InitPath: testDir})
    43  	_ = mfile.StoreModFile()
    44  
    45  	kclPkg, err = LoadKclPkg(testDir)
    46  	if err != nil {
    47  		t.Errorf("Failed to 'LoadKclPkg'.")
    48  	}
    49  	assert.Equal(t, kclPkg.ModFile.Pkg.Name, "test_name")
    50  	assert.Equal(t, kclPkg.ModFile.Pkg.Version, "0.0.1")
    51  	assert.Equal(t, kclPkg.ModFile.Pkg.Edition, runner.GetKclVersion())
    52  	assert.Equal(t, len(kclPkg.ModFile.Dependencies.Deps), 0)
    53  	assert.Equal(t, len(kclPkg.Dependencies.Deps), 0)
    54  }
    55  
    56  func TestCheck(t *testing.T) {
    57  	testDir := getTestDir("test_check")
    58  	dep := Dependency{
    59  		FullName: "test_full_name",
    60  		Sum:      "",
    61  	}
    62  
    63  	testFullDir := filepath.Join(testDir, "test_full_name")
    64  
    65  	assert.Equal(t, check(dep, testFullDir), false)
    66  	dep.Sum = "sdfsldk"
    67  	assert.Equal(t, check(dep, testFullDir), false)
    68  	dep.Sum = "okQqHgQaR1il7vOPuZPPVostthK5nUJkZAZVgXMqU3Q="
    69  	assert.Equal(t, check(dep, testFullDir), true)
    70  }
    71  
    72  func TestGetPkgName(t *testing.T) {
    73  	kclPkg := KclPkg{
    74  		ModFile: ModFile{
    75  			Pkg: Package{
    76  				Name: "test",
    77  			},
    78  		},
    79  	}
    80  	assert.Equal(t, kclPkg.GetPkgName(), "test")
    81  }
    82  
    83  func TestValidateKpmHome(t *testing.T) {
    84  	kclPkg := NewKclPkg(&opt.InitOptions{
    85  		Name:     "test_name",
    86  		InitPath: "test_home_path",
    87  	})
    88  	oldValue := os.Getenv(env.PKG_PATH)
    89  	os.Setenv(env.PKG_PATH, "test_home_path")
    90  	err := kclPkg.ValidateKpmHome(os.Getenv(env.PKG_PATH))
    91  	assert.Equal(t, err.Error(), "environment variable KCL_PKG_PATH cannot be set to the same path as the current KCL package.\n")
    92  	assert.Equal(t, err.Type(), reporter.InvalidKpmHomeInCurrentPkg)
    93  	os.Setenv(env.PKG_PATH, oldValue)
    94  }
    95  
    96  func TestLoadKclPkgFromTar(t *testing.T) {
    97  	testDir := getTestDir("load_kcl_tar")
    98  	assert.Equal(t, utils.DirExists(filepath.Join(testDir, "kcl1-v0.0.3")), false)
    99  
   100  	kclPkg, err := LoadKclPkgFromTar(filepath.Join(testDir, "kcl1-v0.0.3.tar"))
   101  	assert.Equal(t, err, nil)
   102  	assert.Equal(t, kclPkg.HomePath, filepath.Join(testDir, "kcl1-v0.0.3"))
   103  	assert.Equal(t, kclPkg.ModFile.Pkg.Name, "kcl1")
   104  	assert.Equal(t, kclPkg.ModFile.Pkg.Edition, "0.0.1")
   105  	assert.Equal(t, kclPkg.ModFile.Pkg.Version, "0.0.3")
   106  
   107  	assert.Equal(t, len(kclPkg.ModFile.Deps), 2)
   108  	assert.Equal(t, kclPkg.ModFile.Deps["konfig"].Name, "konfig")
   109  	assert.Equal(t, kclPkg.ModFile.Deps["konfig"].FullName, "konfig_v0.0.1")
   110  	assert.Equal(t, kclPkg.ModFile.Deps["konfig"].Git.Url, "https://github.com/awesome-kusion/konfig.git")
   111  	assert.Equal(t, kclPkg.ModFile.Deps["konfig"].Git.Tag, "v0.0.1")
   112  
   113  	assert.Equal(t, kclPkg.ModFile.Deps["oci_konfig"].Name, "oci_konfig")
   114  	assert.Equal(t, kclPkg.ModFile.Deps["oci_konfig"].FullName, "oci_konfig_0.0.1")
   115  	assert.Equal(t, kclPkg.ModFile.Deps["oci_konfig"].Oci.Tag, "0.0.1")
   116  
   117  	assert.Equal(t, len(kclPkg.Deps), 2)
   118  	assert.Equal(t, kclPkg.Deps["konfig"].Name, "konfig")
   119  	assert.Equal(t, kclPkg.Deps["konfig"].FullName, "konfig_v0.0.1")
   120  	assert.Equal(t, kclPkg.Deps["konfig"].Git.Url, "https://github.com/awesome-kusion/konfig.git")
   121  	assert.Equal(t, kclPkg.Deps["konfig"].Git.Tag, "v0.0.1")
   122  	assert.Equal(t, kclPkg.Deps["konfig"].Sum, "XFvHdBAoY/+qpJWmj8cjwOwZO8a3nX/7SE35cTxQOFU=")
   123  
   124  	assert.Equal(t, kclPkg.Deps["oci_konfig"].Name, "oci_konfig")
   125  	assert.Equal(t, kclPkg.Deps["oci_konfig"].FullName, "oci_konfig_0.0.1")
   126  	assert.Equal(t, kclPkg.Deps["oci_konfig"].Oci.Reg, "ghcr.io")
   127  	assert.Equal(t, kclPkg.Deps["oci_konfig"].Oci.Repo, "awesome-kusion/oci_konfig")
   128  	assert.Equal(t, kclPkg.Deps["oci_konfig"].Oci.Tag, "0.0.1")
   129  	assert.Equal(t, kclPkg.Deps["oci_konfig"].Sum, "sLr3e6W4RPrXYyswdOSiKqkHes1QHX2tk6SwxAPDqqo=")
   130  
   131  	assert.Equal(t, kclPkg.GetPkgTag(), "0.0.3")
   132  	assert.Equal(t, kclPkg.GetPkgName(), "kcl1")
   133  	assert.Equal(t, kclPkg.GetPkgFullName(), "kcl1_0.0.3")
   134  	assert.Equal(t, kclPkg.GetPkgTarName(), "kcl1_0.0.3.tar")
   135  
   136  	assert.Equal(t, utils.DirExists(filepath.Join(testDir, "kcl1-v0.0.3")), true)
   137  	err = os.RemoveAll(filepath.Join(testDir, "kcl1-v0.0.3"))
   138  	assert.Equal(t, err, nil)
   139  }