feature_test.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package scenarios
  2. import (
  3. "net"
  4. "testing"
  5. "v2ray.com/core"
  6. v2net "v2ray.com/core/common/net"
  7. "v2ray.com/core/common/serial"
  8. "v2ray.com/core/proxy/dokodemo"
  9. "v2ray.com/core/proxy/freedom"
  10. "v2ray.com/core/testing/assert"
  11. "v2ray.com/core/testing/servers/tcp"
  12. )
  13. func TestPassiveConnection(t *testing.T) {
  14. assert := assert.On(t)
  15. tcpServer := tcp.Server{
  16. MsgProcessor: xor,
  17. SendFirst: []byte("send first"),
  18. }
  19. dest, err := tcpServer.Start()
  20. assert.Error(err).IsNil()
  21. defer tcpServer.Close()
  22. serverPort := pickPort()
  23. serverConfig := &core.Config{
  24. Inbound: []*core.InboundConnectionConfig{
  25. {
  26. PortRange: v2net.SinglePortRange(serverPort),
  27. ListenOn: v2net.NewIPOrDomain(v2net.LocalHostIP),
  28. AllowPassiveConnection: true,
  29. Settings: serial.ToTypedMessage(&dokodemo.Config{
  30. Address: v2net.NewIPOrDomain(dest.Address),
  31. Port: uint32(dest.Port),
  32. NetworkList: &v2net.NetworkList{
  33. Network: []v2net.Network{v2net.Network_TCP},
  34. },
  35. }),
  36. },
  37. },
  38. Outbound: []*core.OutboundConnectionConfig{
  39. {
  40. Settings: serial.ToTypedMessage(&freedom.Config{}),
  41. },
  42. },
  43. }
  44. assert.Error(InitializeServerConfig(serverConfig)).IsNil()
  45. conn, err := net.DialTCP("tcp", nil, &net.TCPAddr{
  46. IP: []byte{127, 0, 0, 1},
  47. Port: int(serverPort),
  48. })
  49. assert.Error(err).IsNil()
  50. {
  51. response := make([]byte, 1024)
  52. nBytes, err := conn.Read(response)
  53. assert.Error(err).IsNil()
  54. assert.String(string(response[:nBytes])).Equals("send first")
  55. }
  56. payload := "dokodemo request."
  57. {
  58. nBytes, err := conn.Write([]byte(payload))
  59. assert.Error(err).IsNil()
  60. assert.Int(nBytes).Equals(len(payload))
  61. }
  62. {
  63. response := make([]byte, 1024)
  64. nBytes, err := conn.Read(response)
  65. assert.Error(err).IsNil()
  66. assert.Bytes(response[:nBytes]).Equals(xor([]byte(payload)))
  67. }
  68. assert.Error(conn.Close()).IsNil()
  69. CloseAllServers()
  70. }