github.com/criteo/command-launcher@v0.0.0-20230407142452-fb616f546e98/internal/repository/default-repo-index_test.go (about) 1 package repository 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/criteo/command-launcher/internal/command" 8 "github.com/stretchr/testify/assert" 9 ) 10 11 func generateTestRepoIndex(reg RepoIndex, numOfPkgs int, numOfCmds int) error { 12 for i := 0; i < numOfPkgs; i++ { 13 pkg := defaultRepoIndexEntry{ 14 PkgName: fmt.Sprintf("test-%d", i), 15 PkgVersion: "1.0.0", 16 PkgCommands: []*command.DefaultCommand{}, 17 } 18 19 for j := 0; j < numOfCmds; j++ { 20 cmd := command.DefaultCommand{ 21 CmdName: fmt.Sprintf("test-%d-%d", i, j), 22 CmdType: "executable", 23 CmdGroup: "test-group", 24 CmdCategory: "", 25 CmdShortDescription: "Short Description", 26 CmdLongDescription: "Long Description", 27 CmdExecutable: "#CACHE#/#OS#/#ARCH#/test#EXT#", 28 CmdArguments: []string{"option1", "option2"}, 29 CmdDocFile: "#CACHE#/doc/index.md", 30 CmdDocLink: "https://dummy/doc/", 31 CmdValidArgs: []string{"arg1", "arg2", "arg3"}, 32 CmdRequiredFlags: []string{"moab", "moab-id"}, 33 CmdCheckFlags: false, 34 PkgDir: "", 35 } 36 pkg.PkgCommands = append(pkg.PkgCommands, &cmd) 37 } 38 err := reg.Add(&pkg, "", "test-pkg-dir-name") 39 if err != nil { 40 return err 41 } 42 } 43 44 return nil 45 } 46 47 func Test_defaultRepoIndex_Add(t *testing.T) { 48 nbOfPkgs := 10 49 nbOfCmds := 5 50 51 reg, err := newDefaultRepoIndex("default") 52 assert.Nil(t, err) 53 err = generateTestRepoIndex(reg, nbOfPkgs, nbOfCmds) 54 assert.Nil(t, err) 55 56 pkgs := reg.AllPackages() 57 assert.Equal(t, nbOfPkgs, len(pkgs), fmt.Sprintf("there must be %d packages", nbOfPkgs)) 58 59 exeCmds := reg.ExecutableCommands() 60 assert.Equal(t, nbOfPkgs*nbOfCmds, len(exeCmds), fmt.Sprintf("there must be %d executable cmds", nbOfPkgs*nbOfCmds)) 61 62 groupCmds := reg.GroupCommands() 63 assert.Equal(t, 0, len(groupCmds), "there should be no group cmds") 64 } 65 66 func Test_defaultRepoIndex_Remove(t *testing.T) { 67 nbOfPkgs := 2 68 nbOfCmds := 3 69 70 reg, err := newDefaultRepoIndex("default") 71 assert.Nil(t, err) 72 err = generateTestRepoIndex(reg, nbOfPkgs, nbOfCmds) 73 assert.Nil(t, err) 74 75 err = reg.Remove("test-0", "") 76 assert.Nil(t, err) 77 nbOfPkgs -= 1 78 79 pkgs := reg.AllPackages() 80 assert.Equal(t, nbOfPkgs, len(pkgs), fmt.Sprintf("there must be %d packages", nbOfPkgs)) 81 exeCmds := reg.ExecutableCommands() 82 assert.Equal(t, nbOfPkgs*nbOfCmds, len(exeCmds), fmt.Sprintf("there must be %d executable cmds", nbOfPkgs*nbOfCmds)) 83 84 err = reg.Remove("test-1", "") 85 assert.Nil(t, err) 86 nbOfPkgs -= 1 87 88 pkgs = reg.AllPackages() 89 assert.Equal(t, nbOfPkgs, len(pkgs), fmt.Sprintf("there must be %d packages", nbOfPkgs)) 90 exeCmds = reg.ExecutableCommands() 91 assert.Equal(t, nbOfPkgs*nbOfCmds, len(exeCmds), fmt.Sprintf("there must be %d executable cmds", nbOfPkgs*nbOfCmds)) 92 } 93 94 func Test_defaultRepoIndex_Update(t *testing.T) { 95 nbOfPkgs := 5 96 nbOfCmds := 3 97 98 reg, err := newDefaultRepoIndex("default") 99 assert.Nil(t, err) 100 err = generateTestRepoIndex(reg, nbOfPkgs, nbOfCmds) 101 assert.Nil(t, err) 102 103 pkg := defaultRepoIndexEntry{ 104 PkgName: fmt.Sprintf("test-%d", nbOfPkgs-2), 105 PkgVersion: "1.0.0", 106 PkgCommands: []*command.DefaultCommand{}, 107 } 108 109 err = reg.Update(&pkg, "", "test-pkg-dir-name") 110 assert.Nil(t, err) 111 112 pkgs := reg.AllPackages() 113 assert.Equal(t, nbOfPkgs, len(pkgs), fmt.Sprintf("there must be %d packages", nbOfPkgs)) 114 exeCmds := reg.ExecutableCommands() // the new package has no commands 115 assert.Equal(t, (nbOfPkgs-1)*nbOfCmds, len(exeCmds), fmt.Sprintf("there must be %d executable cmds", (nbOfPkgs-1)*nbOfCmds)) 116 } 117 118 func Test_defaultRepoIndex_Query(t *testing.T) { 119 nbOfPkgs := 10 120 nbOfCmds := 5 121 122 reg, err := newDefaultRepoIndex("default") 123 assert.Nil(t, err) 124 err = generateTestRepoIndex(reg, nbOfPkgs, nbOfCmds) 125 assert.Nil(t, err) 126 127 pkg, err := reg.Package("test-0") 128 assert.Nil(t, err) 129 assert.NotNil(t, pkg) 130 131 cmds := pkg.Commands() 132 assert.Equal(t, nbOfCmds, len(cmds), fmt.Sprintf("there must be %d executable cmds", nbOfCmds)) 133 134 cmd, err := reg.Command("test-1", "test-group", "test-1-2") 135 assert.Nil(t, err) 136 assert.NotNil(t, cmd) 137 assert.Equal(t, "executable", cmd.Type(), "The type must be executable") 138 }