packetconn_test.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  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. // This file implements API tests across platforms and will never have a build
  5. // tag.
  6. //go:build !js
  7. package net
  8. import (
  9. "os"
  10. "testing"
  11. )
  12. // The full stack test cases for IPConn have been moved to the
  13. // following:
  14. // golang.org/x/net/ipv4
  15. // golang.org/x/net/ipv6
  16. // golang.org/x/net/icmp
  17. func packetConnTestData(t *testing.T, network string) ([]byte, func()) {
  18. if !testableNetwork(network) {
  19. return nil, func() { t.Logf("skipping %s test", network) }
  20. }
  21. return []byte("PACKETCONN TEST"), nil
  22. }
  23. func TestPacketConn(t *testing.T) {
  24. var packetConnTests = []struct {
  25. net string
  26. addr1 string
  27. addr2 string
  28. }{
  29. {"udp", "127.0.0.1:0", "127.0.0.1:0"},
  30. {"unixgram", testUnixAddr(t), testUnixAddr(t)},
  31. }
  32. closer := func(c PacketConn, net, addr1, addr2 string) {
  33. c.Close()
  34. switch net {
  35. case "unixgram":
  36. os.Remove(addr1)
  37. os.Remove(addr2)
  38. }
  39. }
  40. for _, tt := range packetConnTests {
  41. wb, skipOrFatalFn := packetConnTestData(t, tt.net)
  42. if skipOrFatalFn != nil {
  43. skipOrFatalFn()
  44. continue
  45. }
  46. c1, err := ListenPacket(tt.net, tt.addr1)
  47. if err != nil {
  48. t.Fatal(err)
  49. }
  50. defer closer(c1, tt.net, tt.addr1, tt.addr2)
  51. c1.LocalAddr()
  52. c2, err := ListenPacket(tt.net, tt.addr2)
  53. if err != nil {
  54. t.Fatal(err)
  55. }
  56. defer closer(c2, tt.net, tt.addr1, tt.addr2)
  57. c2.LocalAddr()
  58. rb2 := make([]byte, 128)
  59. if _, err := c1.WriteTo(wb, c2.LocalAddr()); err != nil {
  60. t.Fatal(err)
  61. }
  62. if _, _, err := c2.ReadFrom(rb2); err != nil {
  63. t.Fatal(err)
  64. }
  65. if _, err := c2.WriteTo(wb, c1.LocalAddr()); err != nil {
  66. t.Fatal(err)
  67. }
  68. rb1 := make([]byte, 128)
  69. if _, _, err := c1.ReadFrom(rb1); err != nil {
  70. t.Fatal(err)
  71. }
  72. }
  73. }
  74. func TestConnAndPacketConn(t *testing.T) {
  75. var packetConnTests = []struct {
  76. net string
  77. addr1 string
  78. addr2 string
  79. }{
  80. {"udp", "127.0.0.1:0", "127.0.0.1:0"},
  81. {"unixgram", testUnixAddr(t), testUnixAddr(t)},
  82. }
  83. closer := func(c PacketConn, net, addr1, addr2 string) {
  84. c.Close()
  85. switch net {
  86. case "unixgram":
  87. os.Remove(addr1)
  88. os.Remove(addr2)
  89. }
  90. }
  91. for _, tt := range packetConnTests {
  92. var wb []byte
  93. wb, skipOrFatalFn := packetConnTestData(t, tt.net)
  94. if skipOrFatalFn != nil {
  95. skipOrFatalFn()
  96. continue
  97. }
  98. c1, err := ListenPacket(tt.net, tt.addr1)
  99. if err != nil {
  100. t.Fatal(err)
  101. }
  102. defer closer(c1, tt.net, tt.addr1, tt.addr2)
  103. c1.LocalAddr()
  104. c2, err := Dial(tt.net, c1.LocalAddr().String())
  105. if err != nil {
  106. t.Fatal(err)
  107. }
  108. defer c2.Close()
  109. c2.LocalAddr()
  110. c2.RemoteAddr()
  111. if _, err := c2.Write(wb); err != nil {
  112. t.Fatal(err)
  113. }
  114. rb1 := make([]byte, 128)
  115. if _, _, err := c1.ReadFrom(rb1); err != nil {
  116. t.Fatal(err)
  117. }
  118. var dst Addr
  119. switch tt.net {
  120. case "unixgram":
  121. continue
  122. default:
  123. dst = c2.LocalAddr()
  124. }
  125. if _, err := c1.WriteTo(wb, dst); err != nil {
  126. t.Fatal(err)
  127. }
  128. rb2 := make([]byte, 128)
  129. if _, err := c2.Read(rb2); err != nil {
  130. t.Fatal(err)
  131. }
  132. }
  133. }