Skip to content

Commit 6178c1a

Browse files
committed
Fixed integration tests
1 parent 459e2b7 commit 6178c1a

File tree

9 files changed

+71
-43
lines changed

9 files changed

+71
-43
lines changed

CHANGES.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
99
### Changed
1010

1111
- *Breaking* Migration to Spring Boot 4
12+
- Updated testcontainer dependencies to RabbitMQ 4
1213

1314
## [8.0.1](https://github.com/dbmdz/flusswerk/releases/tag/8.0.0) - 2025-10-08
1415

framework/src/main/java/dev/mdz/flusswerk/engine/Engine.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ public void stop() {
109109
try {
110110
rabbitClient.cancel(consumer.getConsumerTag());
111111
} catch (IOException e) {
112-
LOGGER.error("Could not cancel consumer", e);
112+
LOGGER.error("Could not cancel consumer with tag=" + consumer.getConsumerTag(), e);
113113
}
114114
});
115115

integration-tests/pom.xml

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,11 @@
6262
<artifactId>spring-boot-starter</artifactId>
6363
<scope>test</scope>
6464
</dependency>
65+
<dependency>
66+
<groupId>org.springframework.boot</groupId>
67+
<artifactId>spring-boot-starter-actuator</artifactId>
68+
<scope>test</scope>
69+
</dependency>
6570
<dependency>
6671
<groupId>org.springframework.boot</groupId>
6772
<artifactId>spring-boot-actuator-autoconfigure</artifactId>
@@ -70,13 +75,13 @@
7075
<dependency>
7176
<groupId>org.testcontainers</groupId>
7277
<artifactId>testcontainers</artifactId>
73-
<version>1.21.3</version>
78+
<version>2.0.2</version>
7479
<scope>test</scope>
7580
</dependency>
7681
<dependency>
7782
<groupId>org.testcontainers</groupId>
78-
<artifactId>junit-jupiter</artifactId>
79-
<version>1.21.3</version>
83+
<artifactId>testcontainers-junit-jupiter</artifactId>
84+
<version>2.0.1</version>
8085
<scope>test</scope>
8186
</dependency>
8287
<dependency>
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package dev.mdz.flusswerk.integration;
2+
3+
import io.micrometer.core.instrument.MeterRegistry;
4+
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
5+
import org.springframework.boot.test.context.TestConfiguration;
6+
import org.springframework.context.annotation.Bean;
7+
8+
@TestConfiguration
9+
public class IntegrationTestConfiguration {
10+
11+
@Bean
12+
MeterRegistry meterRegistry() {
13+
return new SimpleMeterRegistry();
14+
}
15+
}

