コード例 #1
0
ファイル: RConClientTests.cs プロジェクト: st4l/BEsharp
 private static MockUdpClient CreateClient(MockServerSetup conf)
 {
     var client = new MockUdpClient();
     client.Setup(conf);
     return client;
 }
コード例 #2
0
ファイル: RConClientTests.cs プロジェクト: st4l/BEsharp
        public void ShouldSendKeepAliveUnderHeavyLoad()
        {
            var conf = new MockServerSetup
            {
                LoadTestConsoleMessages = -1,
                KeepAliveOnly = true,
                MaxRunSeconds = 20
            };

            var client = CreateClient(conf);
            var rcc = new RConClient(client, client.ServerSetup.Password);
            RunUntilShutdown(rcc);
            var serverMetrics = client.Server.GetMetrics();
            Debug.WriteLine("Console Messages generated by server: {0}", serverMetrics.TotalConsoleMessagesGenerated);
            Debug.WriteLine("Inbound Packets received by client: {0}", rcc.Metrics.InboundDatagramCount);
            Debug.WriteLine("Console Packets Acknowledgments received by server: {0}", serverMetrics.AckPacketsReceived);
            Debug.WriteLine("Keep Alive packets received by server: {0}", serverMetrics.KeepAlivePacketsReceived);
            Debug.WriteLine("Keep Alive acknowlegments received by client: {0}", rcc.Metrics.KeepAliveDatagramsAcknowledgedByServer);
            Debug.WriteLine("Client shutdown reason: {0}", rcc.ShutdownReason);
            Assert.IsTrue(serverMetrics.KeepAlivePacketsReceived > 0,
                "Server didn't receive any keep alive packets");
            Assert.IsTrue(rcc.Metrics.KeepAliveDatagramsAcknowledgedByServer > 0,
                "Client didn't register server's keep alive acknowledgment");
        }
コード例 #3
0
ファイル: RConClientTests.cs プロジェクト: st4l/BEsharp
        public void ShouldDetectDisconnectUnderHeavyLoad()
        {
            var conf = new MockServerSetup
            {
                LoadTestConsoleMessages = -1,
                DontAnswerKeepAlive = true,
                MaxRunSeconds = 40
            };

            var client = CreateClient(conf);
            var rcc = new RConClient(client, client.ServerSetup.Password);
            RunUntilShutdown(rcc);
            var serverMetrics = client.Server.GetMetrics();
            Debug.WriteLine("Console Messages generated by server: {0}", serverMetrics.TotalConsoleMessagesGenerated);
            Debug.WriteLine("Inbound Packets received by client: {0}", rcc.Metrics.InboundDatagramCount);
            Debug.WriteLine("Console Packets Acknowledgments received by server: {0}", serverMetrics.AckPacketsReceived);
            Debug.WriteLine("Keep Alive packets sent by client: {0}", rcc.Metrics.KeepAliveDatagramsSent);
            Debug.WriteLine("Keep Alive packets received by server: {0}", serverMetrics.KeepAlivePacketsReceived);
            Debug.WriteLine("Keep Alive packets acknowledged by server: {0}", rcc.Metrics.KeepAliveDatagramsAcknowledgedByServer);
            Debug.WriteLine("Client shutdown reason: {0}", rcc.ShutdownReason);
            Assert.IsTrue(rcc.Metrics.KeepAliveDatagramsSent > 0);
            Assert.IsTrue(serverMetrics.KeepAlivePacketsReceived > 0);
            Assert.IsTrue(rcc.Metrics.KeepAliveDatagramsAcknowledgedByServer == 0);
            Assert.IsTrue(rcc.ShutdownReason == ShutdownReason.NoResponseFromServer,
                "Shutdown reason should be NoResponseFromServer, it's {0}", rcc.ShutdownReason);
        }
コード例 #4
0
ファイル: RConClientTests.cs プロジェクト: st4l/BEsharp
        public void ShouldAcceptTonsOfPackets()
        {
            var conf = new MockServerSetup
            {
                LoadTestConsoleMessages = 50000,
#if TRACE
                MaxRunSeconds = 120,
#endif
                LoadTestOnly = true
            };
            var client = CreateClient(conf);
            var rcc = new RConClient(client, client.ServerSetup.Password) { DiscardConsoleMessages = true };
            RunUntilShutdown(rcc);
            Assert.IsTrue(rcc.Metrics.InboundDatagramCount > 50000);
        }
