Files
warewulf/internal/pkg/warewulfd/nodedb_test.go
Jonathon Anderson a2c7caa4ba Rebuild overlays for discovered nodes
- Fixes: #1468

Signed-off-by: Jonathon Anderson <janderson@ciq.com>
2025-07-09 14:29:38 -06:00

127 lines
2.5 KiB
Go

package warewulfd
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/warewulf/warewulf/internal/pkg/testenv"
)
func Test_GetNodeOrSetDiscoverable(t *testing.T) {
var tests = map[string]struct {
nodesConf string
hwaddr string
node string
err bool
initFiles []string
removedFiles []string
}{
"empty": {
nodesConf: `
nodes: {}
`,
hwaddr: "00:00:00:00:00:00",
err: true,
},
"configured": {
nodesConf: `
nodes:
n1:
network devices:
default:
hwaddr: 00:00:00:00:00:01
`,
hwaddr: "00:00:00:00:00:01",
node: "n1",
},
"discoverable": {
nodesConf: `
nodes:
n1:
discoverable: true
network devices:
default: {}
`,
hwaddr: "00:00:00:00:00:01",
node: "n1",
},
"discoverable autobuild": {
initFiles: []string{
"/srv/warewulf/overlays/n1/__SYSTEM__.img",
"/srv/warewulf/overlays/n1/__SYSTEM__.img.gz",
"/srv/warewulf/overlays/n1/__RUNTIME__.img",
"/srv/warewulf/overlays/n1/__RUNTIME__.img.gz",
},
removedFiles: []string{
"/srv/warewulf/overlays/n1/__SYSTEM__.img",
"/srv/warewulf/overlays/n1/__SYSTEM__.img.gz",
"/srv/warewulf/overlays/n1/__RUNTIME__.img",
"/srv/warewulf/overlays/n1/__RUNTIME__.img.gz",
},
nodesConf: `
nodes:
n1:
discoverable: true
network devices:
default: {}
`,
hwaddr: "00:00:00:00:00:01",
node: "n1",
},
"discoverable with primary": {
nodesConf: `
nodes:
n1:
discoverable: true
primary netdev: default
network devices:
default: {}
`,
hwaddr: "00:00:00:00:00:01",
node: "n1",
},
"discoverable without network": {
nodesConf: `
nodeprofiles:
default:
network devices:
default:
netmask: 255.255.255.0
nodes:
n1:
profiles:
- default
discoverable: true
`,
hwaddr: "00:00:00:00:00:01",
node: "n1",
},
}
for name, tt := range tests {
t.Run(name, func(t *testing.T) {
env := testenv.New(t)
for _, file := range tt.initFiles {
env.CreateFile(file)
}
defer env.RemoveAll()
env.WriteFile("/etc/warewulf/nodes.conf", tt.nodesConf)
err := LoadNodeDB()
assert.NoError(t, err)
node, err := GetNodeOrSetDiscoverable(tt.hwaddr, true)
if tt.err {
assert.Error(t, err)
} else {
assert.NoError(t, err)
assert.Equal(t, tt.node, node.Id())
}
for _, file := range tt.removedFiles {
assert.NoFileExists(t, env.GetPath(file), "File should not exist: %s", file)
}
})
}
}