mirror of
				https://github.com/nsnail/Ocelot.git
				synced 2025-11-04 15:30:49 +08:00 
			
		
		
		
	Fix/1157 fix UpstreamHost validation (#1169)
* #1157: fix reRoute UpstreamHost validation * change port number
This commit is contained in:
		@@ -135,7 +135,7 @@
 | 
			
		||||
        {
 | 
			
		||||
            var matchingReRoutes = reRoutes
 | 
			
		||||
                .Where(r => r.UpstreamPathTemplate == reRoute.UpstreamPathTemplate
 | 
			
		||||
                            && (r.UpstreamHost == reRoute.UpstreamHost || reRoute.UpstreamHost == null))
 | 
			
		||||
                            && r.UpstreamHost == reRoute.UpstreamHost)
 | 
			
		||||
                .ToList();
 | 
			
		||||
 | 
			
		||||
            if (matchingReRoutes.Count == 1)
 | 
			
		||||
 
 | 
			
		||||
@@ -342,7 +342,7 @@ namespace Ocelot.IntegrationTests
 | 
			
		||||
        public void should_get_file_configuration_edit_and_post_updated_version_redirecting_reroute()
 | 
			
		||||
        {
 | 
			
		||||
            var fooPort = 47689;
 | 
			
		||||
            var barPort = 47690;
 | 
			
		||||
            var barPort = 27654;
 | 
			
		||||
 | 
			
		||||
            var initialConfiguration = new FileConfiguration
 | 
			
		||||
            {
 | 
			
		||||
 
 | 
			
		||||
@@ -1119,6 +1119,132 @@
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void configuration_is_not_valid_with_duplicate_reroutes_with_duplicated_upstreamhosts()
 | 
			
		||||
        {
 | 
			
		||||
            this.Given(x => x.GivenAConfiguration(new FileConfiguration
 | 
			
		||||
            {
 | 
			
		||||
                ReRoutes = new List<FileReRoute>
 | 
			
		||||
                {
 | 
			
		||||
                    new FileReRoute
 | 
			
		||||
                    {
 | 
			
		||||
                        DownstreamPathTemplate = "/api/products/",
 | 
			
		||||
                        UpstreamPathTemplate = "/asdf/",
 | 
			
		||||
                        DownstreamHostAndPorts = new List<FileHostAndPort>
 | 
			
		||||
                        {
 | 
			
		||||
                            new FileHostAndPort
 | 
			
		||||
                            {
 | 
			
		||||
                                Host = "bbc.co.uk",
 | 
			
		||||
                            }
 | 
			
		||||
                        },
 | 
			
		||||
                        UpstreamHttpMethod = new List<string>(),
 | 
			
		||||
                        UpstreamHost = "upstreamhost"
 | 
			
		||||
                    },
 | 
			
		||||
                    new FileReRoute
 | 
			
		||||
                    {
 | 
			
		||||
                        DownstreamPathTemplate = "/www/test/",
 | 
			
		||||
                        UpstreamPathTemplate = "/asdf/",
 | 
			
		||||
                        DownstreamHostAndPorts = new List<FileHostAndPort>
 | 
			
		||||
                        {
 | 
			
		||||
                            new FileHostAndPort
 | 
			
		||||
                            {
 | 
			
		||||
                                Host = "bbc.co.uk",
 | 
			
		||||
                            }
 | 
			
		||||
                        },
 | 
			
		||||
                        UpstreamHttpMethod = new List<string>(),
 | 
			
		||||
                        UpstreamHost = "upstreamhost"
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }))
 | 
			
		||||
                .When(x => x.WhenIValidateTheConfiguration())
 | 
			
		||||
                .Then(x => x.ThenTheResultIsNotValid())
 | 
			
		||||
                 .And(x => x.ThenTheErrorMessageAtPositionIs(0, "reRoute /asdf/ has duplicate"))
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void configuration_is_valid_with_duplicate_reroutes_but_different_upstreamhosts()
 | 
			
		||||
        {
 | 
			
		||||
            this.Given(x => x.GivenAConfiguration(new FileConfiguration
 | 
			
		||||
            {
 | 
			
		||||
                ReRoutes = new List<FileReRoute>
 | 
			
		||||
                {
 | 
			
		||||
                    new FileReRoute
 | 
			
		||||
                    {
 | 
			
		||||
                        DownstreamPathTemplate = "/api/products/",
 | 
			
		||||
                        UpstreamPathTemplate = "/asdf/",
 | 
			
		||||
                        DownstreamHostAndPorts = new List<FileHostAndPort>
 | 
			
		||||
                        {
 | 
			
		||||
                            new FileHostAndPort
 | 
			
		||||
                            {
 | 
			
		||||
                                Host = "bbc.co.uk",
 | 
			
		||||
                            }
 | 
			
		||||
                        },
 | 
			
		||||
                        UpstreamHttpMethod = new List<string>(),
 | 
			
		||||
                        UpstreamHost = "upstreamhost111"
 | 
			
		||||
                    },
 | 
			
		||||
                    new FileReRoute
 | 
			
		||||
                    {
 | 
			
		||||
                        DownstreamPathTemplate = "/www/test/",
 | 
			
		||||
                        UpstreamPathTemplate = "/asdf/",
 | 
			
		||||
                        DownstreamHostAndPorts = new List<FileHostAndPort>
 | 
			
		||||
                        {
 | 
			
		||||
                            new FileHostAndPort
 | 
			
		||||
                            {
 | 
			
		||||
                                Host = "bbc.co.uk",
 | 
			
		||||
                            }
 | 
			
		||||
                        },
 | 
			
		||||
                        UpstreamHttpMethod = new List<string>(),
 | 
			
		||||
                        UpstreamHost = "upstreamhost222"
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }))
 | 
			
		||||
                .When(x => x.WhenIValidateTheConfiguration())
 | 
			
		||||
                .Then(x => x.ThenTheResultIsValid())
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void configuration_is_valid_with_duplicate_reroutes_but_one_upstreamhost_is_not_set()
 | 
			
		||||
        {
 | 
			
		||||
            this.Given(x => x.GivenAConfiguration(new FileConfiguration
 | 
			
		||||
            {
 | 
			
		||||
                ReRoutes = new List<FileReRoute>
 | 
			
		||||
                {
 | 
			
		||||
                    new FileReRoute
 | 
			
		||||
                    {
 | 
			
		||||
                        DownstreamPathTemplate = "/api/products/",
 | 
			
		||||
                        UpstreamPathTemplate = "/asdf/",
 | 
			
		||||
                        DownstreamHostAndPorts = new List<FileHostAndPort>
 | 
			
		||||
                        {
 | 
			
		||||
                            new FileHostAndPort
 | 
			
		||||
                            {
 | 
			
		||||
                                Host = "bbc.co.uk",
 | 
			
		||||
                            }
 | 
			
		||||
                        },
 | 
			
		||||
                        UpstreamHttpMethod = new List<string>(),
 | 
			
		||||
                        UpstreamHost = "upstreamhost"
 | 
			
		||||
                    },
 | 
			
		||||
                    new FileReRoute
 | 
			
		||||
                    {
 | 
			
		||||
                        DownstreamPathTemplate = "/www/test/",
 | 
			
		||||
                        UpstreamPathTemplate = "/asdf/",
 | 
			
		||||
                        DownstreamHostAndPorts = new List<FileHostAndPort>
 | 
			
		||||
                        {
 | 
			
		||||
                            new FileHostAndPort
 | 
			
		||||
                            {
 | 
			
		||||
                                Host = "bbc.co.uk",
 | 
			
		||||
                            }
 | 
			
		||||
                        },
 | 
			
		||||
                        UpstreamHttpMethod = new List<string>()
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }))
 | 
			
		||||
                .When(x => x.WhenIValidateTheConfiguration())
 | 
			
		||||
                .Then(x => x.ThenTheResultIsValid())
 | 
			
		||||
                .BDDfy();
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        [Fact]
 | 
			
		||||
        public void configuration_is_invalid_with_invalid_rate_limit_configuration()
 | 
			
		||||
        {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user