dokodemo_test.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. package dokodemo
  2. import (
  3. "net"
  4. "testing"
  5. "github.com/v2ray/v2ray-core/app/point"
  6. "github.com/v2ray/v2ray-core/app/point/config/testing/mocks"
  7. v2netjson "github.com/v2ray/v2ray-core/common/net/json"
  8. v2nettesting "github.com/v2ray/v2ray-core/common/net/testing"
  9. "github.com/v2ray/v2ray-core/proxy/dokodemo/config/json"
  10. _ "github.com/v2ray/v2ray-core/proxy/freedom"
  11. "github.com/v2ray/v2ray-core/testing/servers/tcp"
  12. "github.com/v2ray/v2ray-core/testing/servers/udp"
  13. "github.com/v2ray/v2ray-core/testing/unit"
  14. )
  15. func TestDokodemoTCP(t *testing.T) {
  16. assert := unit.Assert(t)
  17. port := v2nettesting.PickPort()
  18. data2Send := "Data to be sent to remote."
  19. tcpServer := &tcp.Server{
  20. Port: port,
  21. MsgProcessor: func(data []byte) []byte {
  22. buffer := make([]byte, 0, 2048)
  23. buffer = append(buffer, []byte("Processed: ")...)
  24. buffer = append(buffer, data...)
  25. return buffer
  26. },
  27. }
  28. _, err := tcpServer.Start()
  29. assert.Error(err).IsNil()
  30. pointPort := v2nettesting.PickPort()
  31. networkList := v2netjson.NetworkList([]string{"tcp"})
  32. config := mocks.Config{
  33. PortValue: pointPort,
  34. InboundConfigValue: &mocks.ConnectionConfig{
  35. ProtocolValue: "dokodemo-door",
  36. SettingsValue: &json.DokodemoConfig{
  37. Host: "127.0.0.1",
  38. Port: int(port),
  39. Network: &networkList,
  40. Timeout: 0,
  41. },
  42. },
  43. OutboundConfigValue: &mocks.ConnectionConfig{
  44. ProtocolValue: "freedom",
  45. SettingsValue: nil,
  46. },
  47. }
  48. point, err := point.NewPoint(&config)
  49. assert.Error(err).IsNil()
  50. err = point.Start()
  51. assert.Error(err).IsNil()
  52. tcpClient, err := net.DialTCP("tcp", nil, &net.TCPAddr{
  53. IP: []byte{127, 0, 0, 1},
  54. Port: int(pointPort),
  55. Zone: "",
  56. })
  57. assert.Error(err).IsNil()
  58. tcpClient.Write([]byte(data2Send))
  59. tcpClient.CloseWrite()
  60. response := make([]byte, 1024)
  61. nBytes, err := tcpClient.Read(response)
  62. assert.Error(err).IsNil()
  63. tcpClient.Close()
  64. assert.String("Processed: " + data2Send).Equals(string(response[:nBytes]))
  65. }
  66. func TestDokodemoUDP(t *testing.T) {
  67. assert := unit.Assert(t)
  68. port := v2nettesting.PickPort()
  69. data2Send := "Data to be sent to remote."
  70. udpServer := &udp.Server{
  71. Port: port,
  72. MsgProcessor: func(data []byte) []byte {
  73. buffer := make([]byte, 0, 2048)
  74. buffer = append(buffer, []byte("Processed: ")...)
  75. buffer = append(buffer, data...)
  76. return buffer
  77. },
  78. }
  79. _, err := udpServer.Start()
  80. assert.Error(err).IsNil()
  81. pointPort := v2nettesting.PickPort()
  82. networkList := v2netjson.NetworkList([]string{"udp"})
  83. config := mocks.Config{
  84. PortValue: pointPort,
  85. InboundConfigValue: &mocks.ConnectionConfig{
  86. ProtocolValue: "dokodemo-door",
  87. SettingsValue: &json.DokodemoConfig{
  88. Host: "127.0.0.1",
  89. Port: int(port),
  90. Network: &networkList,
  91. Timeout: 0,
  92. },
  93. },
  94. OutboundConfigValue: &mocks.ConnectionConfig{
  95. ProtocolValue: "freedom",
  96. SettingsValue: nil,
  97. },
  98. }
  99. point, err := point.NewPoint(&config)
  100. assert.Error(err).IsNil()
  101. err = point.Start()
  102. assert.Error(err).IsNil()
  103. udpClient, err := net.DialUDP("udp", nil, &net.UDPAddr{
  104. IP: []byte{127, 0, 0, 1},
  105. Port: int(pointPort),
  106. Zone: "",
  107. })
  108. assert.Error(err).IsNil()
  109. udpClient.Write([]byte(data2Send))
  110. response := make([]byte, 1024)
  111. nBytes, err := udpClient.Read(response)
  112. assert.Error(err).IsNil()
  113. udpClient.Close()
  114. assert.String("Processed: " + data2Send).Equals(string(response[:nBytes]))
  115. }