proxy_test.go 1.5 KB

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