github.com/criteo/command-launcher@v0.0.0-20230407142452-fb616f546e98/internal/repository/json-repo-index_test.go (about)

     1  package repository
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"path/filepath"
     7  	"testing"
     8  	"time"
     9  
    10  	"github.com/stretchr/testify/assert"
    11  )
    12  
    13  func TestStore(t *testing.T) {
    14  	path := filepath.Join(t.TempDir(), "test-reg.json")
    15  	reg, err := newJsonRepoIndex("dropin", path)
    16  	assert.Nil(t, err)
    17  	err = generateTestRepoIndex(reg, 1, 1)
    18  	assert.Nil(t, err)
    19  
    20  	exeCmds := reg.ExecutableCommands()
    21  	assert.Equal(t, 1, len(exeCmds), "there must be 1 executable cmds")
    22  
    23  	groupCmds := reg.GroupCommands()
    24  	assert.Equal(t, 0, len(groupCmds), "there should be no group cmds")
    25  
    26  	_, err = os.Stat(path)
    27  	assert.Nil(t, err)
    28  	assert.False(t, os.IsNotExist(err))
    29  }
    30  
    31  func TestLoad(t *testing.T) {
    32  	path := filepath.Join(t.TempDir(), "test-reg.json")
    33  	reg, err := newJsonRepoIndex("dropin", path)
    34  	assert.Nil(t, err)
    35  	err = generateTestRepoIndex(reg, 1, 1)
    36  	assert.Nil(t, err)
    37  
    38  	exeCmds := reg.ExecutableCommands()
    39  	assert.Equal(t, 1, len(exeCmds), "there should be 1 executable cmds")
    40  }
    41  
    42  func TestAddRemove(t *testing.T) {
    43  	path := filepath.Join(t.TempDir(), "test-reg.json")
    44  	reg, err := newJsonRepoIndex("dropin", path)
    45  	assert.Nil(t, err)
    46  	err = generateTestRepoIndex(reg, 1, 1)
    47  	assert.Nil(t, err)
    48  
    49  	exeCmds := reg.ExecutableCommands()
    50  	assert.Equal(t, 1, len(exeCmds), "there should be 1 executable cmd")
    51  
    52  	fmt.Println(exeCmds[0])
    53  
    54  	// c, err := reg.Command("test-group", "test-0-0")
    55  	// assert.Nil(t, err)
    56  	// assert.Equal(t, "test-0-0", c.Name())
    57  	// assert.Equal(t, "Short Description", c.ShortDescription())
    58  	//
    59  	err = reg.Remove("test-0", "")
    60  	assert.Nil(t, err)
    61  
    62  	exeCmds = reg.ExecutableCommands()
    63  	assert.Equal(t, 0, len(exeCmds))
    64  }
    65  
    66  func BenchmarkLoadLargeRepoIndex(t *testing.B) {
    67  	numOfPkg := 1000
    68  	numOfCmd := 10
    69  
    70  	path := filepath.Join(t.TempDir(), "test-reg.json")
    71  	reg, err := newJsonRepoIndex("dropin", path)
    72  	assert.Nil(t, err)
    73  	err = generateTestRepoIndex(reg, numOfPkg, numOfCmd)
    74  	assert.Nil(t, err)
    75  
    76  	exeCmds := reg.ExecutableCommands()
    77  	assert.Equal(t, numOfCmd*numOfPkg, len(exeCmds), "there should be right number of executable cmd")
    78  
    79  	start := time.Now()
    80  	loadedReg, err := newJsonRepoIndex("dropin", path)
    81  	elapsed := time.Since(start)
    82  	fmt.Println(elapsed)
    83  	assert.Nil(t, err)
    84  	loadedExeCmds := loadedReg.ExecutableCommands()
    85  	assert.Equal(t, len(exeCmds), len(loadedExeCmds), "should have same number of executable cmd")
    86  }