Files
warewulf/internal/app/wwctl/node/imprt/main_test.go
Jonathon Anderson 1883f2e932 Added a test for wwctl node import
To support this, also added `wwctl node import --yes`.

Also corrected the spelling of `--cvs` to `--csv`.

Signed-off-by: Jonathon Anderson <janderson@ciq.com>
2025-03-25 20:00:48 -06:00

82 lines
1.6 KiB
Go

package imprt
import (
"bytes"
"os"
"testing"
"github.com/stretchr/testify/assert"
"github.com/warewulf/warewulf/internal/pkg/testenv"
"github.com/warewulf/warewulf/internal/pkg/warewulfd"
)
func Test_Node_Import(t *testing.T) {
tests := map[string]struct {
args []string
importFile string
wantErr bool
inDB string
outDB string
}{
"import new node": {
args: []string{"importFile"},
importFile: `
n1:
id: n1
profiles:
- default
network devices:
eth0:
device: eth0
hwaddr: c4:cb:e1:bb:dd:e9
ipaddr: 192.168.1.10`,
wantErr: false,
inDB: `
nodeprofiles: {}
nodes: {}`,
outDB: `
nodeprofiles: {}
nodes:
n1:
profiles:
- default
network devices:
eth0:
device: eth0
hwaddr: c4:cb:e1:bb:dd:e9
ipaddr: 192.168.1.10`,
},
}
for name, tt := range tests {
t.Run(name, func(t *testing.T) {
env := testenv.New(t)
defer env.RemoveAll()
{
wd, err := os.Getwd()
assert.NoError(t, err)
defer func() { assert.NoError(t, os.Chdir(wd)) }()
}
assert.NoError(t, os.Chdir(env.GetPath(".")))
env.WriteFile("./importFile", tt.importFile)
env.WriteFile("etc/warewulf/nodes.conf", tt.inDB)
warewulfd.SetNoDaemon()
baseCmd := GetCommand()
args := append(tt.args, "--yes")
baseCmd.SetArgs(args)
buf := new(bytes.Buffer)
baseCmd.SetOut(buf)
baseCmd.SetErr(buf)
err := baseCmd.Execute()
if tt.wantErr {
assert.Error(t, err)
} else {
assert.NoError(t, err)
content := env.ReadFile("etc/warewulf/nodes.conf")
assert.YAMLEq(t, tt.outDB, content)
}
})
}
}