Exemplo n.º 1
0
        public async Task TriggersSlackWebhook()
        {
            // Arrange
            var requestMade = false;
            var uri         = new Uri("http://slack.api/web/hook");

            var config = new Mock <IConfiguration>();

            config
            .SetupGet(conf => conf["Secrets:Slack:Enabled"])
            .Returns(true.ToString());
            config
            .SetupGet(conf => conf["Secrets:Slack:WebHook"])
            .Returns(uri.AbsoluteUri);

            var responseHandler = new ResponseHandler();

            responseHandler.AddAction(uri, () => (requestMade = true).ToString());

            var httpClientFactory = new Mock <IHttpClientFactory>();

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

            var slack = new SlackService(
                new Mock <ILogger <SlackService> >().Object,
                config.Object,
                httpClientFactory.Object
                );

            // Act
            await slack.SendMessageAsync("The message");

            // Assert
            Assert.True(requestMade);

            // Clean up
            responseHandler.RemoveAction(uri);
        }
Exemplo n.º 2
0
        public async Task GeneratesCorrectDataPoint(HttpResponseOption option)
        {
            // Arrange
            var responseHandler = new ResponseHandler();

            responseHandler.AddAction(
                new Uri("http://ping.server"),
                () =>
                option == HttpResponseOption.Success ?
                JsonConvert.SerializeObject(
                    new RemotePingServerResponse
            {
                Latency    = 100,
                StatusCode = 200,
                IsError    = false
            }
                    ) :
                JsonConvert.SerializeObject(
                    new RemotePingServerResponse
            {
                StatusCode = 503,
                IsError    = true,
                Error      = "Some error"
            }
                    )
                );

            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 config = new Mock <IConfiguration>();

            config
            .SetupGet(conf => conf["Data:PingServerUrl"])
            .Returns("http://ping.server");

            var pingService = new RemotePingService(
                metricServiceMock.Object,
                new Mock <ILogger <PingService> >().Object,
                config.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.Equal(dataPoint.ResponseTime, new TimeSpan(0, 0, 0, 0, 100));
                Assert.Equal("OK", dataPoint.Message);
                break;

            case HttpResponseOption.ServiceUnavailable:
                Assert.False(dataPoint.Success);
                Assert.Equal(dataPoint.ResponseTime, new TimeSpan(0));
                Assert.Equal("Some error", dataPoint.Message);
                break;
            }

            // Clean up
            responseHandler.RemoveAction(
                new Uri("http://ping.server")
                );
        }