bridge_test.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package action
  2. import (
  3. "ehang.io/nps/lib/enet"
  4. "github.com/stretchr/testify/assert"
  5. "net"
  6. "testing"
  7. )
  8. func TestBridgeRunConn(t *testing.T) {
  9. packetConn, err := net.ListenPacket("udp", "127.0.0.1:0")
  10. assert.NoError(t, err)
  11. ac := &BridgeAction{
  12. DefaultAction: DefaultAction{},
  13. WritePacketConn: packetConn,
  14. }
  15. finish := make(chan struct{}, 0)
  16. go func() {
  17. _, err := GetBridgeListener().Accept()
  18. assert.NoError(t, err)
  19. finish <- struct{}{}
  20. }()
  21. ln, err := net.Listen("tcp", "127.0.0.1:0")
  22. assert.NoError(t, err)
  23. go func() {
  24. conn, err := ln.Accept()
  25. assert.NoError(t, err)
  26. assert.NoError(t, ac.RunConn(conn))
  27. }()
  28. _, err = net.Dial("tcp", ln.Addr().String())
  29. assert.NoError(t, err)
  30. <-finish
  31. }
  32. func TestBridgeRunPacket(t *testing.T) {
  33. packetConn, err := net.ListenPacket("udp", "127.0.0.1:0")
  34. assert.NoError(t, err)
  35. ac := &BridgeAction{
  36. DefaultAction: DefaultAction{},
  37. WritePacketConn: packetConn,
  38. }
  39. assert.NoError(t, ac.Init())
  40. go func() {
  41. p := make([]byte, 1024)
  42. pc := GetBridgePacketConn()
  43. n, addr, err := pc.ReadFrom(p)
  44. assert.NoError(t, err)
  45. _, err = pc.WriteTo(p[:n], addr)
  46. assert.NoError(t, err)
  47. }()
  48. go func() {
  49. p := make([]byte, 1024)
  50. n, addr, err := packetConn.ReadFrom(p)
  51. assert.NoError(t, err)
  52. bPacketConn := enet.NewReaderPacketConn(packetConn, p[:n], addr)
  53. go func() {
  54. err = ac.RunPacketConn(bPacketConn)
  55. assert.NoError(t, err)
  56. }()
  57. err = bPacketConn.SendPacket(p[:n], addr)
  58. assert.NoError(t, err)
  59. }()
  60. cPacketConn, err := net.ListenPacket("udp", "127.0.0.1:0")
  61. assert.NoError(t, err)
  62. b := []byte("12345")
  63. _, err = cPacketConn.WriteTo(b, packetConn.LocalAddr())
  64. assert.NoError(t, err)
  65. p := make([]byte, 1024)
  66. n, addr, err := cPacketConn.ReadFrom(p)
  67. assert.NoError(t, err)
  68. assert.Equal(t, addr.String(), packetConn.LocalAddr().String())
  69. assert.Equal(t, p[:n], b)
  70. }