From 7f97a61ed58ffb018bfba2fffaf1501149d796f7 Mon Sep 17 00:00:00 2001 From: Alex Sartan Date: Sun, 1 Oct 2017 11:25:32 -0600 Subject: [PATCH 1/3] Fix minor grammar issue in Zuul doc (#2336) --- docs/src/main/asciidoc/spring-cloud-netflix.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/main/asciidoc/spring-cloud-netflix.adoc b/docs/src/main/asciidoc/spring-cloud-netflix.adoc index 9ccddcaa..6cbcb783 100644 --- a/docs/src/main/asciidoc/spring-cloud-netflix.adoc +++ b/docs/src/main/asciidoc/spring-cloud-netflix.adoc @@ -1540,7 +1540,7 @@ This means that a serviceId "myusers-v1" will be mapped to route groups must be present in both servicePattern and routePattern. If servicePattern does not match a serviceId, the default behavior is used. In the example above, a serviceId "myusers" will be mapped to route -"/myusers/{all}" (no version detected) This feature is disable by +"/myusers/{all}" (no version detected) This feature is disabled by default and only applies to discovered services. To add a prefix to all mappings, set `zuul.prefix` to a value, such as From f809c119bd1bb49a4d7ba08066f287ef4534e198 Mon Sep 17 00:00:00 2001 From: Fahim Farook Date: Tue, 3 Oct 2017 23:13:17 +0530 Subject: [PATCH 2/3] Allow init params to be set on ProxyStreamServlet. (#2335) * Allow init params to be set on ProxyStreamServlet. Fixes gh-2301 * Added unit test for #gh-2301 --- .../HystrixDashboardConfiguration.java | 14 ++++-- .../dashboard/HystrixDashboardProperties.java | 16 ++++++- .../HystrixDashboardConfigurationTests.java | 47 +++++++++++++++---- 3 files changed, 62 insertions(+), 15 deletions(-) diff --git a/spring-cloud-netflix-hystrix-dashboard/src/main/java/org/springframework/cloud/netflix/hystrix/dashboard/HystrixDashboardConfiguration.java b/spring-cloud-netflix-hystrix-dashboard/src/main/java/org/springframework/cloud/netflix/hystrix/dashboard/HystrixDashboardConfiguration.java index 643b5335..75dc7551 100644 --- a/spring-cloud-netflix-hystrix-dashboard/src/main/java/org/springframework/cloud/netflix/hystrix/dashboard/HystrixDashboardConfiguration.java +++ b/spring-cloud-netflix-hystrix-dashboard/src/main/java/org/springframework/cloud/netflix/hystrix/dashboard/HystrixDashboardConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright 2013-2015 the original author or authors. + * Copyright 2013-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -52,6 +52,7 @@ import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer; /** * @author Dave Syer * @author Roy Clarkson + * @author Fahim Farook */ @Configuration @EnableConfigurationProperties(HystrixDashboardProperties.class) @@ -87,10 +88,13 @@ public class HystrixDashboardConfiguration { @Bean public ServletRegistrationBean proxyStreamServlet() { - ProxyStreamServlet proxyStreamServlet = new ProxyStreamServlet(); - proxyStreamServlet.setEnableIgnoreConnectionCloseHeader(dashboardProperties - .isEnableIgnoreConnectionCloseHeader()); - return new ServletRegistrationBean(proxyStreamServlet, "/proxy.stream"); + final ProxyStreamServlet proxyStreamServlet = new ProxyStreamServlet(); + proxyStreamServlet.setEnableIgnoreConnectionCloseHeader( + this.dashboardProperties.isEnableIgnoreConnectionCloseHeader()); + final ServletRegistrationBean registration = new ServletRegistrationBean( + proxyStreamServlet, "/proxy.stream"); + registration.setInitParameters(this.dashboardProperties.getInitParameters()); + return registration; } @Bean diff --git a/spring-cloud-netflix-hystrix-dashboard/src/main/java/org/springframework/cloud/netflix/hystrix/dashboard/HystrixDashboardProperties.java b/spring-cloud-netflix-hystrix-dashboard/src/main/java/org/springframework/cloud/netflix/hystrix/dashboard/HystrixDashboardProperties.java index d088564b..4223204d 100644 --- a/spring-cloud-netflix-hystrix-dashboard/src/main/java/org/springframework/cloud/netflix/hystrix/dashboard/HystrixDashboardProperties.java +++ b/spring-cloud-netflix-hystrix-dashboard/src/main/java/org/springframework/cloud/netflix/hystrix/dashboard/HystrixDashboardProperties.java @@ -1,5 +1,5 @@ /* - * Copyright 2013-2015 the original author or authors. + * Copyright 2013-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,10 +15,14 @@ */ package org.springframework.cloud.netflix.hystrix.dashboard; +import java.util.HashMap; +import java.util.Map; + import org.springframework.boot.context.properties.ConfigurationProperties; /** * @author Roy Clarkson + * @author Fahim Farook */ @ConfigurationProperties("hystrix.dashboard") public class HystrixDashboardProperties { @@ -28,6 +32,13 @@ public class HystrixDashboardProperties { * the Hystrix response stream */ private boolean enableIgnoreConnectionCloseHeader = false; + + /** + * Initialization parameters for {@link ProxyStreamServlet}. ProxyStreamServlet itself + * is not dependent on any initialization parameters, but could be used for adding web + * container specific configurations. i.e. wl-dispatch-policy for WebLogic. + */ + private Map initParameters = new HashMap<>(); public boolean isEnableIgnoreConnectionCloseHeader() { return enableIgnoreConnectionCloseHeader; @@ -38,4 +49,7 @@ public class HystrixDashboardProperties { this.enableIgnoreConnectionCloseHeader = enableIgnoreConnectionCloseHeader; } + public Map getInitParameters() { + return this.initParameters; + } } diff --git a/spring-cloud-netflix-hystrix-dashboard/src/test/java/org/springframework/cloud/netflix/hystrix/dashboard/HystrixDashboardConfigurationTests.java b/spring-cloud-netflix-hystrix-dashboard/src/test/java/org/springframework/cloud/netflix/hystrix/dashboard/HystrixDashboardConfigurationTests.java index f5744dcc..4fddab5b 100644 --- a/spring-cloud-netflix-hystrix-dashboard/src/test/java/org/springframework/cloud/netflix/hystrix/dashboard/HystrixDashboardConfigurationTests.java +++ b/spring-cloud-netflix-hystrix-dashboard/src/test/java/org/springframework/cloud/netflix/hystrix/dashboard/HystrixDashboardConfigurationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2013-2015 the original author or authors. + * Copyright 2013-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,22 +16,39 @@ package org.springframework.cloud.netflix.hystrix.dashboard; -import org.apache.http.Header; -import org.apache.http.message.BasicHeader; -import org.junit.Test; - -import org.springframework.mock.web.MockHttpServletResponse; -import org.springframework.test.util.ReflectionTestUtils; - import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertThat; +import java.util.Map; + +import org.apache.http.Header; +import org.apache.http.message.BasicHeader; +import org.junit.After; +import org.junit.Test; +import org.springframework.boot.Banner.Mode; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.web.servlet.ServletRegistrationBean; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.mock.web.MockHttpServletResponse; +import org.springframework.test.util.ReflectionTestUtils; + /** * @author Roy Clarkson + * @author Fahim Farook */ public class HystrixDashboardConfigurationTests { + private ConfigurableApplicationContext context; + + @After + public void close() { + if (this.context != null) { + this.context.close(); + } + } + @Test public void normal() { MockHttpServletResponse response = new MockHttpServletResponse(); @@ -87,5 +104,17 @@ public class HystrixDashboardConfigurationTests { assertThat(response.getHeader("Content-Type"), is("text/proxy.stream")); assertThat(response.getHeader("Connection"), is("close")); } - + + @Test + public void initParameters() { + this.context = new SpringApplicationBuilder(HystrixDashboardConfiguration.class) + .properties("hystrix.dashboard.init-parameters.wl-dispatch-polixy=work-manager-hystrix") + .web(false).bannerMode(Mode.OFF).run(); + final ServletRegistrationBean registration = this.context.getBean(ServletRegistrationBean.class); + assertNotNull(registration); + + final Map initParameters = registration.getInitParameters(); + assertNotNull(initParameters); + assertThat(initParameters.get("wl-dispatch-polixy"), is("work-manager-hystrix")); + } } From 6b6889b8b496515462e67f0214bd783f51992cee Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Wed, 4 Oct 2017 19:32:48 -0400 Subject: [PATCH 3/3] Fixes refresh scope bean type. --- .../eureka/EurekaClientAutoConfigurationTests.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfigurationTests.java b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfigurationTests.java index 00d8ab80..cddd720e 100644 --- a/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfigurationTests.java +++ b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/EurekaClientAutoConfigurationTests.java @@ -20,11 +20,9 @@ package org.springframework.cloud.netflix.eureka; import java.io.IOException; import java.util.concurrent.CountDownLatch; -import org.assertj.core.api.Assertions; import org.junit.After; import org.junit.Test; import org.mockito.Mockito; -import org.springframework.aop.scope.ScopedProxyFactoryBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.SearchStrategy; import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; @@ -32,6 +30,7 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties import org.springframework.boot.test.util.EnvironmentTestUtils; import org.springframework.cloud.autoconfigure.RefreshAutoConfiguration; import org.springframework.cloud.commons.util.UtilAutoConfiguration; +import org.springframework.cloud.context.scope.GenericScope; import org.springframework.cloud.netflix.eureka.serviceregistry.EurekaRegistration; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; @@ -45,6 +44,7 @@ import com.netflix.discovery.EurekaClientConfig; import com.netflix.discovery.shared.transport.jersey.EurekaJerseyClient; import com.sun.jersey.client.apache4.ApacheHttpClient4; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.spy; @@ -250,10 +250,10 @@ public class EurekaClientAutoConfigurationTests { @Test public void refreshScopedBeans() { setupContext(RefreshAutoConfiguration.class); - assertEquals(ScopedProxyFactoryBean.class.getName(), - this.context.getBeanDefinition("eurekaClient").getBeanClassName()); - assertEquals(ScopedProxyFactoryBean.class.getName(), this.context - .getBeanDefinition("eurekaApplicationInfoManager").getBeanClassName()); + assertThat(this.context.getBeanDefinition("eurekaClient").getBeanClassName()) + .startsWith(GenericScope.class.getName()+"$LockedScopedProxyFactoryBean"); + assertThat(this.context.getBeanDefinition("eurekaApplicationInfoManager").getBeanClassName()) + .startsWith(GenericScope.class.getName()+"$LockedScopedProxyFactoryBean"); } @Test @@ -311,7 +311,7 @@ public class EurekaClientAutoConfigurationTests { if (this.context != null) { CountDownLatch latch = this.context.getBean(CountDownLatch.class); this.context.close(); - Assertions.assertThat(latch.getCount()).isEqualTo(0); + assertThat(latch.getCount()).isEqualTo(0); } }