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 }