예제 #1
0
        public void TestTerminatorRequestFilter()
        {
            var appServer = new TestServer();

            using (appServer as IDisposable)
            {

                var setupResult = appServer.Setup("127.0.0.1", 2012,
                    null, new TerminatorReceiveFilterFactory("##", m_Encoding), new ConsoleLogFactory(), null, null);

                Assert.IsTrue(setupResult);
                Assert.IsTrue(appServer.Start());

                EndPoint serverAddress = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 2012);

                using (var socket = new Socket(serverAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp))
                {
                    socket.Connect(serverAddress);
                    var socketStream = new NetworkStream(socket);
                    using (var reader = new StreamReader(socketStream, m_Encoding, true))
                    using (var writer = new ConsoleWriter(socketStream, m_Encoding, 1024 * 8))
                    {
                        var welcomeString = reader.ReadLine();
                        Assert.AreEqual(string.Format(TestSession.WelcomeMessageFormat, appServer.Name), welcomeString);

                        var chars = new char[] { 'a', 'A', 'b', 'B', 'c', 'C', 'd', 'D', 'e', 'E', 'f', 'F', 'g', 'G', 'h', 'H' };

                        var rd = new Random(1);

                        var sb = new StringBuilder();

                        for (var i = 0; i < 100; i++)
                        {
                            sb.Append(chars[rd.Next(0, chars.Length - 1)]);
                            var command = sb.ToString();
                            writer.Write("ECHO " + command);
                            writer.Write("##");
                            writer.Flush();
                            var echoMessage = reader.ReadLine();
                            Console.WriteLine("C:" + echoMessage);
                            Assert.AreEqual(command, echoMessage);
                        }
                    }
                }

            }
        }
예제 #2
0
        public void TestBrokenCommandBlock()
        {
            var configSource = StartBootstrap(DefaultServerConfig);
            var serverConfig = configSource.Servers.FirstOrDefault();
            EndPoint serverAddress = new IPEndPoint(IPAddress.Parse("127.0.0.1"), serverConfig.Port);

            using (Socket socket = CreateClientSocket())
            {
                socket.Connect(serverAddress);
                Stream socketStream = GetSocketStream(socket);
                using (StreamReader reader = new StreamReader(socketStream, m_Encoding, true))
                using (ConsoleWriter writer = new ConsoleWriter(socketStream, m_Encoding, 1024 * 8))
                {
                    string welcomeString = reader.ReadLine();

                    Console.WriteLine("Welcome: " + welcomeString);

                    char[] chars = new char[] { 'a', 'A', 'b', 'B', 'c', 'C', 'd', 'D', 'e', 'E', 'f', 'F', 'g', 'G', 'h', 'H' };

                    Random rd = new Random(1);

                    StringBuilder sb = new StringBuilder();

                    for (int i = 0; i < 50; i++)
                    {
                        sb.Append(chars[rd.Next(0, chars.Length - 1)]);
                    }

                    string command = sb.ToString();

                    var commandSource = ("ECHO " + command).ToList();

                    while (commandSource.Count > 0)
                    {
                        int readLen = rd.Next(1, commandSource.Count);
                        writer.Write(commandSource.Take(readLen).ToArray());
                        Console.WriteLine(commandSource.Take(readLen).ToArray());
                        writer.Flush();
                        commandSource.RemoveRange(0, readLen);
                        Thread.Sleep(200);
                    }

                    writer.WriteLine();
                    writer.Flush();

                    string echoMessage = reader.ReadLine();
                    Console.WriteLine("C:" + echoMessage);
                    Assert.AreEqual(command, echoMessage);
                }
            }
        }
예제 #3
0
        private void SendRequestC(ConsoleWriter writer, string line)
        {
            writer.Write("ECHO " + line.Substring(0, line.Length - 1));
            writer.Flush();

            Thread.Sleep(100);
            writer.Write(line.Substring(line.Length - 1) + "#");
            writer.Flush();

            Thread.Sleep(100);

            writer.Write("#");
            writer.Flush();
        }
예제 #4
0
        private void SendRequestB(ConsoleWriter writer, string line)
        {
            writer.Write("ECHO " + line);
            writer.Flush();

            Thread.Sleep(100);

            writer.Write("#");
            writer.Flush();

            Thread.Sleep(100);

            writer.Write("#");
            writer.Flush();
        }
예제 #5
0
        public void TestFastSending()
        {
            var configSource = StartBootstrap(DefaultServerConfig, c => new ServerConfig(c)
                {
                    LogBasicSessionActivity = false,
                    SendingQueueSize = 100
                });

            var serverConfig = configSource.Servers.FirstOrDefault();

            EndPoint serverAddress = new IPEndPoint(IPAddress.Parse("127.0.0.1"), serverConfig.Port);

            using (Socket socket = CreateClientSocket())
            {
                socket.Connect(serverAddress);
                Stream socketStream = GetSocketStream(socket);
                using (StreamReader reader = new StreamReader(socketStream, m_Encoding, true))
                using (ConsoleWriter writer = new ConsoleWriter(socketStream, m_Encoding, 1024 * 8))
                {
                    reader.ReadLine();

                    string sendLine = string.Empty;

                    int i = 0;
                    int testRound = 5000;

                    while (i < testRound)
                    {
                        sendLine = Guid.NewGuid().ToString();
                        writer.Write("ECHO " + sendLine + "\r\n");
                        writer.Flush();

                        var line = reader.ReadLine();

                        //Console.WriteLine("C: {0}, S: {1}", sendLine, line);

                        if (line == null)
                        {
                            //CustomThreadPoolTaskScheduler.Reset();
                        }

                        Assert.AreEqual(sendLine, line);

                        i++;
                    }

                    Console.WriteLine("Client sent: {0}", i);
                    Console.WriteLine("Server sent: {0}", ECHO.Sent);
                    ECHO.Reset();
                    Assert.AreEqual(testRound, i);
                }
            }
        }