From fe719cb03d94b08ec3219a5aba9fea9ee5420beb Mon Sep 17 00:00:00 2001 From: V2Ray Date: Sat, 19 Sep 2015 15:42:46 +0200 Subject: [PATCH] test case for user pass auth --- net/socks/socks_test.go | 55 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/net/socks/socks_test.go b/net/socks/socks_test.go index e28c51cbc..626489bb2 100644 --- a/net/socks/socks_test.go +++ b/net/socks/socks_test.go @@ -45,7 +45,8 @@ func TestSocksTcpConnect(t *testing.T) { socks5Client, err := proxy.SOCKS5("tcp", "127.0.0.1:12385", nil, proxy.Direct) assert.Error(err).IsNil() - conn, err := socks5Client.Dial("tcp", "google.com:80") + targetServer := "google.com:80" + conn, err := socks5Client.Dial("tcp", targetServer) assert.Error(err).IsNil() data2Send := "The data to be sent to remote server." @@ -60,4 +61,56 @@ func TestSocksTcpConnect(t *testing.T) { assert.Bytes([]byte(data2Send)).Equals(och.Data2Send.Bytes()) assert.Bytes(dataReturned).Equals(och.Data2Return) + assert.String(targetServer).Equals(och.Destination.String()) +} + +func TestSocksTcpConnectWithUserPass(t *testing.T) { + assert := unit.Assert(t) + port := uint16(12386) + + och := &mocks.OutboundConnectionHandler{ + Data2Send: bytes.NewBuffer(make([]byte, 0, 1024)), + Data2Return: []byte("The data to be returned to socks server."), + } + + core.RegisterOutboundConnectionHandlerFactory("mock_och", och) + + config := mocks.Config{ + PortValue: port, + InboundConfigValue: &mocks.ConnectionConfig{ + ProtocolValue: "socks", + ContentValue: []byte("{\"auth\": \"password\",\"user\": \"userx\",\"pass\": \"passy\"}"), + }, + OutboundConfigValue: &mocks.ConnectionConfig{ + ProtocolValue: "mock_och", + ContentValue: nil, + }, + } + + point, err := core.NewPoint(&config) + assert.Error(err).IsNil() + + err = point.Start() + assert.Error(err).IsNil() + + socks5Client, err := proxy.SOCKS5("tcp", "127.0.0.1:12386", &proxy.Auth{"userx", "passy"}, proxy.Direct) + assert.Error(err).IsNil() + + targetServer := "1.2.3.4:443" + conn, err := socks5Client.Dial("tcp", targetServer) + assert.Error(err).IsNil() + + data2Send := "The data to be sent to remote server." + conn.Write([]byte(data2Send)) + if tcpConn, ok := conn.(*net.TCPConn); ok { + tcpConn.CloseWrite() + } + + dataReturned, err := ioutil.ReadAll(conn) + assert.Error(err).IsNil() + conn.Close() + + assert.Bytes([]byte(data2Send)).Equals(och.Data2Send.Bytes()) + assert.Bytes(dataReturned).Equals(och.Data2Return) + assert.String(targetServer).Equals(och.Destination.String()) }