proxy_test.go 1.6 KB

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