unicast_test.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. // Copyright 2012 The Go Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style
  3. // license that can be found in the LICENSE file.
  4. // +build darwin freebsd linux netbsd openbsd
  5. package ipv4_test
  6. import (
  7. "code.google.com/p/go.net/ipv4"
  8. "net"
  9. "os"
  10. "testing"
  11. )
  12. func TestReadWriteUnicastIPPayloadUDP(t *testing.T) {
  13. c, err := net.ListenPacket("udp4", "127.0.0.1:0")
  14. if err != nil {
  15. t.Fatalf("net.ListenPacket failed: %v", err)
  16. }
  17. defer c.Close()
  18. dst, err := net.ResolveUDPAddr("udp4", c.LocalAddr().String())
  19. if err != nil {
  20. t.Fatalf("net.ResolveUDPAddr failed: %v", err)
  21. }
  22. p := ipv4.NewPacketConn(c)
  23. runPayloadTransponder(t, p, []byte("HELLO-R-U-THERE"), dst)
  24. }
  25. func TestReadWriteUnicastIPPayloadICMP(t *testing.T) {
  26. if os.Getuid() != 0 {
  27. t.Logf("skipping test; must be root")
  28. return
  29. }
  30. c, err := net.ListenPacket("ip4:icmp", "0.0.0.0")
  31. if err != nil {
  32. t.Fatalf("net.ListenPacket failed: %v", err)
  33. }
  34. defer c.Close()
  35. dst, err := net.ResolveIPAddr("ip4", "127.0.0.1")
  36. if err != nil {
  37. t.Fatalf("ResolveIPAddr failed: %v", err)
  38. }
  39. p := ipv4.NewPacketConn(c)
  40. id := os.Getpid() & 0xffff
  41. pld := newICMPEchoRequest(id, 1, 128, []byte("HELLO-R-U-THERE"))
  42. runPayloadTransponder(t, p, pld, dst)
  43. }
  44. func TestReadWriteUnicastIPDatagram(t *testing.T) {
  45. if os.Getuid() != 0 {
  46. t.Logf("skipping test; must be root")
  47. return
  48. }
  49. c, err := net.ListenPacket("ip4:icmp", "0.0.0.0")
  50. if err != nil {
  51. t.Fatalf("net.ListenPacket failed: %v", err)
  52. }
  53. defer c.Close()
  54. dst, err := net.ResolveIPAddr("ip4", "127.0.0.1")
  55. if err != nil {
  56. t.Fatalf("ResolveIPAddr failed: %v", err)
  57. }
  58. r, err := ipv4.NewRawConn(c)
  59. if err != nil {
  60. t.Fatalf("ipv4.NewRawConn failed: %v", err)
  61. }
  62. id := os.Getpid() & 0xffff
  63. pld := newICMPEchoRequest(id, 1, 128, []byte("HELLO-R-U-THERE"))
  64. runDatagramTransponder(t, r, pld, nil, dst)
  65. }