private static MockUdpClient CreateClient(MockServerSetup conf) { var client = new MockUdpClient(); client.Setup(conf); return client; }
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"); }
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); }
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); }
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); }
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(); }
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); }
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); }
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(); }
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); }
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); }
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"); } }
public MockServer(MockServerSetup setup) { this.avgResponseTime = setup.AverageResponseTime; // ms this.setup = setup; }
internal void Setup(MockServerSetup setup) { this.Server = new MockServer(setup); this.ServerSetup = setup; }