integration-tests/src/test/java/dev/mdz/flusswerk/integration/NoFlowTest.java

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,18 @@
1313
import dev.mdz.flusswerk.rabbitmq.RabbitMQ;
1414
import java.io.IOException;
1515
import java.util.List;
16+
import java.util.Optional;
1617
import org.junit.jupiter.api.AfterEach;
1718
import org.junit.jupiter.api.DisplayName;
1819
import org.junit.jupiter.api.Test;
1920
import org.junit.jupiter.api.extension.ExtendWith;
2021
import org.springframework.beans.factory.annotation.Autowired;
21-
import org.springframework.boot.actuate.autoconfigure.metrics.CompositeMeterRegistryAutoConfiguration;
22-
import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration;
2322
import org.springframework.boot.test.context.SpringBootTest;
2423
import org.springframework.boot.test.context.TestConfiguration;
2524
import org.springframework.context.annotation.Bean;
2625
import org.springframework.context.annotation.Import;
2726
import org.springframework.context.annotation.Primary;
27+
import org.springframework.test.annotation.DirtiesContext;
2828
import org.springframework.test.context.ContextConfiguration;
2929
import org.springframework.test.context.junit.jupiter.SpringExtension;
3030
import org.testcontainers.containers.RabbitMQContainer;
@@ -39,13 +39,26 @@
3939
FlusswerkConfiguration.class,
4040
NoFlowTest.NoFlowTestConfiguration.class
4141
})
42-
@Import({MetricsAutoConfiguration.class, CompositeMeterRegistryAutoConfiguration.class})
42+
@Import(IntegrationTestConfiguration.class)
4343
@DisplayName("When Flusswerk is created without a Flow")
44+
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
4445
@Testcontainers
4546
public class NoFlowTest {
4647
@Container
4748
static final RabbitMQContainer rabbitMQContainer =
48-
new RabbitMQContainer("rabbitmq:3-management-alpine");
49+
new RabbitMQContainer("rabbitmq:4-management-alpine");
50+
51+
private final Engine engine;
52+
private final RabbitMQ rabbitMQ;
53+
private final RabbitUtil rabbitUtil;
54+
55+
@Autowired
56+
public NoFlowTest(
57+
Optional<Engine> engine, RoutingProperties routingProperties, RabbitMQ rabbitMQ) {
58+
this.engine = engine.orElse(null);
59+
this.rabbitMQ = rabbitMQ;
60+
this.rabbitUtil = new RabbitUtil(rabbitMQ, routingProperties);
61+
}
4962

5063
@TestConfiguration
5164
static class NoFlowTestConfiguration {
@@ -69,17 +82,6 @@ public IncomingMessageType incomingMessageType() {
6982
}
7083
}
7184

72-
private final Engine engine;
73-
private final RabbitMQ rabbitMQ;
74-
private final RabbitUtil rabbitUtil;
75-
76-
@Autowired
77-
public NoFlowTest(Engine engine, RoutingProperties routingProperties, RabbitMQ rabbitMQ) {
78-
this.engine = engine;
79-
this.rabbitMQ = rabbitMQ;
80-
this.rabbitUtil = new RabbitUtil(rabbitMQ, routingProperties);
81-
}
82-
8385
@AfterEach
8486
void stopEngine() {
8587
rabbitUtil.purgeQueues();

integration-tests/src/test/java/dev/mdz/flusswerk/integration/processing/ReconnectTest.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import dev.mdz.flusswerk.engine.Engine;
1414
import dev.mdz.flusswerk.flow.FlowSpec;
1515
import dev.mdz.flusswerk.flow.builder.FlowBuilder;
16+
import dev.mdz.flusswerk.integration.IntegrationTestConfiguration;
1617
import dev.mdz.flusswerk.integration.RabbitUtil;
1718
import dev.mdz.flusswerk.integration.TestMessage;
1819
import dev.mdz.flusswerk.jackson.FlusswerkObjectMapper;
@@ -29,16 +30,13 @@
2930
import java.util.ArrayList;
3031
import java.util.List;
3132
import java.util.concurrent.TimeoutException;
32-
import org.junit.Rule;
3333
import org.junit.jupiter.api.AfterEach;
3434
import org.junit.jupiter.api.DisplayName;
3535
import org.junit.jupiter.api.Test;
3636
import org.junit.jupiter.api.extension.ExtendWith;
3737
import org.slf4j.Logger;
3838
import org.slf4j.LoggerFactory;
3939
import org.springframework.beans.factory.annotation.Autowired;
40-
import org.springframework.boot.actuate.autoconfigure.metrics.CompositeMeterRegistryAutoConfiguration;
41-
import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration;
4240
import org.springframework.boot.test.context.SpringBootTest;
4341
import org.springframework.boot.test.context.TestConfiguration;
4442
import org.springframework.context.annotation.Bean;
@@ -62,23 +60,23 @@
6260
FlusswerkConfiguration.class,
6361
ReconnectTest.FlowConfiguration.class
6462
})
65-
@Import({MetricsAutoConfiguration.class, CompositeMeterRegistryAutoConfiguration.class})
63+
@Import(IntegrationTestConfiguration.class)
6664
@DisplayName("When the RabbitMQ connection is lost")
6765
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
6866
@Testcontainers
6967
public class ReconnectTest {
7068
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
7169

72-
@Rule static final Network network = Network.newNetwork();
70+
public static final Network network = Network.newNetwork();
7371

7472
@Container
7573
static final RabbitMQContainer rabbitMQContainer =
76-
new RabbitMQContainer("rabbitmq:3-management-alpine")
74+
new RabbitMQContainer("rabbitmq:4-management-alpine")
7775
.withNetwork(network)
7876
.withExposedPorts(5672)
7977
.withNetworkAliases("rabbitmq");
8078

81-
@Rule
79+
@Container
8280
static final ToxiproxyContainer toxiProxy =
8381
new ToxiproxyContainer("ghcr.io/shopify/toxiproxy:2.5.0")
8482
.withExposedPorts(5672, 8474)
@@ -233,7 +231,9 @@ void recoverFromDisruptionDuringStartup() throws IOException, InterruptedExcepti
233231
@Test
234232
public void recoveryAfterDisruptionDuringProcessing() throws Exception {
235233
TestMessage input = new TestMessage("hello world");
236-
engine.start();
234+
if (!engine.isRunning()) {
235+
engine.start();
236+
}
237237

238238
log.info("Sending message");
239239
rabbitUtil.send(input);
@@ -270,7 +270,9 @@ public void recoverFromChannelException()
270270
log.info("Sending message");
271271
rabbitUtil.send(new TestMessage("hello world"));
272272
Thread.sleep(500);
273-
engine.start();
273+
if (!engine.isRunning()) {
274+
engine.start();
275+
}
274276
log.info("Closing RabbitMQ channel");
275277
Channel channel = rabbitConnection.getChannel();
276278
channel.close();

integration-tests/src/test/java/dev/mdz/flusswerk/integration/processing/RetryTest.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import dev.mdz.flusswerk.exceptions.RetryProcessingException;
1212
import dev.mdz.flusswerk.flow.FlowSpec;
1313
import dev.mdz.flusswerk.flow.builder.FlowBuilder;
14+
import dev.mdz.flusswerk.integration.IntegrationTestConfiguration;
1415
import dev.mdz.flusswerk.integration.RabbitUtil;
1516
import dev.mdz.flusswerk.integration.TestMessage;
1617
import dev.mdz.flusswerk.model.IncomingMessageType;
@@ -27,8 +28,6 @@
2728
import org.junit.jupiter.api.Test;
2829
import org.junit.jupiter.api.extension.ExtendWith;
2930
import org.springframework.beans.factory.annotation.Autowired;
30-
import org.springframework.boot.actuate.autoconfigure.metrics.CompositeMeterRegistryAutoConfiguration;
31-
import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration;
3231
import org.springframework.boot.test.context.SpringBootTest;
3332
import org.springframework.boot.test.context.TestConfiguration;
3433
import org.springframework.context.annotation.Bean;
@@ -50,15 +49,15 @@
5049
FlusswerkConfiguration.class,
5150
RetryTest.FlowConfiguration.class,
5251
})
53-
@Import({MetricsAutoConfiguration.class, CompositeMeterRegistryAutoConfiguration.class})
52+
@Import(IntegrationTestConfiguration.class)
5453
@DisplayName("When processing for a message fails")
5554
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
5655
@Testcontainers
5756
public class RetryTest {
5857

5958
@Container
6059
static final RabbitMQContainer rabbitMQContainer =
61-
new RabbitMQContainer("rabbitmq:3-management-alpine");
60+
new RabbitMQContainer("rabbitmq:4-management-alpine");
6261

6362
private final Engine engine;
6463

@@ -109,7 +108,9 @@ public FlowSpec flowSpec() {
109108

110109
@BeforeEach
111110
void startEngine() {
112-
engine.start();
111+
if (!engine.isRunning()) {
112+
engine.start();
113+
}
113114
}
114115

115116
@AfterEach

integration-tests/src/test/java/dev/mdz/flusswerk/integration/processing/SkipProcessingTest.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import dev.mdz.flusswerk.exceptions.SkipProcessingException;
1212
import dev.mdz.flusswerk.flow.FlowSpec;
1313
import dev.mdz.flusswerk.flow.builder.FlowBuilder;
14+
import dev.mdz.flusswerk.integration.IntegrationTestConfiguration;
1415
import dev.mdz.flusswerk.integration.RabbitUtil;
1516
import dev.mdz.flusswerk.integration.TestMessage;
1617
import dev.mdz.flusswerk.model.IncomingMessageType;
@@ -24,8 +25,6 @@
2425
import org.junit.jupiter.api.Test;
2526
import org.junit.jupiter.api.extension.ExtendWith;
2627
import org.springframework.beans.factory.annotation.Autowired;
27-
import org.springframework.boot.actuate.autoconfigure.metrics.CompositeMeterRegistryAutoConfiguration;
28-
import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration;
2928
import org.springframework.boot.test.context.SpringBootTest;
3029
import org.springframework.boot.test.context.TestConfiguration;
3130
import org.springframework.context.annotation.Bean;
@@ -47,15 +46,15 @@
4746
FlusswerkConfiguration.class,
4847
SkipProcessingTest.FlowConfiguration.class,
4948
})
50-
@Import({MetricsAutoConfiguration.class, CompositeMeterRegistryAutoConfiguration.class})
49+
@Import(IntegrationTestConfiguration.class)
5150
@DisplayName("When Flusswerk skips a message")
5251
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
5352
@Testcontainers
5453
public class SkipProcessingTest {
5554

5655
@Container
5756
static final RabbitMQContainer rabbitMQContainer =
58-
new RabbitMQContainer("rabbitmq:3-management-alpine");
57+
new RabbitMQContainer("rabbitmq:4-management-alpine");
5958

6059
private final Engine engine;
6160

@@ -114,7 +113,9 @@ public FlowSpec flowSpec() {
114113

115114
@BeforeEach
116115
void startEngine() {
117-
engine.start();
116+
if (!engine.isRunning()) {
117+
engine.start();
118+
}
118119
}
119120

120121
@AfterEach

integration-tests/src/test/java/dev/mdz/flusswerk/integration/processing/SuccessfulProcessingTest.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import dev.mdz.flusswerk.engine.Engine;
1010
import dev.mdz.flusswerk.flow.FlowSpec;
1111
import dev.mdz.flusswerk.flow.builder.FlowBuilder;
12+
import dev.mdz.flusswerk.integration.IntegrationTestConfiguration;
1213
import dev.mdz.flusswerk.integration.RabbitUtil;
1314
import dev.mdz.flusswerk.integration.TestMessage;
1415
import dev.mdz.flusswerk.model.IncomingMessageType;
@@ -22,8 +23,6 @@
2223
import org.junit.jupiter.api.Test;
2324
import org.junit.jupiter.api.extension.ExtendWith;
2425
import org.springframework.beans.factory.annotation.Autowired;
25-
import org.springframework.boot.actuate.autoconfigure.metrics.CompositeMeterRegistryAutoConfiguration;
26-
import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration;
2726
import org.springframework.boot.test.context.SpringBootTest;
2827
import org.springframework.boot.test.context.TestConfiguration;
2928
import org.springframework.context.annotation.Bean;
@@ -45,14 +44,14 @@
4544
FlusswerkConfiguration.class,
4645
SuccessfulProcessingTest.FlowConfiguration.class
4746
})
48-
@Import({MetricsAutoConfiguration.class, CompositeMeterRegistryAutoConfiguration.class})
47+
@Import(IntegrationTestConfiguration.class)
4948
@DisplayName("When Flusswerk successfully processes a message")
5049
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
5150
@Testcontainers
5251
public class SuccessfulProcessingTest {
5352
@Container
5453
static final RabbitMQContainer rabbitMQContainer =
55-
new RabbitMQContainer("rabbitmq:3-management-alpine");
54+
new RabbitMQContainer("rabbitmq:4-management-alpine");
5655

5756
private final Engine engine;
5857

@@ -94,7 +93,9 @@ public FlowSpec flowSpec() {
9493

9594
@BeforeEach
9695
void startEngine() {
97-
engine.start();
96+
if (!engine.isRunning()) {
97+
engine.start();
98+
}
9899
}
99100

100101
@AfterEach

0 commit comments

Comments
 (0)