dokodemo_test.go 3.3 KB

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