mirror of
				https://github.com/nsnail/Ocelot.git
				synced 2025-11-04 20:30:50 +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,82 +1,82 @@
 | 
			
		||||
namespace Ocelot.UnitTests.Authorization
 | 
			
		||||
{
 | 
			
		||||
    using System.Collections.Generic;
 | 
			
		||||
    using System.Security.Claims;
 | 
			
		||||
    using Microsoft.AspNetCore.Builder;
 | 
			
		||||
    using Microsoft.Extensions.DependencyInjection;
 | 
			
		||||
    using Moq;
 | 
			
		||||
    using Ocelot.Authorisation;
 | 
			
		||||
    using Ocelot.Authorisation.Middleware;
 | 
			
		||||
    using Ocelot.Configuration.Builder;
 | 
			
		||||
    using Ocelot.DownstreamRouteFinder;
 | 
			
		||||
    using Ocelot.DownstreamRouteFinder.UrlMatcher;
 | 
			
		||||
    using Ocelot.Logging;
 | 
			
		||||
    using Ocelot.Responses;
 | 
			
		||||
    using TestStack.BDDfy;
 | 
			
		||||
    using Xunit;
 | 
			
		||||
 | 
			
		||||
    public class AuthorisationMiddlewareTests : ServerHostedMiddlewareTest
 | 
			
		||||
    {
 | 
			
		||||
        private readonly Mock<IClaimsAuthoriser> _authService;
 | 
			
		||||
        private readonly Mock<IScopesAuthoriser> _authScopesService;
 | 
			
		||||
        private OkResponse<DownstreamRoute> _downstreamRoute;
 | 
			
		||||
 | 
			
		||||
        public AuthorisationMiddlewareTests()
 | 
			
		||||
        {
 | 
			
		||||
            _authService = new Mock<IClaimsAuthoriser>();
 | 
			
		||||
            _authScopesService = new Mock<IScopesAuthoriser>();
 | 
			
		||||
 | 
			
		||||
            GivenTheTestServerIsConfigured();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_call_authorisation_service()
 | 
			
		||||
        {
 | 
			
		||||
            this.Given(x => x.GivenTheDownStreamRouteIs(new DownstreamRoute(new List<PlaceholderNameAndValue>(), 
 | 
			
		||||
                new ReRouteBuilder()
 | 
			
		||||
                    .WithIsAuthorised(true)
 | 
			
		||||
                    .WithUpstreamHttpMethod(new List<string> { "Get" })
 | 
			
		||||
                    .Build())))
 | 
			
		||||
                .And(x => x.GivenTheAuthServiceReturns(new OkResponse<bool>(true)))
 | 
			
		||||
                .When(x => x.WhenICallTheMiddleware())
 | 
			
		||||
                .Then(x => x.ThenTheAuthServiceIsCalledCorrectly())
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected override void GivenTheTestServerServicesAreConfigured(IServiceCollection services)
 | 
			
		||||
        {
 | 
			
		||||
            services.AddSingleton<IOcelotLoggerFactory, AspDotNetLoggerFactory>();
 | 
			
		||||
            services.AddLogging();
 | 
			
		||||
            services.AddSingleton(_authService.Object);
 | 
			
		||||
            services.AddSingleton(_authScopesService.Object);
 | 
			
		||||
            services.AddSingleton(ScopedRepository.Object);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected override void GivenTheTestServerPipelineIsConfigured(IApplicationBuilder app)
 | 
			
		||||
        {
 | 
			
		||||
            app.UseAuthorisationMiddleware();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenTheDownStreamRouteIs(DownstreamRoute downstreamRoute)
 | 
			
		||||
        {
 | 
			
		||||
            _downstreamRoute = new OkResponse<DownstreamRoute>(downstreamRoute);
 | 
			
		||||
            ScopedRepository
 | 
			
		||||
                .Setup(x => x.Get<DownstreamRoute>(It.IsAny<string>()))
 | 
			
		||||
                .Returns(_downstreamRoute);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenTheAuthServiceReturns(Response<bool> expected)
 | 
			
		||||
        {
 | 
			
		||||
            _authService
 | 
			
		||||
                .Setup(x => x.Authorise(It.IsAny<ClaimsPrincipal>(), It.IsAny<Dictionary<string, string>>()))
 | 
			
		||||
                .Returns(expected);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ThenTheAuthServiceIsCalledCorrectly()
 | 
			
		||||
        {
 | 
			
		||||
            _authService
 | 
			
		||||
                .Verify(x => x.Authorise(It.IsAny<ClaimsPrincipal>(),
 | 
			
		||||
                It.IsAny<Dictionary<string, string>>()), Times.Once);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
namespace Ocelot.UnitTests.Authorization
 | 
			
		||||
{
 | 
			
		||||
    using System.Collections.Generic;
 | 
			
		||||
    using System.Security.Claims;
 | 
			
		||||
    using Microsoft.AspNetCore.Builder;
 | 
			
		||||
    using Microsoft.Extensions.DependencyInjection;
 | 
			
		||||
    using Moq;
 | 
			
		||||
    using Ocelot.Authorisation;
 | 
			
		||||
    using Ocelot.Authorisation.Middleware;
 | 
			
		||||
    using Ocelot.Configuration.Builder;
 | 
			
		||||
    using Ocelot.DownstreamRouteFinder;
 | 
			
		||||
    using Ocelot.DownstreamRouteFinder.UrlMatcher;
 | 
			
		||||
    using Ocelot.Logging;
 | 
			
		||||
    using Ocelot.Responses;
 | 
			
		||||
    using TestStack.BDDfy;
 | 
			
		||||
    using Xunit;
 | 
			
		||||
 | 
			
		||||
    public class AuthorisationMiddlewareTests : ServerHostedMiddlewareTest
 | 
			
		||||
    {
 | 
			
		||||
        private readonly Mock<IClaimsAuthoriser> _authService;
 | 
			
		||||
        private readonly Mock<IScopesAuthoriser> _authScopesService;
 | 
			
		||||
        private OkResponse<DownstreamRoute> _downstreamRoute;
 | 
			
		||||
 | 
			
		||||
        public AuthorisationMiddlewareTests()
 | 
			
		||||
        {
 | 
			
		||||
            _authService = new Mock<IClaimsAuthoriser>();
 | 
			
		||||
            _authScopesService = new Mock<IScopesAuthoriser>();
 | 
			
		||||
 | 
			
		||||
            GivenTheTestServerIsConfigured();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_call_authorisation_service()
 | 
			
		||||
        {
 | 
			
		||||
            this.Given(x => x.GivenTheDownStreamRouteIs(new DownstreamRoute(new List<PlaceholderNameAndValue>(), 
 | 
			
		||||
                new ReRouteBuilder()
 | 
			
		||||
                    .WithIsAuthorised(true)
 | 
			
		||||
                    .WithUpstreamHttpMethod(new List<string> { "Get" })
 | 
			
		||||
                    .Build())))
 | 
			
		||||
                .And(x => x.GivenTheAuthServiceReturns(new OkResponse<bool>(true)))
 | 
			
		||||
                .When(x => x.WhenICallTheMiddleware())
 | 
			
		||||
                .Then(x => x.ThenTheAuthServiceIsCalledCorrectly())
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected override void GivenTheTestServerServicesAreConfigured(IServiceCollection services)
 | 
			
		||||
        {
 | 
			
		||||
            services.AddSingleton<IOcelotLoggerFactory, AspDotNetLoggerFactory>();
 | 
			
		||||
            services.AddLogging();
 | 
			
		||||
            services.AddSingleton(_authService.Object);
 | 
			
		||||
            services.AddSingleton(_authScopesService.Object);
 | 
			
		||||
            services.AddSingleton(ScopedRepository.Object);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected override void GivenTheTestServerPipelineIsConfigured(IApplicationBuilder app)
 | 
			
		||||
        {
 | 
			
		||||
            app.UseAuthorisationMiddleware();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenTheDownStreamRouteIs(DownstreamRoute downstreamRoute)
 | 
			
		||||
        {
 | 
			
		||||
            _downstreamRoute = new OkResponse<DownstreamRoute>(downstreamRoute);
 | 
			
		||||
            ScopedRepository
 | 
			
		||||
                .Setup(x => x.Get<DownstreamRoute>(It.IsAny<string>()))
 | 
			
		||||
                .Returns(_downstreamRoute);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenTheAuthServiceReturns(Response<bool> expected)
 | 
			
		||||
        {
 | 
			
		||||
            _authService
 | 
			
		||||
                .Setup(x => x.Authorise(It.IsAny<ClaimsPrincipal>(), It.IsAny<Dictionary<string, string>>()))
 | 
			
		||||
                .Returns(expected);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ThenTheAuthServiceIsCalledCorrectly()
 | 
			
		||||
        {
 | 
			
		||||
            _authService
 | 
			
		||||
                .Verify(x => x.Authorise(It.IsAny<ClaimsPrincipal>(),
 | 
			
		||||
                It.IsAny<Dictionary<string, string>>()), Times.Once);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,79 +1,79 @@
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Security.Claims;
 | 
			
		||||
using Ocelot.Authorisation;
 | 
			
		||||
using Ocelot.Responses;
 | 
			
		||||
using Shouldly;
 | 
			
		||||
using TestStack.BDDfy;
 | 
			
		||||
using Xunit;
 | 
			
		||||
 | 
			
		||||
namespace Ocelot.UnitTests.Authorization
 | 
			
		||||
{
 | 
			
		||||
    using Ocelot.Infrastructure.Claims.Parser;
 | 
			
		||||
 | 
			
		||||
    public class ClaimsAuthoriserTests
 | 
			
		||||
    {
 | 
			
		||||
        private readonly ClaimsAuthoriser _claimsAuthoriser;
 | 
			
		||||
        private ClaimsPrincipal _claimsPrincipal;
 | 
			
		||||
        private Dictionary<string, string> _requirement;
 | 
			
		||||
        private Response<bool> _result;
 | 
			
		||||
 | 
			
		||||
        public ClaimsAuthoriserTests()
 | 
			
		||||
        {
 | 
			
		||||
            _claimsAuthoriser = new ClaimsAuthoriser(new ClaimsParser());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_authorise_user()
 | 
			
		||||
        {
 | 
			
		||||
            this.Given(x => x.GivenAClaimsPrincipal(new ClaimsPrincipal(new ClaimsIdentity(new List<Claim>
 | 
			
		||||
                {
 | 
			
		||||
                    new Claim("UserType", "registered")
 | 
			
		||||
                }))))
 | 
			
		||||
                .And(x => x.GivenARouteClaimsRequirement(new Dictionary<string, string>
 | 
			
		||||
                {
 | 
			
		||||
                    {"UserType", "registered"}
 | 
			
		||||
                }))
 | 
			
		||||
                .When(x => x.WhenICallTheAuthoriser())
 | 
			
		||||
                .Then(x => x.ThenTheUserIsAuthorised())
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_not_authorise_user()
 | 
			
		||||
        {
 | 
			
		||||
            this.Given(x => x.GivenAClaimsPrincipal(new ClaimsPrincipal(new ClaimsIdentity(new List<Claim>()))))
 | 
			
		||||
            .And(x => x.GivenARouteClaimsRequirement(new Dictionary<string, string>
 | 
			
		||||
                {
 | 
			
		||||
                    { "UserType", "registered" }
 | 
			
		||||
                }))
 | 
			
		||||
            .When(x => x.WhenICallTheAuthoriser())
 | 
			
		||||
            .Then(x => x.ThenTheUserIsntAuthorised())
 | 
			
		||||
            .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenAClaimsPrincipal(ClaimsPrincipal claimsPrincipal)
 | 
			
		||||
        {
 | 
			
		||||
            _claimsPrincipal = claimsPrincipal;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenARouteClaimsRequirement(Dictionary<string, string> requirement)
 | 
			
		||||
        {
 | 
			
		||||
            _requirement = requirement;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void WhenICallTheAuthoriser()
 | 
			
		||||
        {
 | 
			
		||||
            _result = _claimsAuthoriser.Authorise(_claimsPrincipal, _requirement);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ThenTheUserIsAuthorised()
 | 
			
		||||
        {
 | 
			
		||||
            _result.Data.ShouldBe(true);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ThenTheUserIsntAuthorised()
 | 
			
		||||
        {
 | 
			
		||||
            _result.Data.ShouldBe(false);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Security.Claims;
 | 
			
		||||
using Ocelot.Authorisation;
 | 
			
		||||
using Ocelot.Responses;
 | 
			
		||||
using Shouldly;
 | 
			
		||||
using TestStack.BDDfy;
 | 
			
		||||
using Xunit;
 | 
			
		||||
 | 
			
		||||
namespace Ocelot.UnitTests.Authorization
 | 
			
		||||
{
 | 
			
		||||
    using Ocelot.Infrastructure.Claims.Parser;
 | 
			
		||||
 | 
			
		||||
    public class ClaimsAuthoriserTests
 | 
			
		||||
    {
 | 
			
		||||
        private readonly ClaimsAuthoriser _claimsAuthoriser;
 | 
			
		||||
        private ClaimsPrincipal _claimsPrincipal;
 | 
			
		||||
        private Dictionary<string, string> _requirement;
 | 
			
		||||
        private Response<bool> _result;
 | 
			
		||||
 | 
			
		||||
        public ClaimsAuthoriserTests()
 | 
			
		||||
        {
 | 
			
		||||
            _claimsAuthoriser = new ClaimsAuthoriser(new ClaimsParser());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_authorise_user()
 | 
			
		||||
        {
 | 
			
		||||
            this.Given(x => x.GivenAClaimsPrincipal(new ClaimsPrincipal(new ClaimsIdentity(new List<Claim>
 | 
			
		||||
                {
 | 
			
		||||
                    new Claim("UserType", "registered")
 | 
			
		||||
                }))))
 | 
			
		||||
                .And(x => x.GivenARouteClaimsRequirement(new Dictionary<string, string>
 | 
			
		||||
                {
 | 
			
		||||
                    {"UserType", "registered"}
 | 
			
		||||
                }))
 | 
			
		||||
                .When(x => x.WhenICallTheAuthoriser())
 | 
			
		||||
                .Then(x => x.ThenTheUserIsAuthorised())
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_not_authorise_user()
 | 
			
		||||
        {
 | 
			
		||||
            this.Given(x => x.GivenAClaimsPrincipal(new ClaimsPrincipal(new ClaimsIdentity(new List<Claim>()))))
 | 
			
		||||
            .And(x => x.GivenARouteClaimsRequirement(new Dictionary<string, string>
 | 
			
		||||
                {
 | 
			
		||||
                    { "UserType", "registered" }
 | 
			
		||||
                }))
 | 
			
		||||
            .When(x => x.WhenICallTheAuthoriser())
 | 
			
		||||
            .Then(x => x.ThenTheUserIsntAuthorised())
 | 
			
		||||
            .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenAClaimsPrincipal(ClaimsPrincipal claimsPrincipal)
 | 
			
		||||
        {
 | 
			
		||||
            _claimsPrincipal = claimsPrincipal;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenARouteClaimsRequirement(Dictionary<string, string> requirement)
 | 
			
		||||
        {
 | 
			
		||||
            _requirement = requirement;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void WhenICallTheAuthoriser()
 | 
			
		||||
        {
 | 
			
		||||
            _result = _claimsAuthoriser.Authorise(_claimsPrincipal, _requirement);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ThenTheUserIsAuthorised()
 | 
			
		||||
        {
 | 
			
		||||
            _result.Data.ShouldBe(true);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ThenTheUserIsntAuthorised()
 | 
			
		||||
        {
 | 
			
		||||
            _result.Data.ShouldBe(false);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user