package daemon import ( "context" "testing" "banger/internal/model" "banger/internal/vmdns" ) func TestSyncVMDNSResolverRoutingConfiguresResolved(t *testing.T) { origLookup := lookupExecutableFunc origAddr := vmDNSAddrFunc t.Cleanup(func() { lookupExecutableFunc = origLookup vmDNSAddrFunc = origAddr }) lookupExecutableFunc = func(name string) (string, error) { if name == "resolvectl" { return "/usr/bin/resolvectl", nil } return "", nil } vmDNSAddrFunc = func(*vmdns.Server) string { return "127.0.0.1:42069" } runner := &scriptedRunner{ t: t, steps: []runnerStep{ {call: runnerCall{name: "ip", args: []string{"link", "show", model.DefaultBridgeName}}, out: []byte("1: br-fc\n")}, sudoStep("", nil, "resolvectl", "dns", model.DefaultBridgeName, "127.0.0.1:42069"), sudoStep("", nil, "resolvectl", "domain", model.DefaultBridgeName, vmResolverRouteDomain), sudoStep("", nil, "resolvectl", "default-route", model.DefaultBridgeName, "no"), }, } d := &Daemon{ runner: runner, config: model.DaemonConfig{BridgeName: model.DefaultBridgeName}, vmDNS: new(vmdns.Server), } if err := d.syncVMDNSResolverRouting(context.Background()); err != nil { t.Fatalf("syncVMDNSResolverRouting: %v", err) } runner.assertExhausted() } func TestClearVMDNSResolverRoutingRevertsBridgeConfig(t *testing.T) { origLookup := lookupExecutableFunc t.Cleanup(func() { lookupExecutableFunc = origLookup }) lookupExecutableFunc = func(name string) (string, error) { if name == "resolvectl" { return "/usr/bin/resolvectl", nil } return "", nil } runner := &scriptedRunner{ t: t, steps: []runnerStep{ {call: runnerCall{name: "ip", args: []string{"link", "show", model.DefaultBridgeName}}, out: []byte("1: br-fc\n")}, sudoStep("", nil, "resolvectl", "revert", model.DefaultBridgeName), }, } d := &Daemon{ runner: runner, config: model.DaemonConfig{BridgeName: model.DefaultBridgeName}, } if err := d.clearVMDNSResolverRouting(context.Background()); err != nil { t.Fatalf("clearVMDNSResolverRouting: %v", err) } runner.assertExhausted() }