コード例 #5
0
ファイル: RConClientTests.cs プロジェクト: st4l/BEsharp
        public void ShouldParseTonsOfPackets()
        {
            var conf = new MockServerSetup
            {
                LoadTestConsoleMessages = 50010,
#if TRACE
                MaxRunSeconds = 120,
#endif
                LoadTestOnly = true
            };
            var client = CreateClient(conf);
            var rcc = new RConClient(client, client.ServerSetup.Password);
            int parsedCount = 0;
            rcc.MessageReceived += (sender, args) => { parsedCount++; };

            RunUntilShutdown(rcc);
            Assert.IsTrue(parsedCount >= 50000, "parsedCount < 50000: it's {0}", parsedCount);
        }
コード例 #6
0
ファイル: RConClientTests.cs プロジェクト: st4l/BEsharp
        public async Task ShouldParseMultipartCommandResponsesCorrectly()
        {
            var conf = new MockServerSetup();
            var client = CreateClient(conf);
            var rcc = new RConClient(client, client.ServerSetup.Password);
            var connected = rcc.ConnectAsync().Result;
            Assert.IsTrue(connected, "not connected");

            var handler = rcc.SendCommand("getplayersmulti");
            Assert.IsNotNull(handler);

            CommandMultiPartResponseDatagram multiPartResponseDatagram = null;
            if (await handler.WaitForResponse())
            {
                multiPartResponseDatagram = handler.ResponseDatagram as CommandMultiPartResponseDatagram;
            }

            Assert.IsNotNull(multiPartResponseDatagram);
            Assert.IsNotNull(multiPartResponseDatagram.Body);
            Assert.IsTrue(multiPartResponseDatagram.Body.StartsWith("Players on server:"));
            for (int i = 1; i <= 10; i++)
            {
                Assert.IsTrue(multiPartResponseDatagram.Body.Contains(
                    string.Format("(part {0:000}/010)", i)));
            }
            rcc.Close();
        }
コード例 #7
0
ファイル: RConClientTests.cs プロジェクト: st4l/BEsharp
        public async Task ShouldAcceptOutOfOrderCommandResponsesCorrectly()
        {
            var conf = new MockServerSetup
            {
                DisorderedMultiPacketResponses = true
            };
            var client = CreateClient(conf);
            var rcc = new RConClient(client, client.ServerSetup.Password);
            var connected = rcc.ConnectAsync().Result;
            Assert.IsTrue(connected, "not connected");

            var handler = rcc.SendCommand("getplayersmulti");
            Assert.IsNotNull(handler);

            CommandMultiPartResponseDatagram multiPartResponseDatagram = null;
            if (await handler.WaitForResponse())
            {
                multiPartResponseDatagram = handler.ResponseDatagram as CommandMultiPartResponseDatagram;
            }
            rcc.Close();

            Assert.IsNotNull(multiPartResponseDatagram);
            Assert.IsTrue(multiPartResponseDatagram.Body.StartsWith("Players on server:"));
            for (int i = 1; i <= 10; i++)
            {
                Assert.IsTrue(multiPartResponseDatagram.Body.Contains(
                    string.Format("(part {0:000}/010)", i)));
            }

            Debug.WriteLine("Response assembled: {0}", (object)multiPartResponseDatagram.Body);
            Debug.WriteLine("Client shutdown reason: {0}", rcc.ShutdownReason);

        }
コード例 #8
0
ファイル: RConClientTests.cs プロジェクト: st4l/BEsharp
 public void ShouldDiscardRepeatedConsoleMessages()
 {
     var conf = new MockServerSetup
     {
         LoadTestConsoleMessages = 100,
         LoadTestOnly = true,
         RepeatedConsoleMessages = true
     };
     var client = CreateClient(conf);
     var rcc = new RConClient(client, client.ServerSetup.Password);
     RunUntilShutdown(rcc);
     Assert.IsTrue(rcc.Metrics.DispatchedConsoleMessages > 10);
     Assert.IsTrue(rcc.Metrics.DispatchedConsoleMessages < 52);
     Debug.WriteLine("Inbound Packets received by client: {0}", rcc.Metrics.InboundDatagramCount);
     Debug.WriteLine("Console messages dispatched by client: {0}", rcc.Metrics.DispatchedConsoleMessages);
 }
