proxy_test.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package proxy_test
  2. import (
  3. "context"
  4. "testing"
  5. "v2ray.com/core/app"
  6. . "v2ray.com/core/app/proxy"
  7. "v2ray.com/core/app/proxyman"
  8. _ "v2ray.com/core/app/proxyman/outbound"
  9. "v2ray.com/core/common"
  10. "v2ray.com/core/common/net"
  11. "v2ray.com/core/proxy"
  12. "v2ray.com/core/proxy/freedom"
  13. "v2ray.com/core/testing/assert"
  14. "v2ray.com/core/testing/servers/tcp"
  15. "v2ray.com/core/transport/internet"
  16. _ "v2ray.com/core/transport/internet/tcp"
  17. )
  18. func TestProxyDial(t *testing.T) {
  19. assert := assert.On(t)
  20. space := app.NewSpace()
  21. ctx := app.ContextWithSpace(context.Background(), space)
  22. assert.Error(app.AddApplicationToSpace(ctx, new(proxyman.OutboundConfig))).IsNil()
  23. outboundManager := proxyman.OutboundHandlerManagerFromSpace(space)
  24. freedom, err := freedom.New(proxy.ContextWithOutboundMeta(ctx, &proxy.OutboundHandlerMeta{
  25. Tag: "tag",
  26. StreamSettings: &internet.StreamConfig{
  27. Protocol: internet.TransportProtocol_TCP,
  28. },
  29. }), &freedom.Config{})
  30. assert.Error(err).IsNil()
  31. common.Must(outboundManager.SetHandler("tag", freedom))
  32. assert.Error(app.AddApplicationToSpace(ctx, new(Config))).IsNil()
  33. proxy := OutboundProxyFromSpace(space)
  34. assert.Error(space.Initialize()).IsNil()
  35. xor := func(b []byte) []byte {
  36. for idx, x := range b {
  37. b[idx] = x ^ 'c'
  38. }
  39. return b
  40. }
  41. tcpServer := &tcp.Server{
  42. MsgProcessor: xor,
  43. }
  44. dest, err := tcpServer.Start()
  45. assert.Error(err).IsNil()
  46. conn, err := proxy.Dial(net.LocalHostIP, dest, internet.DialerOptions{
  47. Stream: &internet.StreamConfig{
  48. Protocol: internet.TransportProtocol_TCP,
  49. },
  50. Proxy: &internet.ProxyConfig{
  51. Tag: "tag",
  52. },
  53. })
  54. assert.Error(err).IsNil()
  55. _, err = conn.Write([]byte{'a', 'b', 'c', 'd'})
  56. assert.Error(err).IsNil()
  57. b := make([]byte, 10)
  58. nBytes, err := conn.Read(b)
  59. assert.Error(err).IsNil()
  60. assert.Bytes(xor(b[:nBytes])).Equals([]byte{'a', 'b', 'c', 'd'})
  61. common.Must(conn.Close())
  62. tcpServer.Close()
  63. }