mirror of
				https://github.com/nsnail/Ocelot.git
				synced 2025-11-04 09:35:27 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			98 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
namespace Ocelot.UnitTests.Headers
 | 
						|
{
 | 
						|
    using System.Collections.Generic;
 | 
						|
    using System.Net.Http;
 | 
						|
    using Microsoft.AspNetCore.Builder;
 | 
						|
    using Microsoft.Extensions.DependencyInjection;
 | 
						|
    using Moq;
 | 
						|
    using Ocelot.Configuration;
 | 
						|
    using Ocelot.Configuration.Builder;
 | 
						|
    using Ocelot.DownstreamRouteFinder;
 | 
						|
    using Ocelot.DownstreamRouteFinder.UrlMatcher;
 | 
						|
    using Ocelot.Headers;
 | 
						|
    using Ocelot.Headers.Middleware;
 | 
						|
    using Ocelot.Logging;
 | 
						|
    using Ocelot.Responses;
 | 
						|
    using TestStack.BDDfy;
 | 
						|
    using Xunit;
 | 
						|
 | 
						|
    public class HttpRequestHeadersBuilderMiddlewareTests : ServerHostedMiddlewareTest
 | 
						|
    {
 | 
						|
        private readonly Mock<IAddHeadersToRequest> _addHeaders;
 | 
						|
        private readonly HttpRequestMessage _downstreamRequest;
 | 
						|
        private Response<DownstreamRoute> _downstreamRoute;
 | 
						|
 | 
						|
        public HttpRequestHeadersBuilderMiddlewareTests()
 | 
						|
        {
 | 
						|
            _addHeaders = new Mock<IAddHeadersToRequest>();
 | 
						|
 | 
						|
            _downstreamRequest = new HttpRequestMessage();
 | 
						|
            ScopedRepository
 | 
						|
                .Setup(sr => sr.Get<HttpRequestMessage>("DownstreamRequest"))
 | 
						|
                .Returns(new OkResponse<HttpRequestMessage>(_downstreamRequest));
 | 
						|
 | 
						|
            GivenTheTestServerIsConfigured();
 | 
						|
        }
 | 
						|
 | 
						|
        [Fact]
 | 
						|
        public void should_call_add_headers_to_request_correctly()
 | 
						|
        {
 | 
						|
            var downstreamRoute = new DownstreamRoute(new List<UrlPathPlaceholderNameAndValue>(),
 | 
						|
                new ReRouteBuilder()
 | 
						|
                    .WithDownstreamPathTemplate("any old string")
 | 
						|
                    .WithClaimsToHeaders(new List<ClaimToThing>
 | 
						|
                    {
 | 
						|
                        new ClaimToThing("UserId", "Subject", "", 0)
 | 
						|
                    })
 | 
						|
                    .WithUpstreamHttpMethod(new List<string> { "Get" })
 | 
						|
                    .Build());
 | 
						|
 | 
						|
            this.Given(x => x.GivenTheDownStreamRouteIs(downstreamRoute))
 | 
						|
                .And(x => x.GivenTheAddHeadersToDownstreamRequestReturnsOk())
 | 
						|
                .When(x => x.WhenICallTheMiddleware())
 | 
						|
                .Then(x => x.ThenTheAddHeadersToRequestIsCalledCorrectly())
 | 
						|
                .BDDfy();
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void GivenTheTestServerServicesAreConfigured(IServiceCollection services)
 | 
						|
        {
 | 
						|
            services.AddSingleton<IOcelotLoggerFactory, AspDotNetLoggerFactory>();
 | 
						|
            services.AddLogging();
 | 
						|
            services.AddSingleton(_addHeaders.Object);
 | 
						|
            services.AddSingleton(ScopedRepository.Object);
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void GivenTheTestServerPipelineIsConfigured(IApplicationBuilder app)
 | 
						|
        {
 | 
						|
            app.UseHttpRequestHeadersBuilderMiddleware();
 | 
						|
        }
 | 
						|
 | 
						|
        private void GivenTheDownStreamRouteIs(DownstreamRoute downstreamRoute)
 | 
						|
        {
 | 
						|
            _downstreamRoute = new OkResponse<DownstreamRoute>(downstreamRoute);
 | 
						|
            ScopedRepository
 | 
						|
                .Setup(x => x.Get<DownstreamRoute>(It.IsAny<string>()))
 | 
						|
                .Returns(_downstreamRoute);
 | 
						|
        }
 | 
						|
 | 
						|
        private void GivenTheAddHeadersToDownstreamRequestReturnsOk()
 | 
						|
        {
 | 
						|
            _addHeaders
 | 
						|
                .Setup(x => x.SetHeadersOnDownstreamRequest(
 | 
						|
                    It.IsAny<List<ClaimToThing>>(),
 | 
						|
                    It.IsAny<IEnumerable<System.Security.Claims.Claim>>(),
 | 
						|
                    It.IsAny<HttpRequestMessage>()))
 | 
						|
                .Returns(new OkResponse());
 | 
						|
        }
 | 
						|
 | 
						|
        private void ThenTheAddHeadersToRequestIsCalledCorrectly()
 | 
						|
        {
 | 
						|
            _addHeaders
 | 
						|
                .Verify(x => x.SetHeadersOnDownstreamRequest(
 | 
						|
                    It.IsAny<List<ClaimToThing>>(),
 | 
						|
                    It.IsAny<IEnumerable<System.Security.Claims.Claim>>(), 
 | 
						|
                    _downstreamRequest), Times.Once);
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |