dokodemo_test.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. package dokodemo_test
  2. import (
  3. "net"
  4. "testing"
  5. "github.com/v2ray/v2ray-core/app"
  6. "github.com/v2ray/v2ray-core/app/dispatcher"
  7. dispatchers "github.com/v2ray/v2ray-core/app/dispatcher/impl"
  8. "github.com/v2ray/v2ray-core/app/proxyman"
  9. v2net "github.com/v2ray/v2ray-core/common/net"
  10. v2nettesting "github.com/v2ray/v2ray-core/common/net/testing"
  11. netassert "github.com/v2ray/v2ray-core/common/net/testing/assert"
  12. . "github.com/v2ray/v2ray-core/proxy/dokodemo"
  13. "github.com/v2ray/v2ray-core/proxy/freedom"
  14. v2testing "github.com/v2ray/v2ray-core/testing"
  15. "github.com/v2ray/v2ray-core/testing/assert"
  16. "github.com/v2ray/v2ray-core/testing/servers/tcp"
  17. "github.com/v2ray/v2ray-core/testing/servers/udp"
  18. )
  19. func TestDokodemoTCP(t *testing.T) {
  20. v2testing.Current(t)
  21. tcpServer := &tcp.Server{
  22. Port: v2nettesting.PickPort(),
  23. MsgProcessor: func(data []byte) []byte {
  24. buffer := make([]byte, 0, 2048)
  25. buffer = append(buffer, []byte("Processed: ")...)
  26. buffer = append(buffer, data...)
  27. return buffer
  28. },
  29. }
  30. _, err := tcpServer.Start()
  31. assert.Error(err).IsNil()
  32. defer tcpServer.Close()
  33. space := app.NewSpace()
  34. space.BindApp(dispatcher.APP_ID, dispatchers.NewDefaultDispatcher(space))
  35. ohm := proxyman.NewDefaultOutboundHandlerManager()
  36. ohm.SetDefaultHandler(freedom.NewFreedomConnection(&freedom.Config{}, space))
  37. space.BindApp(proxyman.APP_ID_OUTBOUND_MANAGER, ohm)
  38. data2Send := "Data to be sent to remote."
  39. dokodemo := NewDokodemoDoor(&Config{
  40. Address: v2net.LocalHostIP,
  41. Port: tcpServer.Port,
  42. Network: v2net.TCPNetwork.AsList(),
  43. Timeout: 600,
  44. }, space)
  45. defer dokodemo.Close()
  46. assert.Error(space.Initialize()).IsNil()
  47. port := v2nettesting.PickPort()
  48. err = dokodemo.Listen(port)
  49. assert.Error(err).IsNil()
  50. netassert.Port(port).Equals(dokodemo.Port())
  51. tcpClient, err := net.DialTCP("tcp", nil, &net.TCPAddr{
  52. IP: []byte{127, 0, 0, 1},
  53. Port: int(port),
  54. Zone: "",
  55. })
  56. assert.Error(err).IsNil()
  57. tcpClient.Write([]byte(data2Send))
  58. tcpClient.CloseWrite()
  59. response := make([]byte, 1024)
  60. nBytes, err := tcpClient.Read(response)
  61. assert.Error(err).IsNil()
  62. tcpClient.Close()
  63. assert.StringLiteral("Processed: " + data2Send).Equals(string(response[:nBytes]))
  64. }
  65. func TestDokodemoUDP(t *testing.T) {
  66. v2testing.Current(t)
  67. udpServer := &udp.Server{
  68. Port: v2nettesting.PickPort(),
  69. MsgProcessor: func(data []byte) []byte {
  70. buffer := make([]byte, 0, 2048)
  71. buffer = append(buffer, []byte("Processed: ")...)
  72. buffer = append(buffer, data...)
  73. return buffer
  74. },
  75. }
  76. _, err := udpServer.Start()
  77. assert.Error(err).IsNil()
  78. defer udpServer.Close()
  79. space := app.NewSpace()
  80. space.BindApp(dispatcher.APP_ID, dispatchers.NewDefaultDispatcher(space))
  81. ohm := proxyman.NewDefaultOutboundHandlerManager()
  82. ohm.SetDefaultHandler(freedom.NewFreedomConnection(&freedom.Config{}, space))
  83. space.BindApp(proxyman.APP_ID_OUTBOUND_MANAGER, ohm)
  84. data2Send := "Data to be sent to remote."
  85. dokodemo := NewDokodemoDoor(&Config{
  86. Address: v2net.LocalHostIP,
  87. Port: udpServer.Port,
  88. Network: v2net.UDPNetwork.AsList(),
  89. Timeout: 600,
  90. }, space)
  91. defer dokodemo.Close()
  92. assert.Error(space.Initialize()).IsNil()
  93. port := v2nettesting.PickPort()
  94. err = dokodemo.Listen(port)
  95. assert.Error(err).IsNil()
  96. netassert.Port(port).Equals(dokodemo.Port())
  97. udpClient, err := net.DialUDP("udp", nil, &net.UDPAddr{
  98. IP: []byte{127, 0, 0, 1},
  99. Port: int(port),
  100. Zone: "",
  101. })
  102. assert.Error(err).IsNil()
  103. defer udpClient.Close()
  104. udpClient.Write([]byte(data2Send))
  105. response := make([]byte, 1024)
  106. nBytes, addr, err := udpClient.ReadFromUDP(response)
  107. assert.Error(err).IsNil()
  108. netassert.IP(addr.IP).Equals(v2net.LocalHostIP.IP())
  109. assert.Bytes(response[:nBytes]).Equals([]byte("Processed: " + data2Send))
  110. }