github.com/criteo/command-launcher@v0.0.0-20230407142452-fb616f546e98/internal/repository/default-pkg-repository_test.go (about) 1 package repository 2 3 import ( 4 "fmt" 5 "os" 6 "path/filepath" 7 "strings" 8 "testing" 9 10 "github.com/criteo/command-launcher/internal/helper" 11 "github.com/criteo/command-launcher/internal/remote" 12 "github.com/stretchr/testify/assert" 13 ) 14 15 func TestLocalRepository(t *testing.T) { 16 localRepoPath := strings.ReplaceAll(filepath.Join(t.TempDir(), "local-repo-test"), "\\", "/") 17 err := os.Mkdir(localRepoPath, 0755) 18 assert.Nil(t, err) 19 20 regFile, err := os.Create(filepath.Join(localRepoPath, "registry.json")) 21 assert.Nil(t, err) 22 defer regFile.Close() 23 regFile.WriteString(fmt.Sprintf(`{ 24 "ls": { 25 "pkgName": "ls", 26 "version": "0.0.2", 27 "cmds": [ 28 {"name": "ls", 29 "category": "", 30 "type": "executable", 31 "group": "", 32 "short": "A wrapper of linux command 'ls'", 33 "long": "A wrapper of linux command 'ls'", 34 "executable": "ls", 35 "args": ["-l", "-a"], 36 "docFile": "", 37 "docLink": "", 38 "validArgs": null, 39 "validArgsCmd": null, 40 "requiredFlags": null, 41 "pkgDir": "%s/%s"} 42 ] 43 } 44 }`, localRepoPath, "ls-0.0.2")) 45 46 reg, err := newJsonRepoIndex("dropin", filepath.Join(localRepoPath, "registry.json")) 47 assert.Nil(t, err) 48 49 localRepo, err := CreateLocalRepository("default", localRepoPath, reg) 50 assert.Nil(t, err) 51 52 ls, err := localRepo.Command("ls", "", "ls") 53 assert.Nil(t, err) 54 assert.Equal(t, "ls", ls.Name()) 55 assert.Equal(t, "executable", ls.Type()) 56 57 cmds := localRepo.InstalledCommands() 58 assert.Equal(t, 1, len(cmds)) 59 assert.Equal(t, "ls", cmds[0].Name()) 60 61 pkgs := localRepo.InstalledPackages() 62 assert.Equal(t, 1, len(pkgs)) 63 assert.Equal(t, "ls", pkgs[0].Name()) 64 assert.Equal(t, "0.0.2", pkgs[0].Version()) 65 66 execCmds := localRepo.InstalledExecutableCommands() 67 assert.Equal(t, 1, len(execCmds)) 68 assert.Equal(t, "ls", execCmds[0].Name()) 69 70 groupCmds := localRepo.InstalledGroupCommands() 71 assert.Equal(t, 0, len(groupCmds)) 72 73 } 74 75 func TestInstallCommand(t *testing.T) { 76 // init remote 77 basePath := filepath.Join(t.TempDir(), "remote-test") 78 err := os.Mkdir(basePath, 0755) 79 assert.Nil(t, err) 80 81 indexPath := filepath.Join(basePath, "index.json") 82 err = helper.CopyLocalFile("../remote/assets/remote/basic-index.json", indexPath, false) 83 assert.Nil(t, err) 84 85 err = helper.CopyLocalFile("../remote/assets/ls-0.0.3.pkg", filepath.Join(basePath, "ls-0.0.3.pkg"), false) 86 assert.Nil(t, err) 87 88 err = helper.CopyLocalFile("../remote/assets/ls-0.0.2.pkg", filepath.Join(basePath, "ls-0.0.2.pkg"), false) 89 assert.Nil(t, err) 90 91 remoteRepo := remote.CreateRemoteRepository(fmt.Sprintf("file://%s", basePath)) 92 remoteRepo.Fetch() 93 94 // init local repo 95 localRepoPath := filepath.Join(t.TempDir(), "local-repo-test") 96 err = os.Mkdir(localRepoPath, 0755) 97 assert.Nil(t, err) 98 99 reg, err := newJsonRepoIndex("dropin", filepath.Join(localRepoPath, "registry.json")) 100 assert.Nil(t, err) 101 102 localRepo, err := CreateLocalRepository("default", localRepoPath, reg) 103 assert.Nil(t, err) 104 assert.Equal(t, 0, len(localRepo.InstalledCommands())) 105 106 // install package 107 lsPkg, err := remoteRepo.Package("ls", "0.0.2") 108 assert.Nil(t, err) 109 err = localRepo.Install(lsPkg) 110 assert.Nil(t, err) 111 112 installedCmds := localRepo.InstalledCommands() 113 assert.Equal(t, 1, len(installedCmds)) 114 assert.Equal(t, "ls", installedCmds[0].Name()) 115 116 installedPkgs := localRepo.InstalledPackages() 117 assert.Equal(t, 1, len(installedPkgs)) 118 assert.Equal(t, "ls", installedPkgs[0].Name()) 119 assert.Equal(t, "0.0.2", installedPkgs[0].Version()) 120 121 pkgManifest, err := localRepo.Package("ls") 122 assert.Nil(t, err) 123 assert.Equal(t, "ls", pkgManifest.Name()) 124 assert.Equal(t, "0.0.2", pkgManifest.Version()) 125 126 // upadte it 127 lsV3, err := remoteRepo.Package("ls", "0.0.3") 128 assert.Nil(t, err) 129 130 err = localRepo.Update(lsV3) 131 assert.Nil(t, err) 132 133 pkgManifest, err = localRepo.Package("ls") 134 assert.Nil(t, err) 135 assert.Equal(t, "ls", pkgManifest.Name()) 136 assert.Equal(t, "0.0.3", pkgManifest.Version()) 137 138 // now uninstall it 139 err = localRepo.Uninstall("ls") 140 assert.Nil(t, err) 141 assert.Equal(t, 0, len(localRepo.InstalledCommands())) 142 } 143 144 func Test_Load(t *testing.T) { 145 pathname, err := filepath.Abs("assets/simple_dropins/") 146 if err == nil { 147 fmt.Println("Absolute:", pathname) 148 } 149 150 reg, err := newDefaultRepoIndex("default") 151 assert.Nil(t, err) 152 153 repo, err := CreateLocalRepository("default", pathname, reg) 154 assert.Nil(t, err) 155 156 assert.Equal(t, 1, len(repo.InstalledGroupCommands())) 157 assert.Equal(t, 1, len(repo.InstalledExecutableCommands())) 158 159 assert.Equal(t, "wf", repo.InstalledGroupCommands()[0].Name()) 160 assert.Equal(t, "debug-cdt-env", repo.InstalledExecutableCommands()[0].Name()) 161 } 162 163 func Test_Load_Unexist_Folder(t *testing.T) { 164 pathname, err := filepath.Abs("assets/simple_dropins_not_exist/") 165 if err == nil { 166 fmt.Println("Absolute:", pathname) 167 } 168 169 reg, err := newDefaultRepoIndex("default") 170 assert.Nil(t, err) 171 172 repo, err := CreateLocalRepository("default", pathname, reg) 173 assert.Nil(t, err) 174 175 assert.Equal(t, 0, len(repo.InstalledGroupCommands())) 176 assert.Equal(t, 0, len(repo.InstalledExecutableCommands())) 177 } 178 179 func Test_Load_Malformat_Manifest(t *testing.T) { 180 pathname, err := filepath.Abs("assets/dropins_wrong_manifest_format/") 181 if err == nil { 182 fmt.Println("Absolute:", pathname) 183 } 184 185 reg, err := newDefaultRepoIndex("default") 186 assert.Nil(t, err) 187 188 repo, err := CreateLocalRepository("default", pathname, reg) 189 assert.Nil(t, err) 190 191 assert.Equal(t, 0, len(repo.InstalledGroupCommands())) 192 assert.Equal(t, 0, len(repo.InstalledExecutableCommands())) 193 194 } 195 196 func Test_Load_Multiple_Pkgs(t *testing.T) { 197 pathname, err := filepath.Abs("assets/dropins_multiple_pkgs/") 198 if err == nil { 199 fmt.Println("Absolute:", pathname) 200 } 201 202 reg, err := newDefaultRepoIndex("default") 203 assert.Nil(t, err) 204 205 repo, err := CreateLocalRepository("default", pathname, reg) 206 assert.Nil(t, err) 207 208 assert.Equal(t, 2, len(repo.InstalledGroupCommands())) 209 assert.Equal(t, 2, len(repo.InstalledExecutableCommands())) 210 } 211 212 func Test_Load_Symlink(t *testing.T) { 213 pathname, err := filepath.Abs("assets/symlink_dropins/") 214 if err == nil { 215 fmt.Println("Absolute:", pathname) 216 } 217 218 reg, err := newDefaultRepoIndex("default") 219 assert.Nil(t, err) 220 221 repo, err := CreateLocalRepository("default", pathname, reg) 222 assert.Nil(t, err) 223 224 assert.Equal(t, 1, len(repo.InstalledGroupCommands())) 225 assert.Equal(t, 1, len(repo.InstalledExecutableCommands())) 226 227 assert.Equal(t, "wf", repo.InstalledGroupCommands()[0].Name()) 228 assert.Equal(t, "debug-cdt-env", repo.InstalledExecutableCommands()[0].Name()) 229 }