ipv4_windows_test.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package water
  2. import (
  3. "fmt"
  4. "net"
  5. "os/exec"
  6. "strings"
  7. "testing"
  8. )
  9. func startPing(t *testing.T, dst net.IP, _ bool) {
  10. if err := exec.Command("ping", "-n", "4", dst.String()).Start(); err != nil {
  11. t.Fatal(err)
  12. }
  13. }
  14. func setupIfce(t *testing.T, ipNet net.IPNet, dev string) {
  15. sargs := fmt.Sprintf("interface ip set address name=REPLACE_ME source=static addr=REPLACE_ME mask=REPLACE_ME gateway=none")
  16. args := strings.Split(sargs, " ")
  17. args[4] = fmt.Sprintf("name=%s", dev)
  18. args[6] = fmt.Sprintf("addr=%s", ipNet.IP)
  19. args[7] = fmt.Sprintf("mask=%d.%d.%d.%d", ipNet.Mask[0], ipNet.Mask[1], ipNet.Mask[2], ipNet.Mask[3])
  20. cmd := exec.Command("netsh", args...)
  21. if err := cmd.Run(); err != nil {
  22. t.Fatal(err)
  23. }
  24. }
  25. func teardownIfce(t *testing.T, ifce *Interface) {
  26. if err := ifce.Close(); err != nil {
  27. t.Fatal(err)
  28. }
  29. }
  30. func TestBroadcastTAP(t *testing.T) {
  31. var (
  32. self = net.IPv4(10, 0, 42, 1)
  33. mask = net.IPv4Mask(255, 255, 255, 0)
  34. brd = net.IPv4(10, 0, 42, 255)
  35. )
  36. ifce, err := New(Config{DeviceType: TAP})
  37. if err != nil {
  38. t.Fatalf("creating TAP error: %v\n", err)
  39. }
  40. defer teardownIfce(t, ifce)
  41. dataCh, errCh := startRead(t, ifce)
  42. setupIfce(t, net.IPNet{IP: self, Mask: mask}, ifce.Name())
  43. startPing(t, brd, true)
  44. waitForPingOrBust(t, true, true, self, brd, dataCh, errCh)
  45. }