2026-06-22 16:06:57 +02:00
|
|
|
package networking
|
|
|
|
|
|
|
|
|
|
import "testing"
|
|
|
|
|
|
|
|
|
|
func TestValidateIfaceConfig(t *testing.T) {
|
|
|
|
|
tests := []struct {
|
|
|
|
|
name string
|
|
|
|
|
cfg IfaceConfig
|
|
|
|
|
wantErr bool
|
|
|
|
|
}{
|
|
|
|
|
{"valid static", IfaceConfig{
|
|
|
|
|
Method: "static", Address: "192.168.1.10", Prefix: 24, Gateway: "192.168.1.1",
|
|
|
|
|
DNS: []string{"1.1.1.1", "8.8.8.8"},
|
|
|
|
|
}, false},
|
|
|
|
|
{"valid static no gateway", IfaceConfig{
|
|
|
|
|
Method: "static", Address: "10.0.0.5", Prefix: 8,
|
|
|
|
|
}, false},
|
|
|
|
|
{"valid dhcp", IfaceConfig{Method: "dhcp"}, false},
|
|
|
|
|
{"valid with routes", IfaceConfig{
|
|
|
|
|
Method: "static", Address: "192.168.1.10", Prefix: 24,
|
|
|
|
|
Routes: []Route{
|
|
|
|
|
{Destination: "100.64.0.0/24", Gateway: "192.168.1.1"},
|
|
|
|
|
{Destination: "default", Gateway: "192.168.1.1"},
|
|
|
|
|
},
|
|
|
|
|
}, false},
|
|
|
|
|
{"static missing address", IfaceConfig{Method: "static", Prefix: 24}, true},
|
|
|
|
|
{"static bad address", IfaceConfig{Method: "static", Address: "not-an-ip", Prefix: 24}, true},
|
|
|
|
|
{"static bad gateway", IfaceConfig{Method: "static", Address: "10.0.0.1", Prefix: 24, Gateway: "bad"}, true},
|
|
|
|
|
{"bad method", IfaceConfig{Method: "pppoe"}, true},
|
|
|
|
|
{"bad dns", IfaceConfig{Method: "dhcp", DNS: []string{"not-an-ip"}}, true},
|
|
|
|
|
{"bad route destination", IfaceConfig{
|
|
|
|
|
Method: "static", Address: "10.0.0.1", Prefix: 24,
|
|
|
|
|
Routes: []Route{{Destination: "nope", Gateway: "10.0.0.1"}},
|
|
|
|
|
}, true},
|
|
|
|
|
{"bad route gateway", IfaceConfig{
|
|
|
|
|
Method: "static", Address: "10.0.0.1", Prefix: 24,
|
|
|
|
|
Routes: []Route{{Destination: "10.0.0.0/24", Gateway: "nope"}},
|
|
|
|
|
}, true},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for _, tt := range tests {
|
|
|
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
|
|
|
err := tt.cfg.validate()
|
|
|
|
|
if (err != nil) != tt.wantErr {
|
|
|
|
|
t.Errorf("validate() error = %v, wantErr %v", err, tt.wantErr)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestValidateIface(t *testing.T) {
|
2026-06-24 17:29:45 +02:00
|
|
|
for _, tt := range []struct {
|
|
|
|
|
name string
|
|
|
|
|
value string
|
|
|
|
|
valid bool
|
|
|
|
|
}{
|
|
|
|
|
{name: "eth0", value: "eth0", valid: true},
|
|
|
|
|
{name: "enp3s0", value: "enp3s0", valid: true},
|
|
|
|
|
{name: "wlan0", value: "wlan0", valid: true},
|
|
|
|
|
{name: "bridge", value: "br-lan", valid: true},
|
|
|
|
|
{name: "veth", value: "veth1234567", valid: true},
|
|
|
|
|
{name: "docker", value: "docker0", valid: true},
|
|
|
|
|
{name: "empty", value: "", valid: false},
|
|
|
|
|
{name: "leading dash", value: "-eth0", valid: false},
|
|
|
|
|
{name: "path", value: "/dev/net", valid: false},
|
|
|
|
|
{name: "space", value: "a b", valid: false},
|
|
|
|
|
{name: "too long", value: "name_that_is_way_too_long_for_linux", valid: false},
|
|
|
|
|
} {
|
|
|
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
|
|
|
err := validateIface(tt.value)
|
|
|
|
|
if tt.valid && err != nil {
|
|
|
|
|
t.Errorf("validateIface(%q) unexpected error: %v", tt.value, err)
|
|
|
|
|
}
|
|
|
|
|
if !tt.valid && err == nil {
|
|
|
|
|
t.Errorf("validateIface(%q) expected error", tt.value)
|
|
|
|
|
}
|
|
|
|
|
})
|
2026-06-22 16:06:57 +02:00
|
|
|
}
|
|
|
|
|
}
|