Container list has now options for full, kernel and size listing. Without any arguments only available containers are listed. Size is no more fine granular showing also size of the image, chroot and compressed image Signed-off-by: Christian Goll <cgoll@suse.com>
96 lines
2.1 KiB
Go
96 lines
2.1 KiB
Go
package list
|
|
|
|
import (
|
|
"bytes"
|
|
"io"
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/warewulf/warewulf/internal/pkg/api/routes/wwapiv1"
|
|
warewulfconf "github.com/warewulf/warewulf/internal/pkg/config"
|
|
"github.com/warewulf/warewulf/internal/pkg/node"
|
|
"github.com/warewulf/warewulf/internal/pkg/warewulfd"
|
|
)
|
|
|
|
func Test_List(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
args []string
|
|
stdout string
|
|
inDb string
|
|
mockFunc func()
|
|
}{
|
|
{
|
|
name: "container list test",
|
|
args: []string{"-l"},
|
|
stdout: `test 1 kernel`,
|
|
inDb: `WW_INTERNAL: 45
|
|
nodeprofiles:
|
|
default: {}
|
|
nodes:
|
|
n01:
|
|
profiles:
|
|
- default
|
|
`,
|
|
mockFunc: func() {
|
|
containerList = func() (containerInfo []*wwapiv1.ContainerInfo, err error) {
|
|
containerInfo = append(containerInfo, &wwapiv1.ContainerInfo{
|
|
Name: "test",
|
|
NodeCount: 1,
|
|
KernelVersion: "kernel",
|
|
CreateDate: uint64(time.Unix(0, 0).Unix()),
|
|
ModDate: uint64(time.Unix(0, 0).Unix()),
|
|
Size: uint64(1),
|
|
})
|
|
return
|
|
}
|
|
},
|
|
},
|
|
}
|
|
|
|
conf_yml := `
|
|
WW_INTERNAL: 0
|
|
`
|
|
|
|
conf := warewulfconf.Get()
|
|
err := conf.Parse([]byte(conf_yml))
|
|
assert.NoError(t, err)
|
|
warewulfd.SetNoDaemon()
|
|
for _, tt := range tests {
|
|
_, err = node.Parse([]byte(tt.inDb))
|
|
assert.NoError(t, err)
|
|
t.Logf("Running test: %s\n", tt.name)
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
tt.mockFunc()
|
|
baseCmd := GetCommand()
|
|
baseCmd.SetArgs(tt.args)
|
|
baseCmd.SetOut(nil)
|
|
baseCmd.SetErr(nil)
|
|
stdoutR, stdoutW, _ := os.Pipe()
|
|
os.Stdout = stdoutW
|
|
err = baseCmd.Execute()
|
|
if err != nil {
|
|
t.Errorf("Received error when running command, err: %v", err)
|
|
t.FailNow()
|
|
}
|
|
stdoutC := make(chan string)
|
|
go func() {
|
|
var buf bytes.Buffer
|
|
_, _ = io.Copy(&buf, stdoutR)
|
|
stdoutC <- buf.String()
|
|
}()
|
|
stdoutW.Close()
|
|
|
|
stdout := <-stdoutC
|
|
assert.NotEmpty(t, stdout, "os.stdout should not be empty")
|
|
if !strings.Contains(stdout, tt.stdout) {
|
|
t.Errorf("Got wrong output, got:\n '%s'\n, but want:\n '%s'\n", stdout, tt.stdout)
|
|
t.FailNow()
|
|
}
|
|
})
|
|
}
|
|
}
|