public void DoubleStartDoubleStop() { var checker = new TestAvailabilityCheck(); checker.CurrentAvailable = true; var probe = new TestAvailabilityProbe(IPAddress.Any, 10034, TimeSpan.FromMilliseconds(1), checker); var stopSuccess = false; var secondStopSuccess = false; bool secondStart = false; var startSuccess = probe.StartAsync(CancellationToken.None).GetAwaiter().GetResult(); if (startSuccess) { secondStart = probe.StartAsync(CancellationToken.None).GetAwaiter().GetResult(); Task.Delay(2000).GetAwaiter().GetResult(); stopSuccess = probe.StopAsync(CancellationToken.None).GetAwaiter().GetResult(); secondStopSuccess = probe.StopAsync(CancellationToken.None).GetAwaiter().GetResult(); } Assert.IsTrue(startSuccess, "Start was not successful"); Assert.IsTrue(stopSuccess, "Stop was not successful"); Assert.IsFalse(secondStart, "Second start should be false"); Assert.IsFalse(secondStopSuccess, "Second stop should be false"); }
public void ClientConnect(int connectionCount, int interval) { const int Port = 10034; var checker = new TestAvailabilityCheck(); checker.CurrentAvailable = true; var probe = new TestAvailabilityProbe(IPAddress.Any, 10034, TimeSpan.FromMilliseconds(1), checker); var stopSuccess = false; var startSuccess = probe.StartAsync(CancellationToken.None).GetAwaiter().GetResult(); var statusList = new List <bool>(); if (startSuccess) { var continueListening = true; var maximumTime = connectionCount * (interval + 10); var timeoutAt = DateTime.UtcNow.Add(TimeSpan.FromMilliseconds(maximumTime + 1000)); var collectionThread = new Thread(new ThreadStart(() => { while (continueListening && statusList.Count < connectionCount) { var success = false; try { using (var client = new TcpClient()) { client.Connect(IPAddress.Loopback, Port); success = true; client.Close(); } } catch (Exception) { } statusList.Add(success); if (statusList.Count < connectionCount) { Thread.Sleep(interval); } } })); collectionThread.Start(); while (DateTime.UtcNow < timeoutAt && collectionThread.IsAlive) { Task.Delay(1000).GetAwaiter().GetResult(); } continueListening = false; stopSuccess = probe.StopAsync(CancellationToken.None).GetAwaiter().GetResult(); } Assert.IsTrue(startSuccess, "Start was not successful"); Assert.IsTrue(stopSuccess, "Stop was not successful"); Assert.IsTrue(connectionCount == statusList.Count(), "Not enough connections were performed"); Assert.IsFalse(statusList.Any(item => !item), "Failure to connect found"); }