diff --git a/.travis.yml b/.travis.yml index bf40db2e..1237cf76 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,6 +5,8 @@ cache: language: java jdk: - oraclejdk8 +services: + - rabbitmq before_install: - git config user.name "$GIT_NAME" - git config user.email "$GIT_EMAIL" diff --git a/spring-cloud-netflix-hystrix-amqp/pom.xml b/spring-cloud-netflix-hystrix-amqp/pom.xml index 4dc95cb9..d496c639 100644 --- a/spring-cloud-netflix-hystrix-amqp/pom.xml +++ b/spring-cloud-netflix-hystrix-amqp/pom.xml @@ -76,6 +76,11 @@ compile true + + org.springframework.boot + spring-boot-starter-test + test + org.springframework.boot spring-boot-starter-web diff --git a/spring-cloud-netflix-hystrix-amqp/src/test/java/org/springframework/netflix/hystrix/amqp/HystrixAmqpTests.java b/spring-cloud-netflix-hystrix-amqp/src/test/java/org/springframework/netflix/hystrix/amqp/HystrixAmqpTests.java new file mode 100644 index 00000000..43e7766d --- /dev/null +++ b/spring-cloud-netflix-hystrix-amqp/src/test/java/org/springframework/netflix/hystrix/amqp/HystrixAmqpTests.java @@ -0,0 +1,47 @@ +package org.springframework.netflix.hystrix.amqp; + +import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.IntegrationTest; +import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author Spencer Gibb + */ +@RunWith(SpringJUnit4ClassRunner.class) +@SpringApplicationConfiguration(classes = HystrixAmqpTests.Application.class) +@WebAppConfiguration +@IntegrationTest({ "server.port=0", "spring.jmx.enabled=true" }) +@DirtiesContext +public class HystrixAmqpTests { + + @EnableAutoConfiguration + @EnableDiscoveryClient + @EnableCircuitBreaker + @RestController + public static class Application { + + @HystrixCommand + @RequestMapping("/") + public String hello() { + return "Hello World"; + } + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } + } + + @Test + public void contextLoads() { } +} diff --git a/spring-cloud-netflix-hystrix-amqp/src/test/java/org/springframework/netflix/hystrix/amqp/SampleHystrixAmqpApplicaiton.java b/spring-cloud-netflix-hystrix-amqp/src/test/java/org/springframework/netflix/hystrix/amqp/SampleHystrixAmqpApplicaiton.java deleted file mode 100644 index 9c885aaa..00000000 --- a/spring-cloud-netflix-hystrix-amqp/src/test/java/org/springframework/netflix/hystrix/amqp/SampleHystrixAmqpApplicaiton.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.springframework.netflix.hystrix.amqp; - -import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; -import org.springframework.cloud.client.discovery.EnableDiscoveryClient; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * @author Spencer Gibb - */ -@EnableAutoConfiguration -@EnableDiscoveryClient -@EnableCircuitBreaker -@RestController -public class SampleHystrixAmqpApplicaiton { - - @HystrixCommand - @RequestMapping("/") - public String hello() { - return "Hello World"; - } - - public static void main(String[] args) { - SpringApplication.run(SampleHystrixAmqpApplicaiton.class, args); - } -} diff --git a/spring-cloud-netflix-turbine-amqp/pom.xml b/spring-cloud-netflix-turbine-amqp/pom.xml index cdcdc746..f4b47f4d 100644 --- a/spring-cloud-netflix-turbine-amqp/pom.xml +++ b/spring-cloud-netflix-turbine-amqp/pom.xml @@ -103,6 +103,16 @@ compile true + + org.springframework.boot + spring-boot-starter-web + test + + + org.springframework.boot + spring-boot-starter-test + test + diff --git a/spring-cloud-netflix-turbine-amqp/src/main/java/org/springframework/cloud/netflix/turbine/amqp/TurbineAmqpConfiguration.java b/spring-cloud-netflix-turbine-amqp/src/main/java/org/springframework/cloud/netflix/turbine/amqp/TurbineAmqpConfiguration.java index 38514c0c..8d9f42da 100644 --- a/spring-cloud-netflix-turbine-amqp/src/main/java/org/springframework/cloud/netflix/turbine/amqp/TurbineAmqpConfiguration.java +++ b/spring-cloud-netflix-turbine-amqp/src/main/java/org/springframework/cloud/netflix/turbine/amqp/TurbineAmqpConfiguration.java @@ -16,6 +16,7 @@ import org.springframework.context.SmartLifecycle; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.util.SocketUtils; import rx.Observable; import rx.subjects.PublishSubject; @@ -35,6 +36,7 @@ public class TurbineAmqpConfiguration implements SmartLifecycle { @Autowired private TurbineAmqpProperties turbine; + private int turbinePort; @Bean public PublishSubject> hystrixSubject() { @@ -53,8 +55,14 @@ public class TurbineAmqpConfiguration implements SmartLifecycle { .doOnSubscribe(() -> log.info("Starting aggregation")).flatMap(o -> o) .publish().refCount(); + turbinePort = turbine.getPort(); + + if (turbinePort <= 0) { + turbinePort = SocketUtils.findAvailableTcpPort(40000); + } + HttpServer httpServer = RxNetty.createHttpServer( - turbine.getPort(), + turbinePort, (request, response) -> { log.info("SSE Request Received"); response.getHeaders().setHeader("Content-Type", "text/event-stream"); @@ -103,4 +111,8 @@ public class TurbineAmqpConfiguration implements SmartLifecycle { public int getPhase() { return 0; } + + public int getTurbinePort() { + return turbinePort; + } } diff --git a/spring-cloud-netflix-turbine-amqp/src/test/java/org/springframework/netflix/turbine/amqp/AggregatorTest.java b/spring-cloud-netflix-turbine-amqp/src/test/java/org/springframework/cloud/netflix/turbine/amqp/AggregatorTest.java similarity index 98% rename from spring-cloud-netflix-turbine-amqp/src/test/java/org/springframework/netflix/turbine/amqp/AggregatorTest.java rename to spring-cloud-netflix-turbine-amqp/src/test/java/org/springframework/cloud/netflix/turbine/amqp/AggregatorTest.java index 09269330..6c2a63a8 100644 --- a/spring-cloud-netflix-turbine-amqp/src/test/java/org/springframework/netflix/turbine/amqp/AggregatorTest.java +++ b/spring-cloud-netflix-turbine-amqp/src/test/java/org/springframework/cloud/netflix/turbine/amqp/AggregatorTest.java @@ -1,4 +1,4 @@ -package org.springframework.netflix.turbine.amqp; +package org.springframework.cloud.netflix.turbine.amqp; import java.io.BufferedReader; import java.io.InputStream; diff --git a/spring-cloud-netflix-turbine-amqp/src/test/java/org/springframework/cloud/netflix/turbine/amqp/TurbineAmqpTests.java b/spring-cloud-netflix-turbine-amqp/src/test/java/org/springframework/cloud/netflix/turbine/amqp/TurbineAmqpTests.java new file mode 100644 index 00000000..1c5508f0 --- /dev/null +++ b/spring-cloud-netflix-turbine-amqp/src/test/java/org/springframework/cloud/netflix/turbine/amqp/TurbineAmqpTests.java @@ -0,0 +1,32 @@ +package org.springframework.cloud.netflix.turbine.amqp; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.test.IntegrationTest; +import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; + +/** + * @author Spencer Gibb + */ +@RunWith(SpringJUnit4ClassRunner.class) +@SpringApplicationConfiguration(classes = TurbineAmqpTests.Application.class) +@WebAppConfiguration +@IntegrationTest({ "server.port=0", "turbine.amqp.port=0", "spring.jmx.enabled=true" }) +public class TurbineAmqpTests { + @EnableAutoConfiguration + @EnableTurbineAmqp + public static class Application { + public static void main(String[] args) { + new SpringApplicationBuilder() + .sources(Application.class) + .run(args); + } + } + + @Test + public void contextLoads() { } +} diff --git a/spring-cloud-netflix-turbine-amqp/src/test/resources/org/springframework/netflix/turbine/amqp/hystrixamqp.stream b/spring-cloud-netflix-turbine-amqp/src/test/java/org/springframework/cloud/netflix/turbine/amqp/hystrixamqp.stream similarity index 100% rename from spring-cloud-netflix-turbine-amqp/src/test/resources/org/springframework/netflix/turbine/amqp/hystrixamqp.stream rename to spring-cloud-netflix-turbine-amqp/src/test/java/org/springframework/cloud/netflix/turbine/amqp/hystrixamqp.stream diff --git a/spring-cloud-netflix-turbine-amqp/src/test/java/org/springframework/netflix/turbine/amqp/SampleTurbineAmqpApplication.java b/spring-cloud-netflix-turbine-amqp/src/test/java/org/springframework/netflix/turbine/amqp/SampleTurbineAmqpApplication.java deleted file mode 100644 index 3fe86183..00000000 --- a/spring-cloud-netflix-turbine-amqp/src/test/java/org/springframework/netflix/turbine/amqp/SampleTurbineAmqpApplication.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.springframework.netflix.turbine.amqp; - -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.cloud.netflix.turbine.amqp.EnableTurbineAmqp; - -/** - * @author Spencer Gibb - */ -@EnableAutoConfiguration -@EnableTurbineAmqp -public class SampleTurbineAmqpApplication { - public static void main(String[] args) { - new SpringApplicationBuilder() - .sources(SampleTurbineAmqpApplication.class) - .run(args); - } -}