diff --git a/integrationdhcpv4_test.go b/integrationdhcpv4_test.go index ec4d352..a9f22cc 100644 --- a/integrationdhcpv4_test.go +++ b/integrationdhcpv4_test.go @@ -33,6 +33,7 @@ func TestDHCPv4(t *testing.T) { } for _, cmd := range nsSetup { + cmd.Stderr = os.Stderr if err := cmd.Run(); err != nil { t.Fatalf("%v: %v", cmd.Args, err) } @@ -45,7 +46,7 @@ func TestDHCPv4(t *testing.T) { ready.Close() // dnsmasq will re-create the file anyway defer os.Remove(ready.Name()) // dnsmasq does not clean up its pid file - dnsmasq := dnsmasq.Run(t) + dnsmasq := dnsmasq.Run(t, "veth0b") defer dnsmasq.Kill() // f, err := os.Create("/tmp/pcap") diff --git a/integrationdhcpv6_test.go b/integrationdhcpv6_test.go index 10312e3..b811003 100644 --- a/integrationdhcpv6_test.go +++ b/integrationdhcpv6_test.go @@ -1,6 +1,7 @@ package integration_test import ( + "os" "os/exec" "regexp" "strings" @@ -23,27 +24,28 @@ func TestDHCPv6(t *testing.T) { defer exec.Command("ip", "netns", "delete", ns).Run() nsSetup := []*exec.Cmd{ - exec.Command("ip", "link", "add", "veth0a", "type", "veth", "peer", "name", "veth0b", "netns", ns), + exec.Command("ip", "link", "add", "veth1a", "type", "veth", "peer", "name", "veth1b", "netns", ns), // Disable Duplicate Address Detection: until DAD completes, the link-local // address remains in state “tentative”, resulting in any attempts to // bind(2) to the address to fail with -EADDRNOTAVAIL. - exec.Command("/bin/sh", "-c", "echo 0 > /proc/sys/net/ipv6/conf/veth0a/accept_dad"), - exec.Command("ip", "netns", "exec", ns, "/bin/sh", "-c", "echo 0 > /proc/sys/net/ipv6/conf/veth0b/accept_dad"), + exec.Command("/bin/sh", "-c", "echo 0 > /proc/sys/net/ipv6/conf/veth1a/accept_dad"), + exec.Command("ip", "netns", "exec", ns, "/bin/sh", "-c", "echo 0 > /proc/sys/net/ipv6/conf/veth1b/accept_dad"), - exec.Command("ip", "link", "set", "veth0a", "up"), - exec.Command("ip", "netns", "exec", ns, "ip", "addr", "add", "192.168.23.1/24", "dev", "veth0b"), - exec.Command("ip", "netns", "exec", ns, "ip", "addr", "add", "2001:db8::1/64", "dev", "veth0b"), - exec.Command("ip", "netns", "exec", ns, "ip", "link", "set", "veth0b", "up"), + exec.Command("ip", "link", "set", "veth1a", "up"), + exec.Command("ip", "netns", "exec", ns, "ip", "addr", "add", "192.168.23.1/24", "dev", "veth1b"), + exec.Command("ip", "netns", "exec", ns, "ip", "addr", "add", "2001:db8::1/64", "dev", "veth1b"), + exec.Command("ip", "netns", "exec", ns, "ip", "link", "set", "veth1b", "up"), } for _, cmd := range nsSetup { + cmd.Stderr = os.Stderr if err := cmd.Run(); err != nil { t.Fatalf("%v: %v", cmd.Args, err) } } - dnsmasq := dnsmasq.Run(t) + dnsmasq := dnsmasq.Run(t, "veth1b") defer dnsmasq.Kill() // f, err := os.Create("/tmp/pcap6") @@ -81,7 +83,7 @@ func TestDHCPv6(t *testing.T) { duid := []byte{0x00, 0x0a, 0x00, 0x03, 0x00, 0x01, 0x4c, 0x5e, 0xc, 0x41, 0xbf, 0x39} c, err := dhcp6.NewClient(dhcp6.ClientConfig{ - InterfaceName: "veth0a", + InterfaceName: "veth1a", DUID: duid, }) if err != nil { @@ -105,11 +107,11 @@ func TestDHCPv6(t *testing.T) { dnsmasq.Kill() // flush log got := dnsmasq.Actions() want := []string{ - "DHCPSOLICIT(veth0b) 00:0a:00:03:00:01:4c:5e:0c:41:bf:39", - "DHCPADVERTISE(veth0b) 2001:db8::c 00:0a:00:03:00:01:4c:5e:0c:41:bf:39", - "DHCPREQUEST(veth0b) 00:0a:00:03:00:01:4c:5e:0c:41:bf:39", - "DHCPREPLY(veth0b) 2001:db8::c 00:0a:00:03:00:01:4c:5e:0c:41:bf:39", - "DHCPRELEASE(veth0b) 00:0a:00:03:00:01:4c:5e:0c:41:bf:39", + "DHCPSOLICIT(veth1b) 00:0a:00:03:00:01:4c:5e:0c:41:bf:39", + "DHCPADVERTISE(veth1b) 2001:db8::c 00:0a:00:03:00:01:4c:5e:0c:41:bf:39", + "DHCPREQUEST(veth1b) 00:0a:00:03:00:01:4c:5e:0c:41:bf:39", + "DHCPREPLY(veth1b) 2001:db8::c 00:0a:00:03:00:01:4c:5e:0c:41:bf:39", + "DHCPRELEASE(veth1b) 00:0a:00:03:00:01:4c:5e:0c:41:bf:39", } withoutMac := func(line string) string { return v6AddrRe.ReplaceAllString(strings.TrimSpace(line), "") diff --git a/internal/testing/dnsmasq/dnsmasq.go b/internal/testing/dnsmasq/dnsmasq.go index ae561e4..7c92957 100644 --- a/internal/testing/dnsmasq/dnsmasq.go +++ b/internal/testing/dnsmasq/dnsmasq.go @@ -30,7 +30,7 @@ type Process struct { var dhcpActionRe = regexp.MustCompile(` (DHCP[^(]+\(.*)$`) // Run starts a dnsmasq(8) process and returns a handle to it. -func Run(t *testing.T, args ...string) *Process { +func Run(t *testing.T, iface string) *Process { const ns = "ns0" // TODO: configurable? ready, err := ioutil.TempFile("", "router7") @@ -54,9 +54,9 @@ func Run(t *testing.T, args ...string) *Process { "--log-facility=-", // log to stderr "--pid-file="+ready.Name(), "--bind-interfaces", - "--interface=veth0b", + "--interface="+iface, "--dhcp-range=192.168.23.2,192.168.23.10", - "--dhcp-range=::1,::10,constructor:veth0b", + "--dhcp-range=::1,::10,constructor:"+iface, "--dhcp-authoritative", // eliminate timeouts "--no-ping", // disable ICMP confirmation of unused addresses to eliminate tedious timeout "--leasefile-ro", // do not create a lease database diff --git a/internal/testing/dnsmasq/example_test.go b/internal/testing/dnsmasq/example_test.go index 4760ae5..50407b3 100644 --- a/internal/testing/dnsmasq/example_test.go +++ b/internal/testing/dnsmasq/example_test.go @@ -9,7 +9,7 @@ import ( ) func Example(t *testing.T) { - dnsmasq := dnsmasq.Run(t) + dnsmasq := dnsmasq.Run(t, "veth0b") defer dnsmasq.Kill() // test code here