コード例 #9
0
ファイル: RConClientTests.cs プロジェクト: st4l/BEsharp
        public async Task ShouldReturnCommandResponsesCorrectly()
        {
            var conf = new MockServerSetup();
            var client = CreateClient(conf);
            var rcc = new RConClient(client, client.ServerSetup.Password);
            var connected = rcc.ConnectAsync().Result;
            Assert.IsTrue(connected, "not connected");

            var handler = rcc.SendCommand("getplayers");
            Assert.IsNotNull(handler);

            CommandSinglePartResponseDatagram singlePartResponse = null;
            if (await handler.WaitForResponse())
            {
                singlePartResponse = handler.ResponseDatagram as CommandSinglePartResponseDatagram;
            }

            Assert.IsNotNull(singlePartResponse);
            Assert.IsTrue(singlePartResponse.Body.StartsWith("Players on server:"));
            rcc.Close();
        }
コード例 #10
0
ファイル: RConClientTests.cs プロジェクト: st4l/BEsharp
        public void ShouldNotifyAboutCorruptedPackets()
        {
            var conf = new MockServerSetup
            {
                LoadTestConsoleMessages = 100,
                LoadTestOnly = true,
                CorruptConsoleMessages = true
            };
            var client = CreateClient(conf);
            var rcc = new RConClient(client, client.ServerSetup.Password);

            int notificationsCount = 0;
            rcc.ConnectionProblem += (sender, args) =>
                                     { 
                                         if (args.ConnectionProblemType == ConnectionProblemType.Corrupted) notificationsCount++;
                                     };

            RunUntilShutdown(rcc);

            var serverMetrics = client.Server.GetMetrics();
            Debug.WriteLine("Console Messages generated by server: {0}", serverMetrics.TotalConsoleMessagesGenerated);
            Debug.WriteLine("Inbound Packets received by client: {0}", rcc.Metrics.InboundDatagramCount);
            Debug.WriteLine("Console Packets Acknowledgments received by server: {0}", serverMetrics.AckPacketsReceived);
            Debug.WriteLine("Keep Alive packets received by server: {0}", serverMetrics.KeepAlivePacketsReceived);
            Assert.IsTrue(notificationsCount == serverMetrics.TotalConsoleMessagesGenerated);
        }
コード例 #11
0
ファイル: RConClientTests.cs プロジェクト: st4l/BEsharp
        public void ShouldDiscardCorruptedPackets()
        {
            var conf = new MockServerSetup
            {
                LoadTestConsoleMessages = 100,
                LoadTestOnly = true,
                CorruptConsoleMessages = true
            };

            var client = CreateClient(conf);
            var rcc = new RConClient(client, client.ServerSetup.Password);
            RunUntilShutdown(rcc);
            Assert.IsTrue(rcc.Metrics.InboundDatagramCount > 100);
            Assert.IsTrue(rcc.Metrics.DispatchedConsoleMessages == 0);
        }
コード例 #12
0
ファイル: RConClientTests.cs プロジェクト: st4l/BEsharp
        public void ShouldThrowWhenServerDown()
        {
            var conf = new MockServerSetup { LoginServerDown = true, OnlyLogin = true };
            var client = CreateClient(conf);
            var rcc = new RConClient(client, client.ServerSetup.Password);

            bool threw = false;
            try
            {
                var connected = rcc.ConnectAsync().Result;
                Assert.IsFalse(connected, "should not return true");
            }
            catch (AggregateException aex)
            {
                if (aex.InnerExceptions.Count == 1 && aex.InnerExceptions[0] is TimeoutException)
                {
                    threw = true;
                }
                else
                {
                    throw;
                }
            }
            catch (TimeoutException)
            {
                threw = true;
            }

            if (!threw)
            {
                Assert.Fail("Should have thrown a Timeout Exception");
            }
        }
コード例 #13
0
ファイル: MockServer.cs プロジェクト: st4l/BEsharp
 public MockServer(MockServerSetup setup)
 {
     this.avgResponseTime = setup.AverageResponseTime; // ms
     this.setup = setup;
 }
コード例 #14
0
ファイル: MockUdpClient.cs プロジェクト: st4l/BEsharp
 internal void Setup(MockServerSetup setup)
 {
     this.Server = new MockServer(setup);
     this.ServerSetup = setup;
 }