Example #1
0
        public async Task RandomChaosShouldReturnRandomFailures()
        {
            // Arrange
            var handler = new ChaosHandler()
            {
                InnerHandler = new FakeSuccessHandler()
            };

            var invoker = new HttpMessageInvoker(handler);
            var request = new HttpRequestMessage();

            // Act
            Dictionary <HttpStatusCode, object> responses = new Dictionary <HttpStatusCode, object>();
            HttpResponseMessage response;

            // Make calls until all known failures have been triggered
            while (responses.Count < 3)
            {
                response = await invoker.SendAsync(request, new CancellationToken());

                if (response.StatusCode != HttpStatusCode.OK)
                {
                    responses[response.StatusCode] = null;
                }
            }

            // Assert
            Assert.True(responses.ContainsKey((HttpStatusCode)429));
            Assert.True(responses.ContainsKey((HttpStatusCode)503));
            Assert.True(responses.ContainsKey((HttpStatusCode)504));
        }
Example #2
0
        public async Task PlannedChaosShouldReturnChaosWhenPlanned()
        {
            // Arrange

            Func <HttpRequestMessage, HttpResponseMessage> plannedChaos = (req) =>
            {
                if (req.RequestUri.OriginalString.Contains("/fail"))
                {
                    return(ChaosHandler.Create429TooManyRequestsResponse(new TimeSpan(0, 0, 5)));
                }

                return(null);
            };

            var handler = new ChaosHandler(new ChaosHandlerOption()
            {
                PlannedChaosFactory = plannedChaos
            })
            {
                InnerHandler = new FakeSuccessHandler()
            };

            var invoker = new HttpMessageInvoker(handler);


            // Act

            var request1 = new HttpRequestMessage()
            {
                RequestUri = new Uri("http://example.org/success")
            };
            var response1 = await invoker.SendAsync(request1, new CancellationToken());

            var request2 = new HttpRequestMessage()
            {
                RequestUri = new Uri("http://example.org/fail")
            };
            var response2 = await invoker.SendAsync(request2, new CancellationToken());


            // Assert
            Assert.Equal(HttpStatusCode.OK, response1.StatusCode);
            Assert.Equal((HttpStatusCode)429, response2.StatusCode);
        }
Example #3
0
        public async Task RandomChaosWithCustomKnownFailuresShouldReturnAllFailuresRandomly()
        {
            // Arrange
            var handler = new ChaosHandler(new ChaosHandlerOption()
            {
                KnownChaos = new List <HttpResponseMessage>()
                {
                    ChaosHandler.Create429TooManyRequestsResponse(new TimeSpan(0, 0, 5)),
                    ChaosHandler.Create500InternalServerErrorResponse(),
                    ChaosHandler.Create503Response(new TimeSpan(0, 0, 5)),
                    ChaosHandler.Create502BadGatewayResponse()
                }
            })
            {
                InnerHandler = new FakeSuccessHandler()
            };

            var invoker = new HttpMessageInvoker(handler);
            var request = new HttpRequestMessage();

            // Act
            Dictionary <HttpStatusCode, object> responses = new Dictionary <HttpStatusCode, object>();
            HttpResponseMessage response;

            // Make calls until all known failures have been triggered
            while (responses.Count < 4)
            {
                response = await invoker.SendAsync(request, new CancellationToken());

                if (response.StatusCode != HttpStatusCode.OK)
                {
                    responses[response.StatusCode] = null;
                }
            }

            // Assert
            Assert.True(responses.ContainsKey((HttpStatusCode)429));
            Assert.True(responses.ContainsKey((HttpStatusCode)500));
            Assert.True(responses.ContainsKey((HttpStatusCode)502));
            Assert.True(responses.ContainsKey((HttpStatusCode)503));
        }