mirror of
				https://github.com/nsnail/Ocelot.git
				synced 2025-11-04 09:55:28 +08:00 
			
		
		
		
	downstreambaseurl placeholder for multiple location value redirects (#207)
This commit is contained in:
		@@ -37,6 +37,7 @@ namespace Ocelot.UnitTests.Headers
 | 
			
		||||
        public void should_call_pre_and_post_header_transforms()
 | 
			
		||||
        {
 | 
			
		||||
            this.Given(x => GivenTheFollowingRequest())
 | 
			
		||||
                .And(x => GivenTheDownstreamRequestIs())
 | 
			
		||||
                .And(x => GivenTheReRouteHasPreFindAndReplaceSetUp())
 | 
			
		||||
                .And(x => GivenTheHttpResponseMessageIs())
 | 
			
		||||
                .When(x => WhenICallTheMiddleware())
 | 
			
		||||
@@ -45,6 +46,13 @@ namespace Ocelot.UnitTests.Headers
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenTheDownstreamRequestIs()
 | 
			
		||||
        {
 | 
			
		||||
            var request = new HttpRequestMessage();
 | 
			
		||||
            var response = new OkResponse<HttpRequestMessage>(request);
 | 
			
		||||
            ScopedRepository.Setup(x => x.Get<HttpRequestMessage>("DownstreamRequest")).Returns(response);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenTheHttpResponseMessageIs()
 | 
			
		||||
        {
 | 
			
		||||
            var httpResponseMessage = new HttpResponseMessage();
 | 
			
		||||
@@ -68,7 +76,7 @@ namespace Ocelot.UnitTests.Headers
 | 
			
		||||
 | 
			
		||||
        private void ThenTheIHttpResponseHeaderReplacerIsCalledCorrectly()
 | 
			
		||||
        {
 | 
			
		||||
            _postReplacer.Verify(x => x.Replace(It.IsAny<HttpResponseMessage>(), It.IsAny<List<HeaderFindAndReplace>>()), Times.Once);
 | 
			
		||||
            _postReplacer.Verify(x => x.Replace(It.IsAny<HttpResponseMessage>(), It.IsAny<List<HeaderFindAndReplace>>(), It.IsAny<HttpRequestMessage>()), Times.Once);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenTheFollowingRequest()
 | 
			
		||||
 
 | 
			
		||||
@@ -16,6 +16,7 @@ namespace Ocelot.UnitTests.Headers
 | 
			
		||||
        private HttpResponseHeaderReplacer _replacer;
 | 
			
		||||
        private List<HeaderFindAndReplace> _headerFindAndReplaces;
 | 
			
		||||
        private Response _result;
 | 
			
		||||
        private HttpRequestMessage _request;
 | 
			
		||||
 | 
			
		||||
        public HttpResponseHeaderReplacerTests()
 | 
			
		||||
        {
 | 
			
		||||
@@ -52,6 +53,143 @@ namespace Ocelot.UnitTests.Headers
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_replace_downstream_base_url_with_ocelot_base_url()
 | 
			
		||||
        {
 | 
			
		||||
            var downstreamUrl = "http://downstream.com/";
 | 
			
		||||
 | 
			
		||||
            var request = new HttpRequestMessage();
 | 
			
		||||
            request.RequestUri = new System.Uri(downstreamUrl);
 | 
			
		||||
 | 
			
		||||
            var response = new HttpResponseMessage();
 | 
			
		||||
            response.Headers.Add("Location", downstreamUrl);
 | 
			
		||||
 | 
			
		||||
            var fAndRs = new List<HeaderFindAndReplace>();
 | 
			
		||||
            fAndRs.Add(new HeaderFindAndReplace("Location", "{DownstreamBaseUrl}", "http://ocelot.com/", 0));
 | 
			
		||||
 | 
			
		||||
            this.Given(x => GivenTheHttpResponse(response))
 | 
			
		||||
                .And(x => GivenTheRequestIs(request))
 | 
			
		||||
                .And(x => GivenTheFollowingHeaderReplacements(fAndRs))
 | 
			
		||||
                .When(x => WhenICallTheReplacer())
 | 
			
		||||
                .Then(x => ThenTheHeaderShouldBe("Location", "http://ocelot.com/"))
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_replace_downstream_base_url_with_ocelot_base_url_with_port()
 | 
			
		||||
        {
 | 
			
		||||
            var downstreamUrl = "http://downstream.com/";
 | 
			
		||||
 | 
			
		||||
            var request = new HttpRequestMessage();
 | 
			
		||||
            request.RequestUri = new System.Uri(downstreamUrl);
 | 
			
		||||
 | 
			
		||||
            var response = new HttpResponseMessage();
 | 
			
		||||
            response.Headers.Add("Location", downstreamUrl);
 | 
			
		||||
 | 
			
		||||
            var fAndRs = new List<HeaderFindAndReplace>();
 | 
			
		||||
            fAndRs.Add(new HeaderFindAndReplace("Location", "{DownstreamBaseUrl}", "http://ocelot.com:123/", 0));
 | 
			
		||||
 | 
			
		||||
            this.Given(x => GivenTheHttpResponse(response))
 | 
			
		||||
                .And(x => GivenTheRequestIs(request))
 | 
			
		||||
                .And(x => GivenTheFollowingHeaderReplacements(fAndRs))
 | 
			
		||||
                .When(x => WhenICallTheReplacer())
 | 
			
		||||
                .Then(x => ThenTheHeaderShouldBe("Location", "http://ocelot.com:123/"))
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_replace_downstream_base_url_with_ocelot_base_url_and_path()
 | 
			
		||||
        {
 | 
			
		||||
            var downstreamUrl = "http://downstream.com/test/product";
 | 
			
		||||
 | 
			
		||||
            var request = new HttpRequestMessage();
 | 
			
		||||
            request.RequestUri = new System.Uri(downstreamUrl);
 | 
			
		||||
 | 
			
		||||
            var response = new HttpResponseMessage();
 | 
			
		||||
            response.Headers.Add("Location", downstreamUrl);
 | 
			
		||||
 | 
			
		||||
            var fAndRs = new List<HeaderFindAndReplace>();
 | 
			
		||||
            fAndRs.Add(new HeaderFindAndReplace("Location", "{DownstreamBaseUrl}", "http://ocelot.com/", 0));
 | 
			
		||||
 | 
			
		||||
            this.Given(x => GivenTheHttpResponse(response))
 | 
			
		||||
                .And(x => GivenTheRequestIs(request))
 | 
			
		||||
                .And(x => GivenTheFollowingHeaderReplacements(fAndRs))
 | 
			
		||||
                .When(x => WhenICallTheReplacer())
 | 
			
		||||
                .Then(x => ThenTheHeaderShouldBe("Location", "http://ocelot.com/test/product"))
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_replace_downstream_base_url_with_ocelot_base_url_with_path_and_port()
 | 
			
		||||
        {
 | 
			
		||||
            var downstreamUrl = "http://downstream.com/test/product";
 | 
			
		||||
 | 
			
		||||
            var request = new HttpRequestMessage();
 | 
			
		||||
            request.RequestUri = new System.Uri(downstreamUrl);
 | 
			
		||||
 | 
			
		||||
            var response = new HttpResponseMessage();
 | 
			
		||||
            response.Headers.Add("Location", downstreamUrl);
 | 
			
		||||
 | 
			
		||||
            var fAndRs = new List<HeaderFindAndReplace>();
 | 
			
		||||
            fAndRs.Add(new HeaderFindAndReplace("Location", "{DownstreamBaseUrl}", "http://ocelot.com:123/", 0));
 | 
			
		||||
 | 
			
		||||
            this.Given(x => GivenTheHttpResponse(response))
 | 
			
		||||
                .And(x => GivenTheRequestIs(request))
 | 
			
		||||
                .And(x => GivenTheFollowingHeaderReplacements(fAndRs))
 | 
			
		||||
                .When(x => WhenICallTheReplacer())
 | 
			
		||||
                .Then(x => ThenTheHeaderShouldBe("Location", "http://ocelot.com:123/test/product"))
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_replace_downstream_base_url_and_port_with_ocelot_base_url()
 | 
			
		||||
        {
 | 
			
		||||
            var downstreamUrl = "http://downstream.com:123/test/product";
 | 
			
		||||
 | 
			
		||||
            var request = new HttpRequestMessage();
 | 
			
		||||
            request.RequestUri = new System.Uri(downstreamUrl);
 | 
			
		||||
 | 
			
		||||
            var response = new HttpResponseMessage();
 | 
			
		||||
            response.Headers.Add("Location", downstreamUrl);
 | 
			
		||||
 | 
			
		||||
            var fAndRs = new List<HeaderFindAndReplace>();
 | 
			
		||||
            fAndRs.Add(new HeaderFindAndReplace("Location", "{DownstreamBaseUrl}", "http://ocelot.com/", 0));
 | 
			
		||||
 | 
			
		||||
            this.Given(x => GivenTheHttpResponse(response))
 | 
			
		||||
                .And(x => GivenTheRequestIs(request))
 | 
			
		||||
                .And(x => GivenTheFollowingHeaderReplacements(fAndRs))
 | 
			
		||||
                .When(x => WhenICallTheReplacer())
 | 
			
		||||
                .Then(x => ThenTheHeaderShouldBe("Location", "http://ocelot.com/test/product"))
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void should_replace_downstream_base_url_and_port_with_ocelot_base_url_and_port()
 | 
			
		||||
        {
 | 
			
		||||
            var downstreamUrl = "http://downstream.com:123/test/product";
 | 
			
		||||
 | 
			
		||||
            var request = new HttpRequestMessage();
 | 
			
		||||
            request.RequestUri = new System.Uri(downstreamUrl);
 | 
			
		||||
 | 
			
		||||
            var response = new HttpResponseMessage();
 | 
			
		||||
            response.Headers.Add("Location", downstreamUrl);
 | 
			
		||||
 | 
			
		||||
            var fAndRs = new List<HeaderFindAndReplace>();
 | 
			
		||||
            fAndRs.Add(new HeaderFindAndReplace("Location", "{DownstreamBaseUrl}", "http://ocelot.com:321/", 0));
 | 
			
		||||
 | 
			
		||||
            this.Given(x => GivenTheHttpResponse(response))
 | 
			
		||||
                .And(x => GivenTheRequestIs(request))
 | 
			
		||||
                .And(x => GivenTheFollowingHeaderReplacements(fAndRs))
 | 
			
		||||
                .When(x => WhenICallTheReplacer())
 | 
			
		||||
                .Then(x => ThenTheHeaderShouldBe("Location", "http://ocelot.com:321/test/product"))
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void GivenTheRequestIs(HttpRequestMessage request)
 | 
			
		||||
        {
 | 
			
		||||
            _request = request;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ThenTheHeadersAreNotReplaced()
 | 
			
		||||
        {
 | 
			
		||||
@@ -75,7 +213,13 @@ namespace Ocelot.UnitTests.Headers
 | 
			
		||||
 | 
			
		||||
        private void WhenICallTheReplacer()
 | 
			
		||||
        {
 | 
			
		||||
            _result = _replacer.Replace(_response, _headerFindAndReplaces);
 | 
			
		||||
            _result = _replacer.Replace(_response, _headerFindAndReplaces, _request);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ThenTheHeaderShouldBe(string key, string value)
 | 
			
		||||
        {
 | 
			
		||||
            var test = _response.Headers.GetValues(key);
 | 
			
		||||
            test.First().ShouldBe(value);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
         private void ThenTheHeadersAreReplaced()
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user