paket_test.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package enet
  2. import (
  3. "bytes"
  4. "github.com/stretchr/testify/assert"
  5. "net"
  6. "testing"
  7. )
  8. func TestTcpPacketConn(t *testing.T) {
  9. bs := bytes.Repeat([]byte{1}, 100)
  10. targetAddr, err := net.ResolveUDPAddr("udp", "127.0.0.1:53")
  11. assert.NoError(t, err)
  12. finish := make(chan struct{}, 0)
  13. ln, err := net.Listen("tcp", "127.0.0.1:0")
  14. assert.NoError(t, err)
  15. go func() {
  16. conn, err := ln.Accept()
  17. assert.NoError(t, err)
  18. b := make([]byte, 1024)
  19. n, addr, err := NewTcpPacketConn(conn).ReadFrom(b)
  20. assert.NoError(t, err)
  21. assert.Equal(t, targetAddr, addr)
  22. assert.Equal(t, n, 100)
  23. finish <- struct{}{}
  24. }()
  25. conn, err := net.Dial("tcp", ln.Addr().String())
  26. assert.NoError(t, err)
  27. _, err = NewTcpPacketConn(conn).WriteTo(bs, targetAddr)
  28. assert.NoError(t, err)
  29. <-finish
  30. }
  31. func TestPacketConn(t *testing.T) {
  32. finish := make(chan struct{}, 0)
  33. sPacketConn, err := net.ListenPacket("udp", "127.0.0.1:0")
  34. assert.NoError(t, err)
  35. cPacketConn, err := net.ListenPacket("udp", "127.0.0.1:0")
  36. assert.NoError(t, err)
  37. bPacketConn := NewReaderPacketConn(sPacketConn, nil, sPacketConn.LocalAddr())
  38. sendAddr, err := net.ResolveUDPAddr("udp", "127.0.0.1:53")
  39. assert.NoError(t, err)
  40. go func() {
  41. b := make([]byte, 1024)
  42. n, addr, err := bPacketConn.ReadFrom(b)
  43. assert.NoError(t, err)
  44. assert.Equal(t, sendAddr, addr)
  45. assert.Equal(t, n, 4)
  46. _, err = bPacketConn.WriteTo(bytes.Repeat(b[:n], 10), cPacketConn.LocalAddr())
  47. assert.NoError(t, err)
  48. finish <- struct{}{}
  49. }()
  50. err = bPacketConn.SendPacket([]byte{0, 0, 0, 0}, sendAddr)
  51. assert.NoError(t, err)
  52. b := make([]byte, 1024)
  53. n, addr, err := cPacketConn.ReadFrom(b)
  54. assert.NoError(t, err)
  55. assert.Equal(t, n, 40)
  56. assert.Equal(t, addr, sPacketConn.LocalAddr())
  57. <-finish
  58. }