From 2a07ead0dc1f0f2aadb9d8ef831f11e1eb11a1f9 Mon Sep 17 00:00:00 2001 From: Darien Raymond Date: Mon, 2 Jul 2018 23:45:26 +0200 Subject: [PATCH] test case for large kcp transfer --- testing/scenarios/vmess_test.go | 170 ++++++++++++++++++++++++++++++++ 1 file changed, 170 insertions(+) diff --git a/testing/scenarios/vmess_test.go b/testing/scenarios/vmess_test.go index 2dd9b7ec..e70a2b67 100644 --- a/testing/scenarios/vmess_test.go +++ b/testing/scenarios/vmess_test.go @@ -22,6 +22,7 @@ import ( "v2ray.com/core/testing/servers/tcp" "v2ray.com/core/testing/servers/udp" "v2ray.com/core/transport/internet" + "v2ray.com/core/transport/internet/kcp" . "v2ray.com/ext/assert" ) @@ -795,6 +796,175 @@ func TestVMessKCP(t *testing.T) { CloseAllServers(servers) } +func TestVMessKCPLarge(t *testing.T) { + assert := With(t) + + tcpServer := tcp.Server{ + MsgProcessor: xor, + } + dest, err := tcpServer.Start() + assert(err, IsNil) + defer tcpServer.Close() + + userID := protocol.NewID(uuid.New()) + serverPort := udp.PickPort() + serverConfig := &core.Config{ + App: []*serial.TypedMessage{ + serial.ToTypedMessage(&log.Config{ + ErrorLogLevel: clog.Severity_Debug, + ErrorLogType: log.LogType_Console, + }), + }, + Inbound: []*core.InboundHandlerConfig{ + { + ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ + PortRange: net.SinglePortRange(serverPort), + Listen: net.NewIPOrDomain(net.LocalHostIP), + StreamSettings: &internet.StreamConfig{ + Protocol: internet.TransportProtocol_MKCP, + TransportSettings: []*internet.TransportConfig{ + { + Protocol: internet.TransportProtocol_MKCP, + Settings: serial.ToTypedMessage(&kcp.Config{ + ReadBuffer: &kcp.ReadBuffer{ + Size: 4096, + }, + WriteBuffer: &kcp.WriteBuffer{ + Size: 4096, + }, + UplinkCapacity: &kcp.UplinkCapacity{ + Value: 20, + }, + DownlinkCapacity: &kcp.DownlinkCapacity{ + Value: 20, + }, + }), + }, + }, + }, + }), + ProxySettings: serial.ToTypedMessage(&inbound.Config{ + User: []*protocol.User{ + { + Account: serial.ToTypedMessage(&vmess.Account{ + Id: userID.String(), + AlterId: 64, + }), + }, + }, + }), + }, + }, + Outbound: []*core.OutboundHandlerConfig{ + { + ProxySettings: serial.ToTypedMessage(&freedom.Config{}), + }, + }, + } + + clientPort := tcp.PickPort() + clientConfig := &core.Config{ + App: []*serial.TypedMessage{ + serial.ToTypedMessage(&log.Config{ + ErrorLogLevel: clog.Severity_Debug, + ErrorLogType: log.LogType_Console, + }), + }, + Inbound: []*core.InboundHandlerConfig{ + { + ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ + PortRange: net.SinglePortRange(clientPort), + Listen: net.NewIPOrDomain(net.LocalHostIP), + }), + ProxySettings: serial.ToTypedMessage(&dokodemo.Config{ + Address: net.NewIPOrDomain(dest.Address), + Port: uint32(dest.Port), + NetworkList: &net.NetworkList{ + Network: []net.Network{net.Network_TCP}, + }, + }), + }, + }, + Outbound: []*core.OutboundHandlerConfig{ + { + ProxySettings: serial.ToTypedMessage(&outbound.Config{ + Receiver: []*protocol.ServerEndpoint{ + { + Address: net.NewIPOrDomain(net.LocalHostIP), + Port: uint32(serverPort), + User: []*protocol.User{ + { + Account: serial.ToTypedMessage(&vmess.Account{ + Id: userID.String(), + AlterId: 64, + SecuritySettings: &protocol.SecurityConfig{ + Type: protocol.SecurityType_AES128_GCM, + }, + }), + }, + }, + }, + }, + }), + SenderSettings: serial.ToTypedMessage(&proxyman.SenderConfig{ + StreamSettings: &internet.StreamConfig{ + Protocol: internet.TransportProtocol_MKCP, + TransportSettings: []*internet.TransportConfig{ + { + Protocol: internet.TransportProtocol_MKCP, + Settings: serial.ToTypedMessage(&kcp.Config{ + ReadBuffer: &kcp.ReadBuffer{ + Size: 4096, + }, + WriteBuffer: &kcp.WriteBuffer{ + Size: 4096, + }, + UplinkCapacity: &kcp.UplinkCapacity{ + Value: 20, + }, + DownlinkCapacity: &kcp.DownlinkCapacity{ + Value: 20, + }, + }), + }, + }, + }, + }), + }, + }, + } + + servers, err := InitializeServerConfigs(serverConfig, clientConfig) + assert(err, IsNil) + + var wg sync.WaitGroup + for i := 0; i < 2; i++ { + wg.Add(1) + go func() { + conn, err := net.DialTCP("tcp", nil, &net.TCPAddr{ + IP: []byte{127, 0, 0, 1}, + Port: int(clientPort), + }) + assert(err, IsNil) + + payload := make([]byte, 10240*1024) + rand.Read(payload) + + nBytes, err := conn.Write(payload) + assert(err, IsNil) + assert(nBytes, Equals, len(payload)) + + response := readFrom(conn, time.Minute*10, 10240*1024) + assert(response, Equals, xor(payload)) + assert(conn.Close(), IsNil) + wg.Done() + }() + } + wg.Wait() + + CloseAllServers(servers) +} + func TestVMessIPv6(t *testing.T) { t.SkipNow() // No IPv6 on travis-ci. assert := With(t)