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= 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= [ipv6] addr-gen-mode=stable-privacy method=ignore never-default=true `