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  }