Skip to content

Commit d3d9806

Browse files
authored
Merge pull request #19 from majusko/bugfix/issue-13-messages-sending-problem
resolves #13 and added real integration tests without mocking.
2 parents 34bde00 + 58ee292 commit d3d9806

File tree

13 files changed

+90
-724
lines changed

13 files changed

+90
-724
lines changed

.travis.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ language: java
22
jdk:
33
- oraclejdk8
44
dist: trusty
5+
services:
6+
- docker
57
after_success:
68
- bash <(curl -s https://codecov.io/bash)
79
before_deploy:

pom.xml

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<groupId>org.springframework.boot</groupId>
77
<artifactId>spring-boot-starter-parent</artifactId>
8-
<version>2.2.5.RELEASE</version>
8+
<version>2.3.1.RELEASE</version>
99
<relativePath/> <!-- lookup parent from repository -->
1010
</parent>
1111

@@ -19,8 +19,10 @@
1919
<java.version>1.8</java.version>
2020
<maven.compiler.target>1.8</maven.compiler.target>
2121
<maven.compiler.source>1.8</maven.compiler.source>
22-
<apache.pulsar.client.version>2.5.1</apache.pulsar.client.version>
22+
<apache.pulsar.client.version>2.6.0</apache.pulsar.client.version>
23+
<testcontainers.version>1.14.3</testcontainers.version>
2324
<junit-jupiter.version>5.6.2</junit-jupiter.version>
25+
<awaitility.version>4.0.3</awaitility.version>
2426
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
2527
</properties>
2628

@@ -60,6 +62,35 @@
6062
<version>${junit-jupiter.version}</version>
6163
<scope>test</scope>
6264
</dependency>
65+
66+
<!-- Pulsar integration tests -->
67+
<dependency>
68+
<groupId>org.testcontainers</groupId>
69+
<artifactId>testcontainers</artifactId>
70+
<version>${testcontainers.version}</version>
71+
<scope>test</scope>
72+
</dependency>
73+
74+
<dependency>
75+
<groupId>org.testcontainers</groupId>
76+
<artifactId>junit-jupiter</artifactId>
77+
<version>${testcontainers.version}</version>
78+
<scope>test</scope>
79+
</dependency>
80+
81+
<dependency>
82+
<groupId>org.testcontainers</groupId>
83+
<artifactId>pulsar</artifactId>
84+
<version>${testcontainers.version}</version>
85+
<scope>test</scope>
86+
</dependency>
87+
88+
<dependency>
89+
<groupId>org.awaitility</groupId>
90+
<artifactId>awaitility</artifactId>
91+
<version>${awaitility.version}</version>
92+
<scope>test</scope>
93+
</dependency>
6394
</dependencies>
6495

6596
<build>
@@ -98,7 +129,6 @@
98129
<exclude>**/*Properties.*</exclude>
99130
<exclude>**/*Configuration.*</exclude>
100131
<exclude>**/*Application.*</exclude>
101-
<exclude>**/mock/**/*</exclude>
102132
</excludes>
103133
</configuration>
104134
<executions>

src/main/java/io/github/majusko/pulsar/consumer/ConsumerBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ private Consumer<?> subscribe(String name, ConsumerHolder holder) {
4848
final Method method = holder.getHandler();
4949

5050
method.setAccessible(true);
51-
method.invoke(holder.getBean(), msg);
51+
method.invoke(holder.getBean(), msg.getValue());
5252

5353
consumer.acknowledge(msg);
5454
} catch (Exception e) {

src/test/java/io/github/majusko/pulsar/MyMsg.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,14 @@ public MyMsg(String data) {
66
this.data = data;
77
}
88

9+
public MyMsg() {
10+
}
11+
912
public String getData() {
1013
return data;
1114
}
15+
16+
public void setData(String data) {
17+
this.data = data;
18+
}
1219
}

src/test/java/io/github/majusko/pulsar/PulsarJavaSpringBootStarterApplicationTests.java

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,22 @@
1414
import org.springframework.beans.factory.annotation.Autowired;
1515
import org.springframework.boot.test.context.SpringBootTest;
1616
import org.springframework.context.annotation.Import;
17+
import org.springframework.test.context.DynamicPropertyRegistry;
18+
import org.springframework.test.context.DynamicPropertySource;
19+
import org.testcontainers.containers.PulsarContainer;
20+
import org.testcontainers.junit.jupiter.Container;
21+
import org.testcontainers.junit.jupiter.Testcontainers;
1722

1823
import java.util.HashSet;
1924
import java.util.List;
2025
import java.util.Map;
2126
import java.util.Set;
2227

28+
import static org.awaitility.Awaitility.await;
29+
2330
@SpringBootTest
24-
@Import({TestProducerConfiguration.class, TestConsumerConfiguration.class})
31+
@Import({TestProducerConfiguration.class, TestConsumers.class})
32+
@Testcontainers
2533
class PulsarJavaSpringBootStarterApplicationTests {
2634

2735
@Autowired
@@ -36,9 +44,22 @@ class PulsarJavaSpringBootStarterApplicationTests {
3644
@Autowired
3745
private PulsarTemplate<MyMsg> producer;
3846

47+
@Container
48+
static PulsarContainer pulsarContainer = new PulsarContainer();
49+
50+
@Autowired
51+
private TestConsumers testConsumers;
52+
53+
@DynamicPropertySource
54+
static void propertySettings(DynamicPropertyRegistry registry) {
55+
registry.add("pulsar.serviceUrl", pulsarContainer::getPulsarBrokerUrl);
56+
}
57+
3958
@Test
4059
void testProducerSendMethod() throws PulsarClientException {
4160
producer.send("topic-one", new MyMsg("bb"));
61+
62+
await().untilTrue(testConsumers.mockTopicListenerReceived);
4263
}
4364

4465
@Test
@@ -50,19 +71,19 @@ void testConsumerRegistration1() throws Exception {
5071
final Consumer consumer = consumers.stream().findFirst().orElseThrow(Exception::new);
5172

5273
Assertions.assertNotNull(consumer);
53-
Assertions.assertEquals("mock-topic", consumer.getTopic());
74+
Assertions.assertEquals("topic-one", consumer.getTopic());
5475
}
5576

5677
@Test
5778
void testConsumerRegistration2() {
58-
final Class<TestConsumerConfiguration> clazz = TestConsumerConfiguration.class;
79+
final Class<TestConsumers> clazz = TestConsumers.class;
5980
final String descriptor = clazz.getName() + clazz.getMethods()[0].getName();
6081
final ConsumerHolder consumerHolder = consumerCollector.getConsumer(descriptor).orElse(null);
6182

6283
Assertions.assertNotNull(consumerHolder);
63-
Assertions.assertEquals("mock-topic", consumerHolder.getAnnotation().topic());
64-
Assertions.assertEquals(TestConsumerConfiguration.class, consumerHolder.getBean().getClass());
65-
Assertions.assertEquals("mockTheListener", consumerHolder.getHandler().getName());
84+
Assertions.assertEquals("topic-one", consumerHolder.getAnnotation().topic());
85+
Assertions.assertEquals(TestConsumers.class, consumerHolder.getBean().getClass());
86+
Assertions.assertEquals("topicOneListener", consumerHolder.getHandler().getName());
6687
}
6788

6889
@Test

src/test/java/io/github/majusko/pulsar/PulsarMockAutoConfiguration.java

Lines changed: 0 additions & 18 deletions
This file was deleted.

src/test/java/io/github/majusko/pulsar/TestConsumerConfiguration.java

Lines changed: 0 additions & 15 deletions
This file was deleted.
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package io.github.majusko.pulsar;
2+
3+
import io.github.majusko.pulsar.annotation.PulsarConsumer;
4+
import io.github.majusko.pulsar.constant.Serialization;
5+
import org.junit.jupiter.api.Assertions;
6+
import org.springframework.stereotype.Service;
7+
8+
import java.util.concurrent.atomic.AtomicBoolean;
9+
10+
@Service
11+
public class TestConsumers {
12+
13+
public AtomicBoolean mockTopicListenerReceived = new AtomicBoolean(false);
14+
15+
@PulsarConsumer(topic = "topic-one", clazz = MyMsg.class, serialization = Serialization.JSON)
16+
public void topicOneListener(MyMsg myMsg) {
17+
Assertions.assertNotNull(myMsg);
18+
mockTopicListenerReceived.set(true);
19+
}
20+
}

0 commit comments

Comments
 (0)