Example #1
0
        private IPingStats GetUpdatedStats(IPingResponse pingResponse)
        {
            PingStats stats;
            IPAddress targetIpAddress = pingResponse.TargetIpAddress;
            bool      isSuccess       = _pingResponseUtil.IsSuccess(pingResponse.Status);

            if (_stats.TryGetValue(targetIpAddress, out PingStats found))
            {
                stats = found;
            }
            else
            {
                DateTime?lastSuccess = isSuccess ? DateTime.Now : (DateTime?)null;
                DateTime?lastFailure = !isSuccess ? DateTime.Now : (DateTime?)null;
                stats = new PingStats(lastSuccess, lastFailure);
                _stats.Add(targetIpAddress, stats);
            }

            _pingStatsUtil.AddStatus(stats.StatusHistory, isSuccess);
            double v = isSuccess ? 1.0 : 0.0;

            stats.Average25 = ((stats.Average25 * stats.Average25Count) + v) / (stats.Average25Count + 1);
            if (stats.Average25Count < 25)
            {
                stats.Average25Count++;
            }


            return(stats);
        }
Example #2
0
        public void AverageLatency_PingCountIsThree()
        {
            //Assign
            PingStats  stats   = new PingStats();
            PingResult result1 = new PingResult()
            {
                AddressOrIp = "www.google.com",
                Latency     = 0,
                Status      = PingResult.StatusMessage.SUCCESS,
            };
            PingResult result2 = new PingResult()
            {
                AddressOrIp = "www.google.com",
                Latency     = 50,
                Status      = PingResult.StatusMessage.SUCCESS,
            };
            PingResult result3 = new PingResult()
            {
                AddressOrIp = "www.google.com",
                Latency     = 100,
                Status      = PingResult.StatusMessage.SUCCESS,
            };

            double expectedResult = 50;
            double actualResult;

            //act
            stats.Add(result1);
            stats.Add(result2);
            stats.Add(result3);
            actualResult = stats.AverageLatency;

            //assert
            Assert.AreEqual(expectedResult, actualResult);
        }
Example #3
0
        public void Add_ResultStatusFailureAndSuccess()
        {
            //Assign
            PingStats  stats  = new PingStats();
            PingResult result = new PingResult()
            {
                AddressOrIp = "www.google.com",
                Latency     = 1,
                Status      = PingResult.StatusMessage.FAILURE,
            };
            PingResult result2 = new PingResult()
            {
                AddressOrIp = "www.google.com",
                Latency     = 5,
                Status      = PingResult.StatusMessage.SUCCESS,
            };
            bool expectedResult = true;
            bool actualResult;

            //act
            stats.Add(result);
            stats.Add(result2);
            actualResult = (stats.MaxLatency == 5 && stats.PacketsLost == 1 && stats.PacketsSent == 2 && stats.AverageLatency == 5);

            //assert
            Assert.AreEqual(expectedResult, actualResult);
        }
Example #4
0
        public void AverageLatency_PingCountIsZero()
        {
            //Assign
            PingStats stats          = new PingStats();
            double    expectedResult = 0;
            double    actualResult;

            //act
            actualResult = stats.AverageLatency;

            //assert
            Assert.AreEqual(expectedResult, actualResult);
        }
Example #5
0
        public void Add_AddressResultIsNull()
        {
            //Assign
            PingStats  stats  = new PingStats();
            PingResult result = new PingResult()
            {
                AddressOrIp = null,
            };
            bool expectedResult = true;
            bool actualResult;

            //act

            stats.Add(result);
            actualResult = (stats.MaxLatency == 0 && stats.PacketsLost == 0 && stats.PacketsSent == 0 && stats.AverageLatency == 0);

            //assert
            Assert.AreEqual(expectedResult, actualResult);
        }
Example #6
0
        public void GetVector_100PercentSuccess_WillMatchBoring()
        {
            // Arrange
            PingVectorFactory unitUnderTest = CreateFactory();
            IPingResponse     pingResponse  = new PingResponse(IPAddress.Loopback, TimeSpan.Zero, IPStatus.Success, IPAddress.Loopback);
            IPingStats        stats         = new PingStats(DateTime.Now, null)
            {
                Average25 = 0, Average25Count = 0, StatusHistory = Enumerable.Range(1, PingStatsUtil.MaxHistoryCount).Select(i => true).ToList()
            };

            // Act
            IVector actual = unitUnderTest.GetVector(
                pingResponse,
                stats);

            // Assert
            IVector expected = Boring;

            VectorComparer.AssertAreEqual(expected, actual, HundredthPi);
        }
Example #7
0
        public void GetVector_1Failure_CloseToInteresting()
        {
            // Arrange
            PingVectorFactory unitUnderTest = CreateFactory();
            IPingResponse     pingResponse  = new PingResponse(IPAddress.Loopback, TimeSpan.Zero, IPStatus.Success, IPAddress.Loopback);
            IPingStats        stats         = new PingStats(null, DateTime.Now)
            {
                Average25 = 0, Average25Count = 0, StatusHistory = Enumerable.Range(1, PingStatsUtil.MaxHistoryCount).Select(i => true).Append(false).ToList()
            };

            // Act
            IVector actual = unitUnderTest.GetVector(
                pingResponse,
                stats);

            // Assert
            IVector expected = Interesting;

            VectorComparer.AssertAreEqual(expected, actual, EighthPi);
        }
Example #8
0
        public void Add_LatencyResultIsNegative()
        {
            //Assign
            PingStats  stats  = new PingStats();
            PingResult result = new PingResult()
            {
                AddressOrIp = "www.google.com",
                Status      = PingResult.StatusMessage.SUCCESS,
                Latency     = -1,
            };
            bool expectedResult = true;
            bool actualResult;

            //act
            stats.Add(result);
            actualResult = (stats.MaxLatency == 0 && stats.PacketsLost == 0 && stats.PacketsSent == 1 && stats.AverageLatency == 1);

            //assert
            Assert.AreEqual(expectedResult, actualResult);
        }