github.com/KusionStack/kpm@v0.8.4-0.20240326033734-dc72298a30e5/pkg/utils/utils_test.go (about)

     1  package utils
     2  
     3  import (
     4  	"os"
     5  	"path/filepath"
     6  	"testing"
     7  
     8  	"github.com/stretchr/testify/assert"
     9  )
    10  
    11  const testDataDir = "test_data"
    12  
    13  func getTestDir(subDir string) string {
    14  	pwd, _ := os.Getwd()
    15  	testDir := filepath.Join(pwd, testDataDir)
    16  	testDir = filepath.Join(testDir, subDir)
    17  
    18  	return testDir
    19  }
    20  
    21  func TestParseRepoNameFromGitUrl(t *testing.T) {
    22  	assert.Equal(t, ParseRepoNameFromGitUrl("test"), "test", "ParseRepoNameFromGitUrl failed.")
    23  	assert.Equal(t, ParseRepoNameFromGitUrl("test.git"), "test", "ParseRepoNameFromGitUrl failed.")
    24  	assert.Equal(t, ParseRepoNameFromGitUrl("test.git.git"), "test.git", "ParseRepoNameFromGitUrl failed.")
    25  	assert.Equal(t, ParseRepoNameFromGitUrl("https://test.git"), "test", "ParseRepoNameFromGitUrl failed.")
    26  	assert.Equal(t, ParseRepoNameFromGitUrl("https://test.git.git"), "test.git", "ParseRepoNameFromGitUrl failed.")
    27  	assert.Equal(t, ParseRepoNameFromGitUrl("httfsdafps://test.git.git"), "test.git", "ParseRepoNameFromGitUrl failed.")
    28  }
    29  
    30  type TestPath struct {
    31  	FilePath string
    32  }
    33  
    34  func (tp *TestPath) TestStore() error {
    35  	return StoreToFile(tp.FilePath, "test")
    36  }
    37  
    38  func TestCreateFileIfNotExist(t *testing.T) {
    39  	test_path := getTestDir("test_exist.txt")
    40  	isExist, _ := Exists(test_path)
    41  	assert.Equal(t, isExist, false)
    42  
    43  	tp := TestPath{
    44  		FilePath: test_path,
    45  	}
    46  	err := CreateFileIfNotExist(tp.FilePath, tp.TestStore)
    47  	assert.Equal(t, err, nil)
    48  
    49  	isExist, _ = Exists(test_path)
    50  	assert.Equal(t, isExist, true)
    51  
    52  	_ = os.Remove(test_path)
    53  	isExist, _ = Exists(test_path)
    54  	assert.Equal(t, isExist, false)
    55  }
    56  
    57  func TestHashDir(t *testing.T) {
    58  	test_path := filepath.Join(getTestDir("test_hash"), "test_hash.txt")
    59  	tp := TestPath{
    60  		FilePath: test_path,
    61  	}
    62  
    63  	_ = CreateFileIfNotExist(tp.FilePath, tp.TestStore)
    64  	res, err := HashDir(filepath.Dir(tp.FilePath))
    65  	assert.Equal(t, err, nil)
    66  	assert.Equal(t, res, "n4bQgYhMfWWaL+qgxVrQFaO/TxsrC4Is0V1sFbDwCgg=")
    67  }
    68  
    69  func TestTarDir(t *testing.T) {
    70  	testDir := getTestDir("test_tar")
    71  	tarPath := filepath.Join(testDir, "test.tar")
    72  
    73  	_, err := os.Stat(tarPath)
    74  	if !os.IsNotExist(err) {
    75  		os.Remove(tarPath)
    76  	}
    77  
    78  	err = TarDir(filepath.Join(testDir, "test_src"), tarPath)
    79  	assert.Equal(t, err, nil)
    80  
    81  	_, err = os.Stat(tarPath)
    82  	assert.Equal(t, err, nil)
    83  	os.Remove(tarPath)
    84  }
    85  
    86  func TestUnTarDir(t *testing.T) {
    87  	testDir := getTestDir("test_un_tar")
    88  	tarPath := filepath.Join(testDir, "test.tar")
    89  	testSrc := filepath.Join(testDir, "test_src")
    90  
    91  	err := UnTarDir(tarPath, testSrc)
    92  	assert.Equal(t, err, nil)
    93  
    94  	_, err = os.Stat(testSrc)
    95  	assert.Equal(t, err, nil)
    96  	_ = os.RemoveAll(testSrc)
    97  }
    98  
    99  func TestDefaultKpmHome(t *testing.T) {
   100  	homeDir, _ := os.UserHomeDir()
   101  
   102  	filePath := filepath.Join(homeDir, ".kpm")
   103  
   104  	kpmHome, err := CreateSubdirInUserHome(".kpm")
   105  	assert.Equal(t, err, nil)
   106  	assert.Equal(t, kpmHome, filePath)
   107  	assert.Equal(t, DirExists(kpmHome), true)
   108  }
   109  
   110  func TestJoinPath(t *testing.T) {
   111  	assert.Equal(t, JoinPath("base", "elem"), "base/elem")
   112  	assert.Equal(t, JoinPath("base/", "elem"), "base/elem")
   113  	assert.Equal(t, JoinPath("base", "/elem"), "base/elem")
   114  	assert.Equal(t, JoinPath("", "/elem"), "/elem")
   115  	assert.Equal(t, JoinPath("", "elem"), "/elem")
   116  	assert.Equal(t, JoinPath("base/", ""), "base/")
   117  	assert.Equal(t, JoinPath("base", ""), "base/")
   118  }
   119  
   120  func TestIsUrl(t *testing.T) {
   121  	assert.Equal(t, IsURL("invalid url"), false)
   122  	assert.Equal(t, IsURL("https://url/xxx"), true)
   123  	assert.Equal(t, IsURL("https://url"), true)
   124  	assert.Equal(t, IsURL("https://"), false)
   125  }
   126  
   127  func TestIsGitRepoUrl(t *testing.T) {
   128  	assert.Equal(t, IsGitRepoUrl("invalid url"), false)
   129  	assert.Equal(t, IsGitRepoUrl("ftp://github.com/user/project.git"), false)
   130  	assert.Equal(t, IsGitRepoUrl("file:///path/to/repo.git/"), false)
   131  	assert.Equal(t, IsGitRepoUrl("file://~/path/to/repo.git/"), false)
   132  	assert.Equal(t, IsGitRepoUrl("path/to/repo.git/"), false)
   133  	assert.Equal(t, IsGitRepoUrl("~/path/to/repo.git"), false)
   134  	assert.Equal(t, IsGitRepoUrl("rsync://host.xz/path/to/repo.git/"), false)
   135  	assert.Equal(t, IsGitRepoUrl("host.xz:path/to/repo.git"), false)
   136  	assert.Equal(t, IsGitRepoUrl("user@host.xz:path/to/repo.git"), false)
   137  	assert.Equal(t, IsGitRepoUrl("C:\\path\\to\\repo.git"), false)
   138  	assert.Equal(t, IsGitRepoUrl("/path/to/repo.git"), false)
   139  	assert.Equal(t, IsGitRepoUrl("./path/to/repo.git"), false)
   140  	assert.Equal(t, IsGitRepoUrl("oci://host.xz/path/to/repo.git/"), false)
   141  	assert.Equal(t, IsGitRepoUrl("https://github.com/user/project"), true)
   142  	assert.Equal(t, IsGitRepoUrl("git@github.com:user/project.git"), true)
   143  	assert.Equal(t, IsGitRepoUrl("https://github.com/user/project.git"), true)
   144  	assert.Equal(t, IsGitRepoUrl("https://github.com/user/project.git"), true)
   145  	assert.Equal(t, IsGitRepoUrl("git@192.168.101.127:user/project.git"), true)
   146  	assert.Equal(t, IsGitRepoUrl("https://192.168.101.127/user/project.git"), true)
   147  	assert.Equal(t, IsGitRepoUrl("http://192.168.101.127/user/project.git"), true)
   148  	assert.Equal(t, IsGitRepoUrl("ssh://user@host.xz:port/path/to/repo.git/"), true)
   149  	assert.Equal(t, IsGitRepoUrl("ssh://user@host.xz/path/to/repo.git/"), true)
   150  	assert.Equal(t, IsGitRepoUrl("ssh://host.xz:port/path/to/repo.git/"), true)
   151  	assert.Equal(t, IsGitRepoUrl("ssh://host.xz/path/to/repo.git/"), true)
   152  	assert.Equal(t, IsGitRepoUrl("ssh://user@host.xz/path/to/repo.git/"), true)
   153  	assert.Equal(t, IsGitRepoUrl("ssh://user@host.xz/~user/path/to/repo.git/"), true)
   154  	assert.Equal(t, IsGitRepoUrl("ssh://host.xz/~user/path/to/repo.git/"), true)
   155  	assert.Equal(t, IsGitRepoUrl("ssh://user@host.xz/~/path/to/repo.git"), true)
   156  	assert.Equal(t, IsGitRepoUrl("git://host.xz/path/to/repo.git/"), true)
   157  	assert.Equal(t, IsGitRepoUrl("http://host.xz/path/to/repo.git/"), true)
   158  	assert.Equal(t, IsGitRepoUrl("https://host.xz/path/to/repo.git/"), true)
   159  }
   160  
   161  func TestIsRef(t *testing.T) {
   162  	assert.Equal(t, IsRef("invalid ref"), false)
   163  	assert.Equal(t, IsRef("ghcr.io/xxx/xxx"), true)
   164  	assert.Equal(t, IsRef("ghcr.io/xxx"), true)
   165  	assert.Equal(t, IsRef("ghcr.io/xxx:0.0.1"), true)
   166  	assert.Equal(t, IsRef("ghcr.io/"), false)
   167  }
   168  
   169  func TestIsTar(t *testing.T) {
   170  	assert.Equal(t, IsTar("invalid tar"), false)
   171  	assert.Equal(t, IsTar("xxx.tar"), true)
   172  }
   173  
   174  func TestIsKfile(t *testing.T) {
   175  	assert.Equal(t, IsKfile("invalid kfile"), false)
   176  	assert.Equal(t, IsKfile("xxx.k"), true)
   177  }
   178  
   179  func TestAbsTarPath(t *testing.T) {
   180  	pkgPath := getTestDir("test_check_tar_path")
   181  	expectAbsTarPath, _ := filepath.Abs(filepath.Join(pkgPath, "test.tar"))
   182  
   183  	abs, err := AbsTarPath(filepath.Join(pkgPath, "test.tar"))
   184  	assert.Equal(t, err, nil)
   185  	assert.Equal(t, abs, expectAbsTarPath)
   186  
   187  	abs, err = AbsTarPath(filepath.Join(pkgPath, "no_exist.tar"))
   188  	assert.NotEqual(t, err, nil)
   189  	assert.Equal(t, abs, "")
   190  
   191  	abs, err = AbsTarPath(filepath.Join(pkgPath, "invalid_tar"))
   192  	assert.NotEqual(t, err, nil)
   193  	assert.Equal(t, abs, "")
   194  }