mirror of
				https://github.com/nsnail/Ocelot.git
				synced 2025-11-04 20:50:49 +08:00 
			
		
		
		
	hacked together load balancing reroutes in fileconfig (#211)
* hacked together load balancing reroutes in fileconfig * some renaming and refactoring * more renames * hacked away the old config json * test for issue 213 * renamed key * dont share ports * oops * updated docs * mvoed docs around * port being used
This commit is contained in:
		@@ -1,15 +1,15 @@
 | 
			
		||||
using Ocelot.Errors;
 | 
			
		||||
 | 
			
		||||
namespace Ocelot.UnitTests.Responder
 | 
			
		||||
{
 | 
			
		||||
    class AnyError : Error
 | 
			
		||||
    {
 | 
			
		||||
        public AnyError() : base("blahh", OcelotErrorCode.UnknownError)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public AnyError(OcelotErrorCode errorCode) : base("blah", errorCode)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
using Ocelot.Errors;
 | 
			
		||||
 | 
			
		||||
namespace Ocelot.UnitTests.Responder
 | 
			
		||||
{
 | 
			
		||||
    class AnyError : Error
 | 
			
		||||
    {
 | 
			
		||||
        public AnyError() : base("blahh", OcelotErrorCode.UnknownError)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public AnyError(OcelotErrorCode errorCode) : base("blah", errorCode)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,167 +1,167 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Net;
 | 
			
		||||
using Ocelot.Errors;
 | 
			
		||||
using Ocelot.Responder;
 | 
			
		||||
using Shouldly;
 | 
			
		||||
using TestStack.BDDfy;
 | 
			
		||||
using Xunit;
 | 
			
		||||
 | 
			
		||||
namespace Ocelot.UnitTests.Responder
 | 
			
		||||
{
 | 
			
		||||
    public class ErrorsToHttpStatusCodeMapperTests
 | 
			
		||||
    {
 | 
			
		||||
        private readonly IErrorsToHttpStatusCodeMapper _codeMapper;
 | 
			
		||||
        private int _result;
 | 
			
		||||
        private List<Error> _errors;
 | 
			
		||||
 | 
			
		||||
        public ErrorsToHttpStatusCodeMapperTests()
 | 
			
		||||
        {
 | 
			
		||||
            _codeMapper = new ErrorsToHttpStatusCodeMapper();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Theory]
 | 
			
		||||
        [InlineData(OcelotErrorCode.UnauthenticatedError)]
 | 
			
		||||
        public void should_return_unauthorized(OcelotErrorCode errorCode)
 | 
			
		||||
        {
 | 
			
		||||
            ShouldMapErrorToStatusCode(errorCode, HttpStatusCode.Unauthorized);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Theory]
 | 
			
		||||
        [InlineData(OcelotErrorCode.CannotFindClaimError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.ClaimValueNotAuthorisedError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.ScopeNotAuthorisedError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.UnauthorizedError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.UserDoesNotHaveClaimError)] 
 | 
			
		||||
        public void should_return_forbidden(OcelotErrorCode errorCode)
 | 
			
		||||
        {
 | 
			
		||||
            ShouldMapErrorToStatusCode(errorCode, HttpStatusCode.Forbidden);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Theory]
 | 
			
		||||
        [InlineData(OcelotErrorCode.RequestTimedOutError)]
 | 
			
		||||
        public void should_return_service_unavailable(OcelotErrorCode errorCode)
 | 
			
		||||
        {
 | 
			
		||||
            ShouldMapErrorToStatusCode(OcelotErrorCode.RequestTimedOutError, HttpStatusCode.ServiceUnavailable);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        [Theory]
 | 
			
		||||
        [InlineData(OcelotErrorCode.CannotAddDataError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.CannotFindDataError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.DownstreamHostNullOrEmptyError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.DownstreamPathNullOrEmptyError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.DownstreampathTemplateAlreadyUsedError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.DownstreamPathTemplateContainsSchemeError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.DownstreamSchemeNullOrEmptyError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.FileValidationFailedError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.InstructionNotForClaimsError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.NoInstructionsError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.ParsingConfigurationHeaderError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.RateLimitOptionsError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.ServicesAreEmptyError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.ServicesAreNullError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.UnableToCompleteRequestError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.UnableToCreateAuthenticationHandlerError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.UnableToFindDownstreamRouteError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.UnableToFindLoadBalancerError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.UnableToFindServiceDiscoveryProviderError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.UnableToFindQoSProviderError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.UnableToSetConfigInConsulError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.UnknownError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.UnmappableRequestError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.UnsupportedAuthenticationProviderError)]
 | 
			
		||||
        public void should_return_not_found(OcelotErrorCode errorCode)
 | 
			
		||||
        {
 | 
			
		||||
            ShouldMapErrorToStatusCode(errorCode, HttpStatusCode.NotFound);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void AuthenticationErrorsHaveHighestPriority()
 | 
			
		||||
        {
 | 
			
		||||
            var errors = new List<OcelotErrorCode>
 | 
			
		||||
            {
 | 
			
		||||
                OcelotErrorCode.CannotAddDataError,
 | 
			
		||||
                OcelotErrorCode.CannotFindClaimError,
 | 
			
		||||
                OcelotErrorCode.UnauthenticatedError,
 | 
			
		||||
                OcelotErrorCode.RequestTimedOutError,
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            ShouldMapErrorsToStatusCode(errors, HttpStatusCode.Unauthorized);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void AuthorisationErrorsHaveSecondHighestPriority()
 | 
			
		||||
        {
 | 
			
		||||
            var errors = new List<OcelotErrorCode>
 | 
			
		||||
            {
 | 
			
		||||
                OcelotErrorCode.CannotAddDataError,
 | 
			
		||||
                OcelotErrorCode.CannotFindClaimError,
 | 
			
		||||
                OcelotErrorCode.RequestTimedOutError
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            ShouldMapErrorsToStatusCode(errors, HttpStatusCode.Forbidden);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void ServiceUnavailableErrorsHaveThirdHighestPriority()
 | 
			
		||||
        {
 | 
			
		||||
            var errors = new List<OcelotErrorCode>
 | 
			
		||||
            {
 | 
			
		||||
                OcelotErrorCode.CannotAddDataError,
 | 
			
		||||
                OcelotErrorCode.RequestTimedOutError
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            ShouldMapErrorsToStatusCode(errors, HttpStatusCode.ServiceUnavailable);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void check_we_have_considered_all_errors_in_these_tests()
 | 
			
		||||
        {
 | 
			
		||||
            // If this test fails then it's because the number of error codes has changed.
 | 
			
		||||
            // You should make the appropriate changes to the test cases here to ensure
 | 
			
		||||
            // they cover all the error codes, and then modify this assertion.
 | 
			
		||||
            Enum.GetNames(typeof(OcelotErrorCode)).Length.ShouldBe(32, "Looks like the number of error codes has changed. Do you need to modify ErrorsToHttpStatusCodeMapper?");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ShouldMapErrorToStatusCode(OcelotErrorCode errorCode, HttpStatusCode expectedHttpStatusCode)
 | 
			
		||||
        {
 | 
			
		||||
            ShouldMapErrorsToStatusCode(new List<OcelotErrorCode> { errorCode }, expectedHttpStatusCode);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ShouldMapErrorsToStatusCode(List<OcelotErrorCode> errorCodes, HttpStatusCode expectedHttpStatusCode)
 | 
			
		||||
        {
 | 
			
		||||
            var errors = new List<Error>();
 | 
			
		||||
 | 
			
		||||
            foreach(var errorCode in errorCodes)
 | 
			
		||||
            {
 | 
			
		||||
                errors.Add(new AnyError(errorCode));
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            this.Given(x => x.GivenThereAreErrors(errors))
 | 
			
		||||
               .When(x => x.WhenIGetErrorStatusCode())
 | 
			
		||||
               .Then(x => x.ThenTheResponseIsStatusCodeIs(expectedHttpStatusCode))
 | 
			
		||||
               .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenThereAreErrors(List<Error> errors)
 | 
			
		||||
        {
 | 
			
		||||
            _errors = errors;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void WhenIGetErrorStatusCode()
 | 
			
		||||
        {
 | 
			
		||||
            _result = _codeMapper.Map(_errors);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ThenTheResponseIsStatusCodeIs(int expectedCode)
 | 
			
		||||
        {
 | 
			
		||||
            _result.ShouldBe(expectedCode);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ThenTheResponseIsStatusCodeIs(HttpStatusCode expectedCode)
 | 
			
		||||
        {
 | 
			
		||||
            _result.ShouldBe((int)expectedCode);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Net;
 | 
			
		||||
using Ocelot.Errors;
 | 
			
		||||
using Ocelot.Responder;
 | 
			
		||||
using Shouldly;
 | 
			
		||||
using TestStack.BDDfy;
 | 
			
		||||
using Xunit;
 | 
			
		||||
 | 
			
		||||
namespace Ocelot.UnitTests.Responder
 | 
			
		||||
{
 | 
			
		||||
    public class ErrorsToHttpStatusCodeMapperTests
 | 
			
		||||
    {
 | 
			
		||||
        private readonly IErrorsToHttpStatusCodeMapper _codeMapper;
 | 
			
		||||
        private int _result;
 | 
			
		||||
        private List<Error> _errors;
 | 
			
		||||
 | 
			
		||||
        public ErrorsToHttpStatusCodeMapperTests()
 | 
			
		||||
        {
 | 
			
		||||
            _codeMapper = new ErrorsToHttpStatusCodeMapper();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Theory]
 | 
			
		||||
        [InlineData(OcelotErrorCode.UnauthenticatedError)]
 | 
			
		||||
        public void should_return_unauthorized(OcelotErrorCode errorCode)
 | 
			
		||||
        {
 | 
			
		||||
            ShouldMapErrorToStatusCode(errorCode, HttpStatusCode.Unauthorized);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Theory]
 | 
			
		||||
        [InlineData(OcelotErrorCode.CannotFindClaimError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.ClaimValueNotAuthorisedError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.ScopeNotAuthorisedError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.UnauthorizedError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.UserDoesNotHaveClaimError)] 
 | 
			
		||||
        public void should_return_forbidden(OcelotErrorCode errorCode)
 | 
			
		||||
        {
 | 
			
		||||
            ShouldMapErrorToStatusCode(errorCode, HttpStatusCode.Forbidden);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Theory]
 | 
			
		||||
        [InlineData(OcelotErrorCode.RequestTimedOutError)]
 | 
			
		||||
        public void should_return_service_unavailable(OcelotErrorCode errorCode)
 | 
			
		||||
        {
 | 
			
		||||
            ShouldMapErrorToStatusCode(OcelotErrorCode.RequestTimedOutError, HttpStatusCode.ServiceUnavailable);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        [Theory]
 | 
			
		||||
        [InlineData(OcelotErrorCode.CannotAddDataError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.CannotFindDataError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.DownstreamHostNullOrEmptyError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.DownstreamPathNullOrEmptyError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.DownstreampathTemplateAlreadyUsedError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.DownstreamPathTemplateContainsSchemeError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.DownstreamSchemeNullOrEmptyError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.FileValidationFailedError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.InstructionNotForClaimsError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.NoInstructionsError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.ParsingConfigurationHeaderError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.RateLimitOptionsError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.ServicesAreEmptyError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.ServicesAreNullError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.UnableToCompleteRequestError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.UnableToCreateAuthenticationHandlerError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.UnableToFindDownstreamRouteError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.UnableToFindLoadBalancerError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.UnableToFindServiceDiscoveryProviderError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.UnableToFindQoSProviderError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.UnableToSetConfigInConsulError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.UnknownError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.UnmappableRequestError)]
 | 
			
		||||
        [InlineData(OcelotErrorCode.UnsupportedAuthenticationProviderError)]
 | 
			
		||||
        public void should_return_not_found(OcelotErrorCode errorCode)
 | 
			
		||||
        {
 | 
			
		||||
            ShouldMapErrorToStatusCode(errorCode, HttpStatusCode.NotFound);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void AuthenticationErrorsHaveHighestPriority()
 | 
			
		||||
        {
 | 
			
		||||
            var errors = new List<OcelotErrorCode>
 | 
			
		||||
            {
 | 
			
		||||
                OcelotErrorCode.CannotAddDataError,
 | 
			
		||||
                OcelotErrorCode.CannotFindClaimError,
 | 
			
		||||
                OcelotErrorCode.UnauthenticatedError,
 | 
			
		||||
                OcelotErrorCode.RequestTimedOutError,
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            ShouldMapErrorsToStatusCode(errors, HttpStatusCode.Unauthorized);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void AuthorisationErrorsHaveSecondHighestPriority()
 | 
			
		||||
        {
 | 
			
		||||
            var errors = new List<OcelotErrorCode>
 | 
			
		||||
            {
 | 
			
		||||
                OcelotErrorCode.CannotAddDataError,
 | 
			
		||||
                OcelotErrorCode.CannotFindClaimError,
 | 
			
		||||
                OcelotErrorCode.RequestTimedOutError
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            ShouldMapErrorsToStatusCode(errors, HttpStatusCode.Forbidden);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void ServiceUnavailableErrorsHaveThirdHighestPriority()
 | 
			
		||||
        {
 | 
			
		||||
            var errors = new List<OcelotErrorCode>
 | 
			
		||||
            {
 | 
			
		||||
                OcelotErrorCode.CannotAddDataError,
 | 
			
		||||
                OcelotErrorCode.RequestTimedOutError
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            ShouldMapErrorsToStatusCode(errors, HttpStatusCode.ServiceUnavailable);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void check_we_have_considered_all_errors_in_these_tests()
 | 
			
		||||
        {
 | 
			
		||||
            // If this test fails then it's because the number of error codes has changed.
 | 
			
		||||
            // You should make the appropriate changes to the test cases here to ensure
 | 
			
		||||
            // they cover all the error codes, and then modify this assertion.
 | 
			
		||||
            Enum.GetNames(typeof(OcelotErrorCode)).Length.ShouldBe(32, "Looks like the number of error codes has changed. Do you need to modify ErrorsToHttpStatusCodeMapper?");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ShouldMapErrorToStatusCode(OcelotErrorCode errorCode, HttpStatusCode expectedHttpStatusCode)
 | 
			
		||||
        {
 | 
			
		||||
            ShouldMapErrorsToStatusCode(new List<OcelotErrorCode> { errorCode }, expectedHttpStatusCode);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ShouldMapErrorsToStatusCode(List<OcelotErrorCode> errorCodes, HttpStatusCode expectedHttpStatusCode)
 | 
			
		||||
        {
 | 
			
		||||
            var errors = new List<Error>();
 | 
			
		||||
 | 
			
		||||
            foreach(var errorCode in errorCodes)
 | 
			
		||||
            {
 | 
			
		||||
                errors.Add(new AnyError(errorCode));
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            this.Given(x => x.GivenThereAreErrors(errors))
 | 
			
		||||
               .When(x => x.WhenIGetErrorStatusCode())
 | 
			
		||||
               .Then(x => x.ThenTheResponseIsStatusCodeIs(expectedHttpStatusCode))
 | 
			
		||||
               .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenThereAreErrors(List<Error> errors)
 | 
			
		||||
        {
 | 
			
		||||
            _errors = errors;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void WhenIGetErrorStatusCode()
 | 
			
		||||
        {
 | 
			
		||||
            _result = _codeMapper.Map(_errors);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ThenTheResponseIsStatusCodeIs(int expectedCode)
 | 
			
		||||
        {
 | 
			
		||||
            _result.ShouldBe(expectedCode);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ThenTheResponseIsStatusCodeIs(HttpStatusCode expectedCode)
 | 
			
		||||
        {
 | 
			
		||||
            _result.ShouldBe((int)expectedCode);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,72 +1,72 @@
 | 
			
		||||
namespace Ocelot.UnitTests.Responder
 | 
			
		||||
{
 | 
			
		||||
    using System.Net.Http;
 | 
			
		||||
    using Microsoft.AspNetCore.Builder;
 | 
			
		||||
    using Microsoft.Extensions.DependencyInjection;
 | 
			
		||||
    using Moq;
 | 
			
		||||
    using Ocelot.Logging;
 | 
			
		||||
    using Ocelot.Responder;
 | 
			
		||||
    using Ocelot.Responder.Middleware;
 | 
			
		||||
    using Ocelot.Responses;
 | 
			
		||||
    using TestStack.BDDfy;
 | 
			
		||||
    using Xunit;
 | 
			
		||||
 | 
			
		||||
    public class ResponderMiddlewareTests : ServerHostedMiddlewareTest
 | 
			
		||||
    {
 | 
			
		||||
        private readonly Mock<IHttpResponder> _responder;
 | 
			
		||||
        private readonly Mock<IErrorsToHttpStatusCodeMapper> _codeMapper;
 | 
			
		||||
        private OkResponse<HttpResponseMessage> _response;
 | 
			
		||||
 | 
			
		||||
        public ResponderMiddlewareTests()
 | 
			
		||||
        {
 | 
			
		||||
            _responder = new Mock<IHttpResponder>();
 | 
			
		||||
            _codeMapper = new Mock<IErrorsToHttpStatusCodeMapper>();
 | 
			
		||||
 | 
			
		||||
            GivenTheTestServerIsConfigured();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_not_return_any_errors()
 | 
			
		||||
        {
 | 
			
		||||
            this.Given(x => x.GivenTheHttpResponseMessageIs(new HttpResponseMessage()))
 | 
			
		||||
                .And(x => x.GivenThereAreNoPipelineErrors())
 | 
			
		||||
                .When(x => x.WhenICallTheMiddleware())
 | 
			
		||||
                .Then(x => x.ThenThereAreNoErrors())
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected override void GivenTheTestServerServicesAreConfigured(IServiceCollection services)
 | 
			
		||||
        {
 | 
			
		||||
            services.AddSingleton<IOcelotLoggerFactory, AspDotNetLoggerFactory>();
 | 
			
		||||
            services.AddLogging();
 | 
			
		||||
            services.AddSingleton(_codeMapper.Object);
 | 
			
		||||
            services.AddSingleton(_responder.Object);
 | 
			
		||||
            services.AddSingleton(ScopedRepository.Object);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected override void GivenTheTestServerPipelineIsConfigured(IApplicationBuilder app)
 | 
			
		||||
        {
 | 
			
		||||
            app.UseResponderMiddleware();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenTheHttpResponseMessageIs(HttpResponseMessage response)
 | 
			
		||||
        {
 | 
			
		||||
            _response = new OkResponse<HttpResponseMessage>(response);
 | 
			
		||||
            ScopedRepository
 | 
			
		||||
                .Setup(x => x.Get<HttpResponseMessage>(It.IsAny<string>()))
 | 
			
		||||
                .Returns(_response);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenThereAreNoPipelineErrors()
 | 
			
		||||
        {
 | 
			
		||||
            ScopedRepository
 | 
			
		||||
                .Setup(x => x.Get<bool>(It.IsAny<string>()))
 | 
			
		||||
                .Returns(new OkResponse<bool>(false));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ThenThereAreNoErrors()
 | 
			
		||||
        {
 | 
			
		||||
            //todo a better assert?
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
namespace Ocelot.UnitTests.Responder
 | 
			
		||||
{
 | 
			
		||||
    using System.Net.Http;
 | 
			
		||||
    using Microsoft.AspNetCore.Builder;
 | 
			
		||||
    using Microsoft.Extensions.DependencyInjection;
 | 
			
		||||
    using Moq;
 | 
			
		||||
    using Ocelot.Logging;
 | 
			
		||||
    using Ocelot.Responder;
 | 
			
		||||
    using Ocelot.Responder.Middleware;
 | 
			
		||||
    using Ocelot.Responses;
 | 
			
		||||
    using TestStack.BDDfy;
 | 
			
		||||
    using Xunit;
 | 
			
		||||
 | 
			
		||||
    public class ResponderMiddlewareTests : ServerHostedMiddlewareTest
 | 
			
		||||
    {
 | 
			
		||||
        private readonly Mock<IHttpResponder> _responder;
 | 
			
		||||
        private readonly Mock<IErrorsToHttpStatusCodeMapper> _codeMapper;
 | 
			
		||||
        private OkResponse<HttpResponseMessage> _response;
 | 
			
		||||
 | 
			
		||||
        public ResponderMiddlewareTests()
 | 
			
		||||
        {
 | 
			
		||||
            _responder = new Mock<IHttpResponder>();
 | 
			
		||||
            _codeMapper = new Mock<IErrorsToHttpStatusCodeMapper>();
 | 
			
		||||
 | 
			
		||||
            GivenTheTestServerIsConfigured();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_not_return_any_errors()
 | 
			
		||||
        {
 | 
			
		||||
            this.Given(x => x.GivenTheHttpResponseMessageIs(new HttpResponseMessage()))
 | 
			
		||||
                .And(x => x.GivenThereAreNoPipelineErrors())
 | 
			
		||||
                .When(x => x.WhenICallTheMiddleware())
 | 
			
		||||
                .Then(x => x.ThenThereAreNoErrors())
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected override void GivenTheTestServerServicesAreConfigured(IServiceCollection services)
 | 
			
		||||
        {
 | 
			
		||||
            services.AddSingleton<IOcelotLoggerFactory, AspDotNetLoggerFactory>();
 | 
			
		||||
            services.AddLogging();
 | 
			
		||||
            services.AddSingleton(_codeMapper.Object);
 | 
			
		||||
            services.AddSingleton(_responder.Object);
 | 
			
		||||
            services.AddSingleton(ScopedRepository.Object);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected override void GivenTheTestServerPipelineIsConfigured(IApplicationBuilder app)
 | 
			
		||||
        {
 | 
			
		||||
            app.UseResponderMiddleware();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenTheHttpResponseMessageIs(HttpResponseMessage response)
 | 
			
		||||
        {
 | 
			
		||||
            _response = new OkResponse<HttpResponseMessage>(response);
 | 
			
		||||
            ScopedRepository
 | 
			
		||||
                .Setup(x => x.Get<HttpResponseMessage>(It.IsAny<string>()))
 | 
			
		||||
                .Returns(_response);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenThereAreNoPipelineErrors()
 | 
			
		||||
        {
 | 
			
		||||
            ScopedRepository
 | 
			
		||||
                .Setup(x => x.Get<bool>(It.IsAny<string>()))
 | 
			
		||||
                .Returns(new OkResponse<bool>(false));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ThenThereAreNoErrors()
 | 
			
		||||
        {
 | 
			
		||||
            //todo a better assert?
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user