Ejemplo n.º 1
0
        /// <summary>
        /// Checks that the service correctly determines status code and response time.
        /// </summary>
        /// <param name="option">Option describing the expected behavior</param>
        public async Task GeneratesCorrectDataPoint(HttpResponseOption option)
        {
            // Arrange
            var responseHandler = new ResponseHandler();

            responseHandler.AddHandler(
                new Uri("https://my.url.com"),
                option
                );

            var mockHttpFactory = new Mock <IHttpClientFactory>();

            mockHttpFactory
            .Setup(factory => factory.BuildClient())
            .Returns(new HttpClient(responseHandler));


            var metricServiceMock = new Mock <IMetricService>();

            metricServiceMock
            .Setup(mock => mock.GetOrCreateMetricAsync(Metrics.Ping, "https://my.url.com"))
            .ReturnsAsync(new Metric());

            var pingService = new PingService(
                metricServiceMock.Object,
                new Mock <ILogger <PingService> >().Object,
                mockHttpFactory.Object
                );

            // Act
            var dataPoint = await pingService.PingServerAsync(
                new PingSetting {
                ServerUrl       = "https://my.url.com",
                MaxResponseTime = new TimeSpan(0, 0, 0, 0, 500)
            }
                );

            // Assert
            switch (option)
            {
            case HttpResponseOption.Success:
                Assert.True(dataPoint.Success);
                Assert.True(dataPoint.ResponseTime < new TimeSpan(0, 0, 0, 0, 2000));
                break;

            case HttpResponseOption.Timeout:
                Assert.False(dataPoint.Success);
                Assert.Equal(new TimeSpan(0), dataPoint.ResponseTime);
                break;

            case HttpResponseOption.ServiceUnavailable:
                Assert.False(dataPoint.Success);
                Assert.True(dataPoint.ResponseTime < new TimeSpan(0, 0, 0, 0, 2000));
                break;
            }

            // Clean up
            responseHandler.RemoveHandler(
                new Uri("https://my.url.com")
                );
        }