Unverified Commit d76416f0 by Spencer Gibb

Merge branch 'master' into 2.0.x

parents 070e4b5c 6b6889b8
...@@ -1540,7 +1540,7 @@ This means that a serviceId "myusers-v1" will be mapped to route ...@@ -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 groups must be present in both servicePattern and routePattern. If
servicePattern does not match a serviceId, the default behavior is servicePattern does not match a serviceId, the default behavior is
used. In the example above, a serviceId "myusers" will be mapped to route 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. default and only applies to discovered services.
To add a prefix to all mappings, set `zuul.prefix` to a value, such as To add a prefix to all mappings, set `zuul.prefix` to a value, such as
......
...@@ -22,11 +22,9 @@ import java.util.concurrent.CountDownLatch; ...@@ -22,11 +22,9 @@ import java.util.concurrent.CountDownLatch;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import org.assertj.core.api.Assertions;
import org.junit.After; import org.junit.After;
import org.junit.Test; import org.junit.Test;
import org.mockito.Mockito; import org.mockito.Mockito;
import org.springframework.aop.scope.ScopedProxyFactoryBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.SearchStrategy; import org.springframework.boot.autoconfigure.condition.SearchStrategy;
import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration;
...@@ -35,6 +33,7 @@ import org.springframework.boot.context.properties.source.ConfigurationPropertyS ...@@ -35,6 +33,7 @@ import org.springframework.boot.context.properties.source.ConfigurationPropertyS
import org.springframework.boot.test.util.TestPropertyValues; import org.springframework.boot.test.util.TestPropertyValues;
import org.springframework.cloud.autoconfigure.RefreshAutoConfiguration; import org.springframework.cloud.autoconfigure.RefreshAutoConfiguration;
import org.springframework.cloud.commons.util.UtilAutoConfiguration; 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.cloud.netflix.eureka.serviceregistry.EurekaRegistration;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext;
...@@ -51,6 +50,7 @@ import com.netflix.discovery.EurekaClientConfig; ...@@ -51,6 +50,7 @@ import com.netflix.discovery.EurekaClientConfig;
import com.netflix.discovery.shared.transport.jersey.EurekaJerseyClient; import com.netflix.discovery.shared.transport.jersey.EurekaJerseyClient;
import com.sun.jersey.client.apache4.ApacheHttpClient4; 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.assertEquals;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
...@@ -257,10 +257,10 @@ public class EurekaClientAutoConfigurationTests { ...@@ -257,10 +257,10 @@ public class EurekaClientAutoConfigurationTests {
@Test @Test
public void refreshScopedBeans() { public void refreshScopedBeans() {
setupContext(RefreshAutoConfiguration.class); setupContext(RefreshAutoConfiguration.class);
assertEquals(ScopedProxyFactoryBean.class.getName(), assertThat(this.context.getBeanDefinition("eurekaClient").getBeanClassName())
this.context.getBeanDefinition("eurekaClient").getBeanClassName()); .startsWith(GenericScope.class.getName()+"$LockedScopedProxyFactoryBean");
assertEquals(ScopedProxyFactoryBean.class.getName(), this.context assertThat(this.context.getBeanDefinition("eurekaApplicationInfoManager").getBeanClassName())
.getBeanDefinition("eurekaApplicationInfoManager").getBeanClassName()); .startsWith(GenericScope.class.getName()+"$LockedScopedProxyFactoryBean");
} }
@Test @Test
...@@ -352,7 +352,7 @@ public class EurekaClientAutoConfigurationTests { ...@@ -352,7 +352,7 @@ public class EurekaClientAutoConfigurationTests {
if (this.context != null) { if (this.context != null) {
CountDownLatch latch = this.context.getBean(CountDownLatch.class); CountDownLatch latch = this.context.getBean(CountDownLatch.class);
this.context.close(); this.context.close();
Assertions.assertThat(latch.getCount()).isEqualTo(0); assertThat(latch.getCount()).isEqualTo(0);
} }
} }
......
/* /*
* 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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with 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; ...@@ -52,6 +52,7 @@ import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
/** /**
* @author Dave Syer * @author Dave Syer
* @author Roy Clarkson * @author Roy Clarkson
* @author Fahim Farook
*/ */
@Configuration @Configuration
@EnableConfigurationProperties(HystrixDashboardProperties.class) @EnableConfigurationProperties(HystrixDashboardProperties.class)
...@@ -87,10 +88,13 @@ public class HystrixDashboardConfiguration { ...@@ -87,10 +88,13 @@ public class HystrixDashboardConfiguration {
@Bean @Bean
public ServletRegistrationBean proxyStreamServlet() { public ServletRegistrationBean proxyStreamServlet() {
ProxyStreamServlet proxyStreamServlet = new ProxyStreamServlet(); final ProxyStreamServlet proxyStreamServlet = new ProxyStreamServlet();
proxyStreamServlet.setEnableIgnoreConnectionCloseHeader(dashboardProperties proxyStreamServlet.setEnableIgnoreConnectionCloseHeader(
.isEnableIgnoreConnectionCloseHeader()); this.dashboardProperties.isEnableIgnoreConnectionCloseHeader());
return new ServletRegistrationBean(proxyStreamServlet, "/proxy.stream"); final ServletRegistrationBean registration = new ServletRegistrationBean(
proxyStreamServlet, "/proxy.stream");
registration.setInitParameters(this.dashboardProperties.getInitParameters());
return registration;
} }
@Bean @Bean
......
/* /*
* 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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
...@@ -15,10 +15,14 @@ ...@@ -15,10 +15,14 @@
*/ */
package org.springframework.cloud.netflix.hystrix.dashboard; package org.springframework.cloud.netflix.hystrix.dashboard;
import java.util.HashMap;
import java.util.Map;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
/** /**
* @author Roy Clarkson * @author Roy Clarkson
* @author Fahim Farook
*/ */
@ConfigurationProperties("hystrix.dashboard") @ConfigurationProperties("hystrix.dashboard")
public class HystrixDashboardProperties { public class HystrixDashboardProperties {
...@@ -28,6 +32,13 @@ public class HystrixDashboardProperties { ...@@ -28,6 +32,13 @@ public class HystrixDashboardProperties {
* the Hystrix response stream * the Hystrix response stream
*/ */
private boolean enableIgnoreConnectionCloseHeader = false; 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<String, String> initParameters = new HashMap<>();
public boolean isEnableIgnoreConnectionCloseHeader() { public boolean isEnableIgnoreConnectionCloseHeader() {
return enableIgnoreConnectionCloseHeader; return enableIgnoreConnectionCloseHeader;
...@@ -38,4 +49,7 @@ public class HystrixDashboardProperties { ...@@ -38,4 +49,7 @@ public class HystrixDashboardProperties {
this.enableIgnoreConnectionCloseHeader = enableIgnoreConnectionCloseHeader; this.enableIgnoreConnectionCloseHeader = enableIgnoreConnectionCloseHeader;
} }
public Map<String, String> getInitParameters() {
return this.initParameters;
}
} }
/* /*
* 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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
...@@ -16,22 +16,39 @@ ...@@ -16,22 +16,39 @@
package org.springframework.cloud.netflix.hystrix.dashboard; package org.springframework.cloud.netflix.hystrix.dashboard;
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.Header;
import org.apache.http.message.BasicHeader; import org.apache.http.message.BasicHeader;
import org.junit.After;
import org.junit.Test; 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.mock.web.MockHttpServletResponse;
import org.springframework.test.util.ReflectionTestUtils; import org.springframework.test.util.ReflectionTestUtils;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
/** /**
* @author Roy Clarkson * @author Roy Clarkson
* @author Fahim Farook
*/ */
public class HystrixDashboardConfigurationTests { public class HystrixDashboardConfigurationTests {
private ConfigurableApplicationContext context;
@After
public void close() {
if (this.context != null) {
this.context.close();
}
}
@Test @Test
public void normal() { public void normal() {
MockHttpServletResponse response = new MockHttpServletResponse(); MockHttpServletResponse response = new MockHttpServletResponse();
...@@ -87,5 +104,17 @@ public class HystrixDashboardConfigurationTests { ...@@ -87,5 +104,17 @@ public class HystrixDashboardConfigurationTests {
assertThat(response.getHeader("Content-Type"), is("text/proxy.stream")); assertThat(response.getHeader("Content-Type"), is("text/proxy.stream"));
assertThat(response.getHeader("Connection"), is("close")); 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<String, String> initParameters = registration.getInitParameters();
assertNotNull(initParameters);
assertThat(initParameters.get("wl-dispatch-polixy"), is("work-manager-hystrix"));
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment