proxy_test.go 1.5 KB

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