From e6f5ae2adcb313379a849de9ecf5fc4b09c65222 Mon Sep 17 00:00:00 2001 From: Ilayaperumal Gopinathan Date: Wed, 8 May 2019 07:38:25 +0530 Subject: [PATCH] Add tests for stream samples in dev guide --- .../UsageCostLoggerApplicationTests.java | 39 ++++++++++++++++++- .../usagedetailsender/UsageDetailSender.java | 2 +- .../UsageDetailSenderApplicationTests.java | 30 +++++++++++++- .../UsageCostLoggerApplicationTests.java | 39 ++++++++++++++++++- .../UsageCostProcessorApplicationTests.java | 23 +++++++++++ .../usagedetailsender/UsageDetailSender.java | 2 +- .../UsageDetailSenderApplicationTests.java | 30 +++++++++++++- 7 files changed, 159 insertions(+), 6 deletions(-) diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/src/test/java/io/spring/dataflow/sample/usagecostlogger/UsageCostLoggerApplicationTests.java b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/src/test/java/io/spring/dataflow/sample/usagecostlogger/UsageCostLoggerApplicationTests.java index 7b1a5cb..bd8a599 100644 --- a/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/src/test/java/io/spring/dataflow/sample/usagecostlogger/UsageCostLoggerApplicationTests.java +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/src/test/java/io/spring/dataflow/sample/usagecostlogger/UsageCostLoggerApplicationTests.java @@ -1,16 +1,53 @@ package io.spring.dataflow.sample.usagecostlogger; +import io.spring.dataflow.sample.UsageCostDetail; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.cloud.stream.annotation.EnableBinding; +import org.springframework.cloud.stream.messaging.Sink; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Primary; +import org.springframework.messaging.support.MessageBuilder; import org.springframework.test.context.junit4.SpringRunner; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; + @RunWith(SpringRunner.class) -@SpringBootTest +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class UsageCostLoggerApplicationTests { + @Autowired + protected Sink sink; + + @Autowired + protected UsageCostLogger usageCostLogger; + @Test public void contextLoads() { } + @Test + public void testUsageCostLogger() throws Exception { + ArgumentCaptor captor = ArgumentCaptor.forClass(UsageCostDetail.class); + this.sink.input().send(MessageBuilder.withPayload("{\"userId\":\"user3\",\"callCost\":10.100000000000001,\"dataCost\":25.1}").build()); + verify(this.usageCostLogger).process(captor.capture()); + } + + @EnableAutoConfiguration + @EnableBinding(Sink.class) + static class TestConfig { + + // Override `UsageCostLogger` bean for spying. + @Bean + @Primary + public UsageCostLogger usageCostLogger() { + return spy(new UsageCostLogger()); + } + } } diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/src/main/java/io/spring/dataflow/sample/usagedetailsender/UsageDetailSender.java b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/src/main/java/io/spring/dataflow/sample/usagedetailsender/UsageDetailSender.java index 296f3a9..cd3aafb 100644 --- a/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/src/main/java/io/spring/dataflow/sample/usagedetailsender/UsageDetailSender.java +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/src/main/java/io/spring/dataflow/sample/usagedetailsender/UsageDetailSender.java @@ -18,7 +18,7 @@ public class UsageDetailSender { @Autowired private Source source; - private String[] users = {"Glenn", "Sabby", "Mark", "Janne", "Ilaya"}; + private String[] users = {"user1", "user2", "user3", "user4", "user5"}; @Scheduled(fixedDelay = 1000) public void sendEvents() { diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/src/test/java/io/spring/dataflow/sample/usagedetailsender/UsageDetailSenderApplicationTests.java b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/src/test/java/io/spring/dataflow/sample/usagedetailsender/UsageDetailSenderApplicationTests.java index 19ba3ca..c90e139 100644 --- a/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/src/test/java/io/spring/dataflow/sample/usagedetailsender/UsageDetailSenderApplicationTests.java +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/src/test/java/io/spring/dataflow/sample/usagedetailsender/UsageDetailSenderApplicationTests.java @@ -1,16 +1,44 @@ package io.spring.dataflow.sample.usagedetailsender; +import java.util.concurrent.TimeUnit; + +import com.fasterxml.jackson.databind.ObjectMapper; +import io.spring.dataflow.sample.UsageDetail; +import org.json.JSONObject; import org.junit.Test; import org.junit.runner.RunWith; + +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.cloud.stream.messaging.Source; +import org.springframework.cloud.stream.test.binder.MessageCollector; +import org.springframework.messaging.Message; import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.util.Assert; + +import static org.junit.Assert.assertTrue; @RunWith(SpringRunner.class) -@SpringBootTest +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class UsageDetailSenderApplicationTests { + @Autowired + private MessageCollector messageCollector; + + @Autowired + private Source source; + @Test public void contextLoads() { } + @Test + public void testUsageDetailSender() throws Exception { + Message message = this.messageCollector.forChannel(this.source.output()).poll(1, TimeUnit.SECONDS); + String usageDetailJSON = message.getPayload().toString(); + assertTrue(usageDetailJSON.contains("userId")); + assertTrue(usageDetailJSON.contains("duration")); + assertTrue(usageDetailJSON.contains("data")); + } + } diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/src/test/java/io/spring/dataflow/sample/usagecostlogger/UsageCostLoggerApplicationTests.java b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/src/test/java/io/spring/dataflow/sample/usagecostlogger/UsageCostLoggerApplicationTests.java index 7b1a5cb..bd8a599 100644 --- a/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/src/test/java/io/spring/dataflow/sample/usagecostlogger/UsageCostLoggerApplicationTests.java +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/src/test/java/io/spring/dataflow/sample/usagecostlogger/UsageCostLoggerApplicationTests.java @@ -1,16 +1,53 @@ package io.spring.dataflow.sample.usagecostlogger; +import io.spring.dataflow.sample.UsageCostDetail; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.cloud.stream.annotation.EnableBinding; +import org.springframework.cloud.stream.messaging.Sink; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Primary; +import org.springframework.messaging.support.MessageBuilder; import org.springframework.test.context.junit4.SpringRunner; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; + @RunWith(SpringRunner.class) -@SpringBootTest +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class UsageCostLoggerApplicationTests { + @Autowired + protected Sink sink; + + @Autowired + protected UsageCostLogger usageCostLogger; + @Test public void contextLoads() { } + @Test + public void testUsageCostLogger() throws Exception { + ArgumentCaptor captor = ArgumentCaptor.forClass(UsageCostDetail.class); + this.sink.input().send(MessageBuilder.withPayload("{\"userId\":\"user3\",\"callCost\":10.100000000000001,\"dataCost\":25.1}").build()); + verify(this.usageCostLogger).process(captor.capture()); + } + + @EnableAutoConfiguration + @EnableBinding(Sink.class) + static class TestConfig { + + // Override `UsageCostLogger` bean for spying. + @Bean + @Primary + public UsageCostLogger usageCostLogger() { + return spy(new UsageCostLogger()); + } + } } diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/src/test/java/io/spring/dataflow/sample/usagecostprocessor/UsageCostProcessorApplicationTests.java b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/src/test/java/io/spring/dataflow/sample/usagecostprocessor/UsageCostProcessorApplicationTests.java index 3f3b37b..e85fce0 100644 --- a/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/src/test/java/io/spring/dataflow/sample/usagecostprocessor/UsageCostProcessorApplicationTests.java +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/src/test/java/io/spring/dataflow/sample/usagecostprocessor/UsageCostProcessorApplicationTests.java @@ -1,16 +1,39 @@ package io.spring.dataflow.sample.usagecostprocessor; +import java.util.concurrent.TimeUnit; + import org.junit.Test; import org.junit.runner.RunWith; + +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.cloud.stream.messaging.Processor; +import org.springframework.cloud.stream.test.binder.MessageCollector; +import org.springframework.messaging.Message; +import org.springframework.messaging.support.MessageBuilder; import org.springframework.test.context.junit4.SpringRunner; +import static org.junit.Assert.assertTrue; + @RunWith(SpringRunner.class) @SpringBootTest public class UsageCostProcessorApplicationTests { + @Autowired + private Processor processor; + + @Autowired + private MessageCollector messageCollector; + @Test public void contextLoads() { } + @Test + public void testUsageCostProcessor() throws Exception { + this.processor.input().send(MessageBuilder.withPayload("{\"userId\":\"user3\",\"duration\":101,\"data\":502}").build()); + Message message = this.messageCollector.forChannel(this.processor.output()).poll(1, TimeUnit.SECONDS); + assertTrue(message.getPayload().toString().equals("{\"userId\":\"user3\",\"callCost\":10.100000000000001,\"dataCost\":25.1}")); + } + } diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/src/main/java/io/spring/dataflow/sample/usagedetailsender/UsageDetailSender.java b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/src/main/java/io/spring/dataflow/sample/usagedetailsender/UsageDetailSender.java index 248d17e..af8a514 100644 --- a/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/src/main/java/io/spring/dataflow/sample/usagedetailsender/UsageDetailSender.java +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/src/main/java/io/spring/dataflow/sample/usagedetailsender/UsageDetailSender.java @@ -18,7 +18,7 @@ public class UsageDetailSender { @Autowired private Source source; - private String[] users = {"Glenn", "Sabby", "Mark", "Janne", "Ilaya"}; + private String[] users = {"user1", "user2", "user3", "user4", "user5"}; @Scheduled(fixedDelay = 1000) public void sendEvents() { diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/src/test/java/io/spring/dataflow/sample/usagedetailsender/UsageDetailSenderApplicationTests.java b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/src/test/java/io/spring/dataflow/sample/usagedetailsender/UsageDetailSenderApplicationTests.java index 19ba3ca..c90e139 100644 --- a/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/src/test/java/io/spring/dataflow/sample/usagedetailsender/UsageDetailSenderApplicationTests.java +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/src/test/java/io/spring/dataflow/sample/usagedetailsender/UsageDetailSenderApplicationTests.java @@ -1,16 +1,44 @@ package io.spring.dataflow.sample.usagedetailsender; +import java.util.concurrent.TimeUnit; + +import com.fasterxml.jackson.databind.ObjectMapper; +import io.spring.dataflow.sample.UsageDetail; +import org.json.JSONObject; import org.junit.Test; import org.junit.runner.RunWith; + +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.cloud.stream.messaging.Source; +import org.springframework.cloud.stream.test.binder.MessageCollector; +import org.springframework.messaging.Message; import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.util.Assert; + +import static org.junit.Assert.assertTrue; @RunWith(SpringRunner.class) -@SpringBootTest +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class UsageDetailSenderApplicationTests { + @Autowired + private MessageCollector messageCollector; + + @Autowired + private Source source; + @Test public void contextLoads() { } + @Test + public void testUsageDetailSender() throws Exception { + Message message = this.messageCollector.forChannel(this.source.output()).poll(1, TimeUnit.SECONDS); + String usageDetailJSON = message.getPayload().toString(); + assertTrue(usageDetailJSON.contains("userId")); + assertTrue(usageDetailJSON.contains("duration")); + assertTrue(usageDetailJSON.contains("data")); + } + }