proxy_test.go 1.6 KB

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