Browse Source

Fixed formatting issues, added more tests

pull/6/head
Biju Kunjummen 8 years ago
parent
commit
31b617b10f
  1. 17
      spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/SpringClientFactory.java
  2. 2
      spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulConfiguration.java
  3. 3
      spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonApplicationContextInitializerTests.java
  4. 59
      spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/EagerLoadOfZuulConfigurationTests.java
  5. 101
      spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/LazyLoadOfZuulConfigurationTests.java

17
spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/SpringClientFactory.java

@ -80,29 +80,28 @@ public class SpringClientFactory extends NamedContextFactory<RibbonClientSpecifi @@ -80,29 +80,28 @@ public class SpringClientFactory extends NamedContextFactory<RibbonClientSpecifi
}
static <C> C instantiateWithConfig(AnnotationConfigApplicationContext context,
Class<C> clazz, IClientConfig config) {
Class<C> clazz, IClientConfig config) {
C result = null;
try {
Constructor<C> constructor = clazz.getConstructor(IClientConfig.class);
result = constructor.newInstance(config);
}
catch (Throwable e) {
} catch (Throwable e) {
// Ignored
}
if (result == null) {
result = BeanUtils.instantiate(clazz);
if (result instanceof IClientConfigAware) {
((IClientConfigAware) result).initWithNiwsConfig(config);
}
if (context != null) {
context.getAutowireCapableBeanFactory().autowireBean(result);
}
}
return result;
}
@ -120,4 +119,6 @@ public class SpringClientFactory extends NamedContextFactory<RibbonClientSpecifi @@ -120,4 +119,6 @@ public class SpringClientFactory extends NamedContextFactory<RibbonClientSpecifi
protected AnnotationConfigApplicationContext getContext(String name) {
return super.getContext(name);
}
}

2
spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulConfiguration.java

@ -164,7 +164,7 @@ public class ZuulConfiguration { @@ -164,7 +164,7 @@ public class ZuulConfiguration {
}
@Bean
@ConditionalOnProperty(value = "zuul.context.startup.enabled", matchIfMissing = false)
@ConditionalOnProperty(value = "zuul.ribbon.eager-load", matchIfMissing = false)
public ZuulRouteApplicationContextInitializer zuulRoutesApplicationContextInitiazer(
SpringClientFactory springClientFactory) {
return new ZuulRouteApplicationContextInitializer(springClientFactory,

3
spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/ribbon/RibbonApplicationContextInitializerTests.java

@ -6,7 +6,6 @@ import org.springframework.beans.factory.annotation.Autowired; @@ -6,7 +6,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.cloud.netflix.archaius.ArchaiusAutoConfiguration;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.test.annotation.DirtiesContext;
@ -16,7 +15,6 @@ import java.util.Arrays; @@ -16,7 +15,6 @@ import java.util.Arrays;
import java.util.concurrent.atomic.AtomicInteger;
import static org.assertj.core.api.Assertions.assertThat;
import static org.springframework.boot.test.util.EnvironmentTestUtils.addEnvironment;
/**
* @author Biju Kunjummen
@ -43,7 +41,6 @@ public class RibbonApplicationContextInitializerTests { @@ -43,7 +41,6 @@ public class RibbonApplicationContextInitializerTests {
assertThat(foo).isNotNull();
}
@Configuration
static class FooConfig {
@Bean

59
spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/EagerLoadOfZuulConfigurationTests.java

@ -0,0 +1,59 @@ @@ -0,0 +1,59 @@
package org.springframework.cloud.netflix.zuul.filters.route;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.cloud.netflix.ribbon.RibbonClient;
import org.springframework.cloud.netflix.ribbon.RibbonClients;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.concurrent.atomic.AtomicInteger;
import static org.assertj.core.api.Assertions.assertThat;
@RunWith(SpringRunner.class)
@SpringBootTest(value = { "zuul.routes.myroute.service-id=eager",
"zuul.ribbon.eager-load=true" })
@DirtiesContext
public class EagerLoadOfZuulConfigurationTests {
@Test
public void testEagerLoading() {
// Child context FooConfig should have been eagerly instantiated..
assertThat(Foo.getInstanceCount()).isEqualTo(1);
}
@EnableAutoConfiguration
@Configuration
@EnableZuulProxy
@RibbonClients(@RibbonClient(name = "eager", configuration = FooConfig.class))
static class TestConfig {
}
static class Foo {
private static final AtomicInteger INSTANCE_COUNT = new AtomicInteger();
public Foo() {
INSTANCE_COUNT.incrementAndGet();
}
public static int getInstanceCount() {
return INSTANCE_COUNT.get();
}
}
static class FooConfig {
@Bean
public Foo foo() {
return new Foo();
}
}
}

101
spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/LazyLoadOfZuulConfigurationTests.java

@ -0,0 +1,101 @@ @@ -0,0 +1,101 @@
package org.springframework.cloud.netflix.zuul.filters.route;
import com.netflix.loadbalancer.Server;
import com.netflix.loadbalancer.ServerList;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.cloud.netflix.ribbon.RibbonClient;
import org.springframework.cloud.netflix.ribbon.RibbonClients;
import org.springframework.cloud.netflix.ribbon.StaticServerList;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.concurrent.atomic.AtomicInteger;
import static org.assertj.core.api.Assertions.assertThat;
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, value = {
"zuul.routes.myroute.service-id=eager", "zuul.routes.myroute.path=/eager/**" })
@DirtiesContext
public class LazyLoadOfZuulConfigurationTests {
@Value("${local.server.port}")
protected int port;
@Test
public void testEagerLoading() {
// Child context FooConfig should be lazily created..
assertThat(Foo.getInstanceCount()).isEqualTo(0);
String uri = String.format("http://localhost:%d/eager/sample", this.port);
ResponseEntity<String> result = new TestRestTemplate().getForEntity(uri,
String.class);
// the instance should be available now..
assertThat(Foo.getInstanceCount()).isEqualTo(1);
assertThat(result.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(result.getBody()).isEqualTo("sample");
}
@EnableAutoConfiguration
@Configuration
@EnableZuulProxy
@RibbonClients(@RibbonClient(name = "eager", configuration = FooConfig.class))
static class TestConfig {
}
static class Foo {
private static final AtomicInteger INSTANCE_COUNT = new AtomicInteger();
public Foo() {
INSTANCE_COUNT.incrementAndGet();
}
public static int getInstanceCount() {
return INSTANCE_COUNT.get();
}
}
static class FooConfig {
@Bean
public Foo foo() {
return new Foo();
}
@Value("${local.server.port}")
private int port;
@Bean
public ServerList<Server> ribbonServerList() {
return new StaticServerList<>(new Server("localhost", this.port));
}
}
@Configuration
@RestController
static class SampleWebConfig {
@RequestMapping("/sample")
public String sampleEndpoint() {
return "sample";
}
}
}
Loading…
Cancel
Save