소스 검색

cleanup socks test

Darien Raymond 8 년 전
부모
커밋
961b4bbb22

+ 1 - 1
testing/scenarios/common.go

@@ -12,7 +12,7 @@ import (
 )
 
 var (
-	port uint32 = 50000
+	port uint32 = 40000
 )
 
 func pickPort() v2net.Port {

+ 0 - 117
testing/scenarios/data/test_1_client.json

@@ -1,117 +0,0 @@
-{
-  "log": {
-    "loglevel": "debug"
-  },
-  "inbound": {
-    "port": 50000,
-    "listen": "127.0.0.1",
-    "protocol": "socks",
-    "settings": {
-      "auth": "noauth",
-      "udp": true,
-      "ip": "127.0.0.1"
-    }
-  },
-  "inboundDetour": [
-    {
-      "port": 50002,
-      "listen": "127.0.0.1",
-      "protocol": "socks",
-      "allowPassive": true,
-      "settings": {
-        "auth": "noauth",
-        "udp": true,
-        "ip": "127.0.0.1"
-      }
-    }
-  ],
-  "outbound": {
-    "protocol": "vmess",
-    "settings": {
-      "vnext": [
-        {
-          "address": "127.0.0.1",
-          "port": 50001,
-          "users": [
-            {
-              "id": "d17a1af7-efa5-42ca-b7e9-6a35282d737f",
-              "alterId": 10
-            }
-          ]
-        }
-      ]
-    }
-  },
-  "outboundDetour": [
-    {
-      "protocol": "vmess",
-      "settings": {
-        "vnext": [
-          {
-            "address": "127.0.0.1",
-            "port": 50005,
-            "users": [
-              {"id": "d17a1af7-efa5-42ca-b7e9-6a35282d737f"}
-            ]
-          }
-        ]
-      }
-    },
-    {
-      "protocol": "vmess",
-      "settings": {
-        "vnext": [
-          {
-            "address": "127.0.0.1",
-            "port": 50006,
-            "users": [
-              {"id": "d17a1af7-efa5-42ca-b7e9-6a35282d737f"}
-            ]
-          }
-        ]
-      }
-    },
-    {
-      "protocol": "vmess",
-      "settings": {
-        "vnext": [
-          {
-            "address": "127.0.0.1",
-            "port": 50007,
-            "users": [
-              {"id": "d17a1af7-efa5-42ca-b7e9-6a35282d737f"}
-            ]
-          }
-        ]
-      }
-    },
-    {
-      "protocol": "vmess",
-      "settings": {
-        "vnext": [
-          {
-            "address": "127.0.0.1",
-            "port": 50008,
-            "users": [
-              {"id": "d17a1af7-efa5-42ca-b7e9-6a35282d737f"}
-            ]
-          }
-        ]
-      }
-    },
-    {
-      "protocol": "vmess",
-      "settings": {
-        "vnext": [
-          {
-            "address": "127.0.0.1",
-            "port": 50009,
-            "users": [
-              {"id": "d17a1af7-efa5-42ca-b7e9-6a35282d737f"}
-            ]
-          }
-        ]
-      }
-    }
-  ]
-}

+ 0 - 46
testing/scenarios/data/test_1_server.json

@@ -1,46 +0,0 @@
-{
-  "port": 50001,
-  "log": {
-    "loglevel": "debug"
-  },
-  "inbound": {
-    "listen": "127.0.0.1",
-    "protocol": "vmess",
-    "allowPassive": true,
-    "settings": {
-      "clients": [
-        {
-          "id": "d17a1af7-efa5-42ca-b7e9-6a35282d737f",
-          "level": 1,
-          "alterId": 10
-        }
-      ],
-      "features": {
-        "detour": {
-          "to": "detour"
-        }
-      }
-    }
-  },
-  "outbound": {
-    "protocol": "freedom",
-    "settings": {}
-  },
-  "inboundDetour": [
-    {
-      "protocol": "vmess",
-      "listen": "127.0.0.1",
-      "port": "50005-50009",
-      "tag": "detour",
-      "allowPassive": true,
-      "settings": {
-        "clients": [
-          {
-            "id": "d17a1af7-efa5-42ca-b7e9-6a35282d737f",
-            "level": 1
-          }
-        ]
-      }
-    }
-  ]
-}

+ 83 - 0
testing/scenarios/feature_test.go

@@ -0,0 +1,83 @@
+package scenarios
+
+import (
+	"net"
+	"testing"
+
+	"v2ray.com/core"
+	v2net "v2ray.com/core/common/net"
+	"v2ray.com/core/common/serial"
+	"v2ray.com/core/proxy/dokodemo"
+	"v2ray.com/core/proxy/freedom"
+	"v2ray.com/core/testing/assert"
+	"v2ray.com/core/testing/servers/tcp"
+)
+
+func TestPassiveConnection(t *testing.T) {
+	assert := assert.On(t)
+
+	tcpServer := tcp.Server{
+		MsgProcessor: xor,
+		SendFirst:    []byte("send first"),
+	}
+	dest, err := tcpServer.Start()
+	assert.Error(err).IsNil()
+	defer tcpServer.Close()
+
+	serverPort := pickPort()
+	serverConfig := &core.Config{
+		Inbound: []*core.InboundConnectionConfig{
+			{
+				PortRange:              v2net.SinglePortRange(serverPort),
+				ListenOn:               v2net.NewIPOrDomain(v2net.LocalHostIP),
+				AllowPassiveConnection: true,
+				Settings: serial.ToTypedMessage(&dokodemo.Config{
+					Address: v2net.NewIPOrDomain(dest.Address),
+					Port:    uint32(dest.Port),
+					NetworkList: &v2net.NetworkList{
+						Network: []v2net.Network{v2net.Network_TCP},
+					},
+				}),
+			},
+		},
+		Outbound: []*core.OutboundConnectionConfig{
+			{
+				Settings: serial.ToTypedMessage(&freedom.Config{}),
+			},
+		},
+	}
+
+	assert.Error(InitializeServerConfig(serverConfig)).IsNil()
+
+	conn, err := net.DialTCP("tcp", nil, &net.TCPAddr{
+		IP:   []byte{127, 0, 0, 1},
+		Port: int(serverPort),
+	})
+	assert.Error(err).IsNil()
+
+	{
+		response := make([]byte, 1024)
+		nBytes, err := conn.Read(response)
+		assert.Error(err).IsNil()
+		assert.String(string(response[:nBytes])).Equals("send first")
+	}
+
+	payload := "dokodemo request."
+	{
+
+		nBytes, err := conn.Write([]byte(payload))
+		assert.Error(err).IsNil()
+		assert.Int(nBytes).Equals(len(payload))
+	}
+
+	{
+		response := make([]byte, 1024)
+		nBytes, err := conn.Read(response)
+		assert.Error(err).IsNil()
+		assert.Bytes(response[:nBytes]).Equals(xor([]byte(payload)))
+	}
+
+	assert.Error(conn.Close()).IsNil()
+
+	CloseAllServers()
+}

+ 0 - 49
testing/scenarios/socks5_helper.go

@@ -1,49 +0,0 @@
-package scenarios
-
-import (
-	v2net "v2ray.com/core/common/net"
-)
-
-const (
-	socks5Version = byte(0x05)
-)
-
-func socks5AuthMethodRequest(methods ...byte) []byte {
-	request := []byte{socks5Version, byte(len(methods))}
-	request = append(request, methods...)
-	return request
-}
-
-func appendAddress(request []byte, address v2net.Address) []byte {
-	switch address.Family() {
-	case v2net.AddressFamilyIPv4:
-		request = append(request, byte(0x01))
-		request = append(request, address.IP()...)
-
-	case v2net.AddressFamilyIPv6:
-		request = append(request, byte(0x04))
-		request = append(request, address.IP()...)
-
-	case v2net.AddressFamilyDomain:
-		request = append(request, byte(0x03), byte(len(address.Domain())))
-		request = append(request, []byte(address.Domain())...)
-
-	}
-	return request
-}
-
-func socks5Request(command byte, address v2net.Destination) []byte {
-	request := []byte{socks5Version, command, 0}
-	request = appendAddress(request, address.Address)
-	request = address.Port.Bytes(request)
-	return request
-}
-
-func socks5UDPRequest(address v2net.Destination, payload []byte) []byte {
-	request := make([]byte, 0, 1024)
-	request = append(request, 0, 0, 0)
-	request = appendAddress(request, address.Address)
-	request = address.Port.Bytes(request)
-	request = append(request, payload...)
-	return request
-}

+ 0 - 261
testing/scenarios/socks_end_test.go

@@ -1,261 +0,0 @@
-package scenarios
-
-import (
-	"net"
-	"testing"
-
-	v2net "v2ray.com/core/common/net"
-	"v2ray.com/core/testing/assert"
-	"v2ray.com/core/testing/servers/tcp"
-	"v2ray.com/core/testing/servers/udp"
-)
-
-func TestTCPConnection(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
-		},
-	}
-	_, err := tcpServer.Start()
-	assert.Error(err).IsNil()
-	defer tcpServer.Close()
-
-	assert.Error(InitializeServerSetOnce("test_1")).IsNil()
-
-	socksPort := v2net.Port(50000)
-
-	for i := 0; i < 100; i++ {
-		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})
-
-		actualRequest := []byte("Request to target server.")
-		nBytes, err = conn.Write(actualRequest)
-		assert.Error(err).IsNil()
-		assert.Int(nBytes).Equals(len(actualRequest))
-
-		actualResponse := make([]byte, 1024)
-		nResponse, err := conn.Read(actualResponse)
-		assert.Error(err).IsNil()
-
-		actualRequest = []byte("Request to target server again.")
-		nBytes, err = conn.Write(actualRequest)
-		assert.Error(err).IsNil()
-		assert.Int(nBytes).Equals(len(actualRequest))
-
-		nBytes, err = conn.Read(actualResponse[nResponse:])
-		assert.Error(err).IsNil()
-		nResponse += nBytes
-		conn.CloseWrite()
-
-		assert.String(string(actualResponse[:nResponse])).Equals("Processed: Request to target server.Processed: Request to target server again.")
-
-		conn.Close()
-	}
-
-	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)
-
-	tcpServer := &tcp.Server{
-		MsgProcessor: func(data []byte) []byte {
-			buffer := make([]byte, 0, 2048)
-			buffer = append(buffer, []byte("Processed: ")...)
-			buffer = append(buffer, data...)
-			return buffer
-		},
-	}
-	_, err := tcpServer.Start()
-	assert.Error(err).IsNil()
-	defer tcpServer.Close()
-
-	assert.Error(InitializeServerSetOnce("test_1")).IsNil()
-
-	socksPort := v2net.Port(50000)
-
-	conn, err := net.DialTCP("tcp", nil, &net.TCPAddr{
-		IP:   []byte{127, 0, 0, 1},
-		Port: int(socksPort),
-	})
-
-	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(2), 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, 7, 0, 1, 0, 0, 0, 0, 0, 0})
-
-	conn.Close()
-
-	CloseAllServers()
-}
-
-func TestUDPAssociate(t *testing.T) {
-	assert := assert.On(t)
-
-	udpServer := &udp.Server{
-		MsgProcessor: func(data []byte) []byte {
-			buffer := make([]byte, 0, 2048)
-			buffer = append(buffer, []byte("Processed: ")...)
-			buffer = append(buffer, data...)
-			return buffer
-		},
-	}
-	udpServerAddr, err := udpServer.Start()
-	assert.Error(err).IsNil()
-	defer udpServer.Close()
-
-	assert.Error(InitializeServerSetOnce("test_1")).IsNil()
-
-	socksPort := v2net.Port(50000)
-
-	conn, err := net.DialTCP("tcp", nil, &net.TCPAddr{
-		IP:   []byte{127, 0, 0, 1},
-		Port: int(socksPort),
-	})
-
-	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(3), v2net.TCPDestination(v2net.LocalHostIP, udpServer.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, 127, 0, 0, 1, byte(socksPort >> 8), byte(socksPort)})
-
-	udpConn, err := net.DialUDP("udp", nil, &net.UDPAddr{
-		IP:   []byte{127, 0, 0, 1},
-		Port: int(socksPort),
-	})
-	assert.Error(err).IsNil()
-
-	for i := 0; i < 100; i++ {
-		udpPayload := "UDP request to udp server."
-		udpRequest := socks5UDPRequest(udpServerAddr, []byte(udpPayload))
-
-		nBytes, err = udpConn.Write(udpRequest)
-		assert.Int(nBytes).Equals(len(udpRequest))
-		assert.Error(err).IsNil()
-
-		udpResponse := make([]byte, 1024)
-		nBytes, err = udpConn.Read(udpResponse)
-		assert.Error(err).IsNil()
-		assert.Bytes(udpResponse[:nBytes]).Equals(
-			socks5UDPRequest(v2net.UDPDestination(v2net.LocalHostIP, udpServer.Port), []byte("Processed: UDP request to udp server.")))
-	}
-
-	udpConn.Close()
-	conn.Close()
-
-	CloseAllServers()
-}