public async Task WebUptimeMetricLogic_ProcessServer_RequestThrowsException()
        {
            //Arrange
            var server = new Server
            {
                ServerIpAddress = "127.0.0.1",
                ServerName      = "1.com",
                UptimeMonitoringResourceHost     = null,
                UptimeMonitoringResourceUseHttps = null
            };

            SetupHttpClientAdditionalResponses(new Uri("http://127.0.0.1/Relativity/"), HttpStatusCode.NotFound);
            httpClientHandler.Protected()
            .Setup <Task <HttpResponseMessage> >("SendAsync", ItExpr.Is <HttpRequestMessage>(r => r.RequestUri == new Uri("https://127.0.0.1/Relativity/")), ItExpr.IsAny <CancellationToken>())
            .Throws(new HttpRequestException("An error occurred while sending the request."));

            httpClient = new HttpClient(httpClientHandler.Object);
            var logic = new WebUptimeMetricLogic(httpClientFactoryMock.Object, serverRepository.Object, metricDataService.Object, configRepository.Object, logger.Object);

            //Act
            var result = await logic.ProcessServer(server, httpClient);

            //Assert
            Assert.That(result, Is.Not.Null);
            httpClientHandler.Protected()
            .Verify <Task <HttpResponseMessage> >("SendAsync", Times.Exactly(3), ItExpr.IsAny <HttpRequestMessage>(), ItExpr.IsAny <CancellationToken>());
        }
        public async Task WebUptimeMetricLogic_ProcessServer_NoSuccessfulUrls()
        {
            //Arrange
            var server = new Server
            {
                ServerIpAddress = "127.0.0.1",
                ServerName      = "1.com",
                UptimeMonitoringResourceHost     = null,
                UptimeMonitoringResourceUseHttps = null
            };

            SetupHttpClientAdditionalResponses(new Uri("http://127.0.0.1/Relativity/"), HttpStatusCode.NotFound);
            SetupHttpClientAdditionalResponses(new Uri("https://127.0.0.1/Relativity/"), HttpStatusCode.NotFound);
            SetupHttpClientAdditionalResponses(new Uri("http://1.com/Relativity/"), HttpStatusCode.NotFound);
            SetupHttpClientAdditionalResponses(new Uri("https://1.com/Relativity/"), HttpStatusCode.NotFound);

            httpClient = new HttpClient(httpClientHandler.Object);
            var logic = new WebUptimeMetricLogic(httpClientFactoryMock.Object, serverRepository.Object, metricDataService.Object, configRepository.Object, logger.Object);

            //Act
            var result = await logic.ProcessServer(server, httpClient);

            //Assert
            Assert.That(result, Is.Null);
            httpClientHandler.Protected()
            .Verify <Task <HttpResponseMessage> >("SendAsync", Times.Exactly(4), ItExpr.IsAny <HttpRequestMessage>(), ItExpr.IsAny <CancellationToken>());
            this.logger.Verify(l => l.LogVerboseAsync("ProcessServer Called for Web - Failure. Server: 1.com. Details: Web server unreachable.", It.IsAny <List <string> >()));
        }