| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 | 
							- package proxy_test
 
- import (
 
- 	"context"
 
- 	"testing"
 
- 	"v2ray.com/core/app"
 
- 	. "v2ray.com/core/app/proxy"
 
- 	"v2ray.com/core/app/proxyman"
 
- 	_ "v2ray.com/core/app/proxyman/outbound"
 
- 	"v2ray.com/core/common"
 
- 	"v2ray.com/core/common/net"
 
- 	"v2ray.com/core/proxy"
 
- 	"v2ray.com/core/proxy/freedom"
 
- 	"v2ray.com/core/testing/assert"
 
- 	"v2ray.com/core/testing/servers/tcp"
 
- 	"v2ray.com/core/transport/internet"
 
- 	_ "v2ray.com/core/transport/internet/tcp"
 
- )
 
- func TestProxyDial(t *testing.T) {
 
- 	assert := assert.On(t)
 
- 	space := app.NewSpace()
 
- 	ctx := app.ContextWithSpace(context.Background(), space)
 
- 	assert.Error(app.AddApplicationToSpace(ctx, new(proxyman.OutboundConfig))).IsNil()
 
- 	outboundManager := proxyman.OutboundHandlerManagerFromSpace(space)
 
- 	freedom, err := freedom.New(proxy.ContextWithOutboundMeta(ctx, &proxy.OutboundHandlerMeta{
 
- 		Tag: "tag",
 
- 		StreamSettings: &internet.StreamConfig{
 
- 			Protocol: internet.TransportProtocol_TCP,
 
- 		},
 
- 	}), &freedom.Config{})
 
- 	assert.Error(err).IsNil()
 
- 	common.Must(outboundManager.SetHandler("tag", freedom))
 
- 	assert.Error(app.AddApplicationToSpace(ctx, new(Config))).IsNil()
 
- 	proxy := OutboundProxyFromSpace(space)
 
- 	assert.Error(space.Initialize()).IsNil()
 
- 	xor := func(b []byte) []byte {
 
- 		for idx, x := range b {
 
- 			b[idx] = x ^ 'c'
 
- 		}
 
- 		return b
 
- 	}
 
- 	tcpServer := &tcp.Server{
 
- 		MsgProcessor: xor,
 
- 	}
 
- 	dest, err := tcpServer.Start()
 
- 	assert.Error(err).IsNil()
 
- 	conn, err := proxy.Dial(net.LocalHostIP, dest, internet.DialerOptions{
 
- 		Stream: &internet.StreamConfig{
 
- 			Protocol: internet.TransportProtocol_TCP,
 
- 		},
 
- 		Proxy: &internet.ProxyConfig{
 
- 			Tag: "tag",
 
- 		},
 
- 	})
 
- 	assert.Error(err).IsNil()
 
- 	_, err = conn.Write([]byte{'a', 'b', 'c', 'd'})
 
- 	assert.Error(err).IsNil()
 
- 	b := make([]byte, 10)
 
- 	nBytes, err := conn.Read(b)
 
- 	assert.Error(err).IsNil()
 
- 	assert.Bytes(xor(b[:nBytes])).Equals([]byte{'a', 'b', 'c', 'd'})
 
- 	common.Must(conn.Close())
 
- 	tcpServer.Close()
 
- }
 
 
  |