Files
warewulf/overlays/NetworkManager/internal/networkmanager_test.go
Jonathon Anderson c209dadc1f Update network interface bonding configuration and documentation
- Closes: #1482
- Closes: #1280

This also corrects poor handling of whitespace around the "file" function
throughout the templates, given experiences with the network templates while
implementing the bond behavior. Since the file function actually does produce
output (that is parsed by Warewulf itself) it should not collaps prefix
whitespace.

Signed-off-by: Jonathon Anderson <janderson@ciq.com>
2025-01-21 09:42:27 -07:00

186 lines
4.5 KiB
Go

package networkmanager
import (
"bytes"
"testing"
"github.com/stretchr/testify/assert"
"github.com/warewulf/warewulf/internal/app/wwctl/overlay/show"
"github.com/warewulf/warewulf/internal/pkg/testenv"
"github.com/warewulf/warewulf/internal/pkg/wwlog"
)
func Test_networkmanagerOverlay(t *testing.T) {
env := testenv.New(t)
defer env.RemoveAll()
env.ImportFile("var/lib/warewulf/overlays/NetworkManager/rootfs/etc/NetworkManager/conf.d/ww4-unmanaged.ww", "../rootfs/etc/NetworkManager/conf.d/ww4-unmanaged.ww")
env.ImportFile("var/lib/warewulf/overlays/NetworkManager/rootfs/etc/NetworkManager/system-connections/ww4-managed.ww", "../rootfs/etc/NetworkManager/system-connections/ww4-managed.ww")
tests := []struct {
name string
nodes_conf string
args []string
log string
}{
{
name: "NetworkManager:ww4-unmanaged.ww",
nodes_conf: "nodes.conf",
args: []string{"--render", "node1", "NetworkManager", "etc/NetworkManager/conf.d/ww4-unmanaged.ww"},
log: networkmanager_unmanaged,
},
{
name: "NetworkManager:ww4-managed.ww",
nodes_conf: "nodes.conf",
args: []string{"--render", "node1", "NetworkManager", "etc/NetworkManager/system-connections/ww4-managed.ww"},
log: networkmanager_managed,
},
{
name: "NetworkManager:ww4-unmanaged.ww with empty mac address",
nodes_conf: "nodes_empty_mac.conf",
args: []string{"--render", "node1", "NetworkManager", "etc/NetworkManager/conf.d/ww4-unmanaged.ww"},
log: networkmanager_unmanaged_with_empty_mac,
},
{
name: "NetworkManager:ww4-managed.ww with vlan",
nodes_conf: "nodes.conf-vlan",
args: []string{"--render", "node1", "NetworkManager", "etc/NetworkManager/system-connections/ww4-managed.ww"},
log: networkmanager_managed_with_vlan,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
env.ImportFile("etc/warewulf/nodes.conf", tt.nodes_conf)
cmd := show.GetCommand()
cmd.SetArgs(tt.args)
stdout := bytes.NewBufferString("")
stderr := bytes.NewBufferString("")
logbuf := bytes.NewBufferString("")
cmd.SetOut(stdout)
cmd.SetErr(stderr)
wwlog.SetLogWriter(logbuf)
err := cmd.Execute()
assert.NoError(t, err)
assert.Empty(t, stdout.String())
assert.Empty(t, stderr.String())
assert.Equal(t, tt.log, logbuf.String())
})
}
}
const networkmanager_unmanaged_with_empty_mac string = `backupFile: true
writeFile: true
Filename: warewulf-unmanaged.conf
# This file is autogenerated by warewulf
[main]
plugins=keyfile
[keyfile]
unmanaged-devices=except:interface-name:wwnet0,except:mac:9a:77:29:73:14:f1,except:interface-name:wwnet1,
`
const networkmanager_unmanaged string = `backupFile: true
writeFile: true
Filename: warewulf-unmanaged.conf
# This file is autogenerated by warewulf
[main]
plugins=keyfile
[keyfile]
unmanaged-devices=except:mac:e6:92:39:49:7b:03,except:interface-name:wwnet0,except:mac:9a:77:29:73:14:f1,except:interface-name:wwnet1,
`
const networkmanager_managed string = `backupFile: true
writeFile: true
Filename: warewulf-default.conf
# This file is autogenerated by warewulf
[connection]
id=default
interface-name=wwnet0
type=ethernet
autoconnect=true
[ethernet]
mac-address=e6:92:39:49:7b:03
[ipv4]
method=manual
address=192.168.3.21/24
gateway=192.168.3.1
[ipv6]
addr-gen-mode=stable-privacy
method=ignore
never-default=true
backupFile: true
writeFile: true
Filename: warewulf-secondary.conf
# This file is autogenerated by warewulf
[connection]
id=secondary
interface-name=wwnet1
type=ethernet
autoconnect=true
[ethernet]
mac-address=9a:77:29:73:14:f1
[ipv4]
method=manual
address=192.168.3.22/24
gateway=192.168.3.1
dns=8.8.8.8;8.8.4.4;
[ipv6]
addr-gen-mode=stable-privacy
method=ignore
never-default=true
`
const networkmanager_managed_with_vlan string = `backupFile: true
writeFile: true
Filename: warewulf-tagged.conf
# This file is autogenerated by warewulf
[connection]
id=tagged
interface-name=eth0.902
type=vlan
autoconnect=true
[ethernet]
[ipv4]
method=manual
address=<nil>
route1=192.168.1.0/24,192.168.2.254
[vlan]
interface-name=eth0.902
parent=eth0
id=902
[ipv6]
addr-gen-mode=stable-privacy
method=ignore
never-default=true
backupFile: true
writeFile: true
Filename: warewulf-untagged.conf
# This file is autogenerated by warewulf
[connection]
id=untagged
interface-name=eth0
type=ethernet
autoconnect=true
[ethernet]
[ipv4]
method=manual
address=<nil>
[ipv6]
addr-gen-mode=stable-privacy
method=ignore
never-default=true
`