|
|
@@ -83,6 +83,63 @@ func TestTCPConnection(t *testing.T) {
|
|
|
CloseAllServers()
|
|
|
}
|
|
|
|
|
|
+func TestPassiveTCPConnection(t *testing.T) {
|
|
|
+ assert := assert.On(t)
|
|
|
+
|
|
|
+ tcpServer := &tcp.Server{
|
|
|
+ MsgProcessor: func(data []byte) []byte {
|
|
|
+ buffer := make([]byte, 0, 2048)
|
|
|
+ buffer = append(buffer, []byte("Processed: ")...)
|
|
|
+ buffer = append(buffer, data...)
|
|
|
+ return buffer
|
|
|
+ },
|
|
|
+ SendFirst: []byte("Server sends first."),
|
|
|
+ }
|
|
|
+ _, err := tcpServer.Start()
|
|
|
+ assert.Error(err).IsNil()
|
|
|
+ defer tcpServer.Close()
|
|
|
+
|
|
|
+ assert.Error(InitializeServerSetOnce("test_1")).IsNil()
|
|
|
+
|
|
|
+ socksPort := v2net.Port(50002)
|
|
|
+
|
|
|
+ conn, err := net.DialTCP("tcp", nil, &net.TCPAddr{
|
|
|
+ IP: []byte{127, 0, 0, 1},
|
|
|
+ Port: int(socksPort),
|
|
|
+ })
|
|
|
+ assert.Error(err).IsNil()
|
|
|
+
|
|
|
+ authRequest := socks5AuthMethodRequest(byte(0))
|
|
|
+ nBytes, err := conn.Write(authRequest)
|
|
|
+ assert.Int(nBytes).Equals(len(authRequest))
|
|
|
+ assert.Error(err).IsNil()
|
|
|
+
|
|
|
+ authResponse := make([]byte, 1024)
|
|
|
+ nBytes, err = conn.Read(authResponse)
|
|
|
+ assert.Error(err).IsNil()
|
|
|
+ assert.Bytes(authResponse[:nBytes]).Equals([]byte{socks5Version, 0})
|
|
|
+
|
|
|
+ connectRequest := socks5Request(byte(1), v2net.TCPDestination(v2net.IPAddress([]byte{127, 0, 0, 1}), tcpServer.Port))
|
|
|
+ nBytes, err = conn.Write(connectRequest)
|
|
|
+ assert.Int(nBytes).Equals(len(connectRequest))
|
|
|
+ assert.Error(err).IsNil()
|
|
|
+
|
|
|
+ connectResponse := make([]byte, 1024)
|
|
|
+ nBytes, err = conn.Read(connectResponse)
|
|
|
+ assert.Error(err).IsNil()
|
|
|
+ assert.Bytes(connectResponse[:nBytes]).Equals([]byte{socks5Version, 0, 0, 1, 0, 0, 0, 0, 6, 181})
|
|
|
+
|
|
|
+ actualResponse := make([]byte, 1024)
|
|
|
+ nResponse, err := conn.Read(actualResponse)
|
|
|
+ assert.Error(err).IsNil()
|
|
|
+
|
|
|
+ assert.String(string(actualResponse[:nResponse])).Equals(string(tcpServer.SendFirst))
|
|
|
+
|
|
|
+ conn.Close()
|
|
|
+
|
|
|
+ CloseAllServers()
|
|
|
+}
|
|
|
+
|
|
|
func TestTCPBind(t *testing.T) {
|
|
|
assert := assert.On(t)
|
|
|
|