Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## Unreleased

### Changed

- *Breaking* Migration to Spring Boot 4
- Updated testcontainer dependencies to RabbitMQ 4

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

### Fixed
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,15 @@ Java application).
<dependency>
<groupId>dev.mdz</groupId>
<artifactId>flusswerk</artifactId>
<version>8.0.0</version>
<version>9.0.0</version>
</dependency>
```

**Gradle:**

```groovy
dependencies {
compile group: 'dev.mdz', name: 'flusswerk', version: '8.0.0'
compile group: 'dev.mdz', name: 'flusswerk', version: '9.0.0'
}
```

Expand Down
2 changes: 1 addition & 1 deletion framework/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<parent>
<groupId>dev.mdz</groupId>
<artifactId>flusswerk-parent</artifactId>
<version>8.0.2-SNAPSHOT</version>
<version>9.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ public void stop() {
try {
rabbitClient.cancel(consumer.getConsumerTag());
} catch (IOException e) {
LOGGER.error("Could not cancel consumer", e);
LOGGER.error("Could not cancel consumer with tag=" + consumer.getConsumerTag(), e);
}
});

Expand Down
13 changes: 9 additions & 4 deletions integration-tests/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<parent>
<groupId>dev.mdz</groupId>
<artifactId>flusswerk-parent</artifactId>
<version>8.0.2-SNAPSHOT</version>
<version>9.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

Expand Down Expand Up @@ -62,6 +62,11 @@
<artifactId>spring-boot-starter</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-actuator-autoconfigure</artifactId>
Expand All @@ -70,13 +75,13 @@
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>testcontainers</artifactId>
<version>1.21.3</version>
<version>2.0.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>junit-jupiter</artifactId>
<version>1.21.3</version>
<artifactId>testcontainers-junit-jupiter</artifactId>
<version>2.0.1</version>
<scope>test</scope>
</dependency>
<dependency>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package dev.mdz.flusswerk.integration;

import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.Bean;

@TestConfiguration
public class IntegrationTestConfiguration {

@Bean
MeterRegistry meterRegistry() {
return new SimpleMeterRegistry();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,18 @@
import dev.mdz.flusswerk.rabbitmq.RabbitMQ;
import java.io.IOException;
import java.util.List;
import java.util.Optional;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.actuate.autoconfigure.metrics.CompositeMeterRegistryAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.Primary;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.testcontainers.containers.RabbitMQContainer;
Expand All @@ -39,13 +39,26 @@
FlusswerkConfiguration.class,
NoFlowTest.NoFlowTestConfiguration.class
})
@Import({MetricsAutoConfiguration.class, CompositeMeterRegistryAutoConfiguration.class})
@Import(IntegrationTestConfiguration.class)
@DisplayName("When Flusswerk is created without a Flow")
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
@Testcontainers
public class NoFlowTest {
@Container
static final RabbitMQContainer rabbitMQContainer =
new RabbitMQContainer("rabbitmq:3-management-alpine");
new RabbitMQContainer("rabbitmq:4-management-alpine");

private final Engine engine;
private final RabbitMQ rabbitMQ;
private final RabbitUtil rabbitUtil;

@Autowired
public NoFlowTest(
Optional<Engine> engine, RoutingProperties routingProperties, RabbitMQ rabbitMQ) {
this.engine = engine.orElse(null);
this.rabbitMQ = rabbitMQ;
this.rabbitUtil = new RabbitUtil(rabbitMQ, routingProperties);
}

@TestConfiguration
static class NoFlowTestConfiguration {
Expand All @@ -69,17 +82,6 @@ public IncomingMessageType incomingMessageType() {
}
}

private final Engine engine;
private final RabbitMQ rabbitMQ;
private final RabbitUtil rabbitUtil;

@Autowired
public NoFlowTest(Engine engine, RoutingProperties routingProperties, RabbitMQ rabbitMQ) {
this.engine = engine;
this.rabbitMQ = rabbitMQ;
this.rabbitUtil = new RabbitUtil(rabbitMQ, routingProperties);
}

@AfterEach
void stopEngine() {
rabbitUtil.purgeQueues();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import dev.mdz.flusswerk.engine.Engine;
import dev.mdz.flusswerk.flow.FlowSpec;
import dev.mdz.flusswerk.flow.builder.FlowBuilder;
import dev.mdz.flusswerk.integration.IntegrationTestConfiguration;
import dev.mdz.flusswerk.integration.RabbitUtil;
import dev.mdz.flusswerk.integration.TestMessage;
import dev.mdz.flusswerk.jackson.FlusswerkObjectMapper;
Expand All @@ -29,16 +30,13 @@
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeoutException;
import org.junit.Rule;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.actuate.autoconfigure.metrics.CompositeMeterRegistryAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.Bean;
Expand All @@ -62,23 +60,23 @@
FlusswerkConfiguration.class,
ReconnectTest.FlowConfiguration.class
})
@Import({MetricsAutoConfiguration.class, CompositeMeterRegistryAutoConfiguration.class})
@Import(IntegrationTestConfiguration.class)
@DisplayName("When the RabbitMQ connection is lost")
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
@Testcontainers
public class ReconnectTest {
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());

@Rule static final Network network = Network.newNetwork();
public static final Network network = Network.newNetwork();

@Container
static final RabbitMQContainer rabbitMQContainer =
new RabbitMQContainer("rabbitmq:3-management-alpine")
new RabbitMQContainer("rabbitmq:4-management-alpine")
.withNetwork(network)
.withExposedPorts(5672)
.withNetworkAliases("rabbitmq");

@Rule
@Container
static final ToxiproxyContainer toxiProxy =
new ToxiproxyContainer("ghcr.io/shopify/toxiproxy:2.5.0")
.withExposedPorts(5672, 8474)
Expand Down Expand Up @@ -233,7 +231,9 @@ void recoverFromDisruptionDuringStartup() throws IOException, InterruptedExcepti
@Test
public void recoveryAfterDisruptionDuringProcessing() throws Exception {
TestMessage input = new TestMessage("hello world");
engine.start();
if (!engine.isRunning()) {
engine.start();
}

log.info("Sending message");
rabbitUtil.send(input);
Expand Down Expand Up @@ -270,7 +270,9 @@ public void recoverFromChannelException()
log.info("Sending message");
rabbitUtil.send(new TestMessage("hello world"));
Thread.sleep(500);
engine.start();
if (!engine.isRunning()) {
engine.start();
}
log.info("Closing RabbitMQ channel");
Channel channel = rabbitConnection.getChannel();
channel.close();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import dev.mdz.flusswerk.exceptions.RetryProcessingException;
import dev.mdz.flusswerk.flow.FlowSpec;
import dev.mdz.flusswerk.flow.builder.FlowBuilder;
import dev.mdz.flusswerk.integration.IntegrationTestConfiguration;
import dev.mdz.flusswerk.integration.RabbitUtil;
import dev.mdz.flusswerk.integration.TestMessage;
import dev.mdz.flusswerk.model.IncomingMessageType;
Expand All @@ -27,8 +28,6 @@
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.actuate.autoconfigure.metrics.CompositeMeterRegistryAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.Bean;
Expand All @@ -50,15 +49,15 @@
FlusswerkConfiguration.class,
RetryTest.FlowConfiguration.class,
})
@Import({MetricsAutoConfiguration.class, CompositeMeterRegistryAutoConfiguration.class})
@Import(IntegrationTestConfiguration.class)
@DisplayName("When processing for a message fails")
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
@Testcontainers
public class RetryTest {

@Container
static final RabbitMQContainer rabbitMQContainer =
new RabbitMQContainer("rabbitmq:3-management-alpine");
new RabbitMQContainer("rabbitmq:4-management-alpine");

private final Engine engine;

Expand Down Expand Up @@ -109,7 +108,9 @@ public FlowSpec flowSpec() {

@BeforeEach
void startEngine() {
engine.start();
if (!engine.isRunning()) {
engine.start();
}
}

@AfterEach
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import dev.mdz.flusswerk.exceptions.SkipProcessingException;
import dev.mdz.flusswerk.flow.FlowSpec;
import dev.mdz.flusswerk.flow.builder.FlowBuilder;
import dev.mdz.flusswerk.integration.IntegrationTestConfiguration;
import dev.mdz.flusswerk.integration.RabbitUtil;
import dev.mdz.flusswerk.integration.TestMessage;
import dev.mdz.flusswerk.model.IncomingMessageType;
Expand All @@ -24,8 +25,6 @@
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.actuate.autoconfigure.metrics.CompositeMeterRegistryAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.Bean;
Expand All @@ -47,15 +46,15 @@
FlusswerkConfiguration.class,
SkipProcessingTest.FlowConfiguration.class,
})
@Import({MetricsAutoConfiguration.class, CompositeMeterRegistryAutoConfiguration.class})
@Import(IntegrationTestConfiguration.class)
@DisplayName("When Flusswerk skips a message")
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
@Testcontainers
public class SkipProcessingTest {

@Container
static final RabbitMQContainer rabbitMQContainer =
new RabbitMQContainer("rabbitmq:3-management-alpine");
new RabbitMQContainer("rabbitmq:4-management-alpine");

private final Engine engine;

Expand Down Expand Up @@ -114,7 +113,9 @@ public FlowSpec flowSpec() {

@BeforeEach
void startEngine() {
engine.start();
if (!engine.isRunning()) {
engine.start();
}
}

@AfterEach
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import dev.mdz.flusswerk.engine.Engine;
import dev.mdz.flusswerk.flow.FlowSpec;
import dev.mdz.flusswerk.flow.builder.FlowBuilder;
import dev.mdz.flusswerk.integration.IntegrationTestConfiguration;
import dev.mdz.flusswerk.integration.RabbitUtil;
import dev.mdz.flusswerk.integration.TestMessage;
import dev.mdz.flusswerk.model.IncomingMessageType;
Expand All @@ -22,8 +23,6 @@
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.actuate.autoconfigure.metrics.CompositeMeterRegistryAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.Bean;
Expand All @@ -45,14 +44,14 @@
FlusswerkConfiguration.class,
SuccessfulProcessingTest.FlowConfiguration.class
})
@Import({MetricsAutoConfiguration.class, CompositeMeterRegistryAutoConfiguration.class})
@Import(IntegrationTestConfiguration.class)
@DisplayName("When Flusswerk successfully processes a message")
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
@Testcontainers
public class SuccessfulProcessingTest {
@Container
static final RabbitMQContainer rabbitMQContainer =
new RabbitMQContainer("rabbitmq:3-management-alpine");
new RabbitMQContainer("rabbitmq:4-management-alpine");

private final Engine engine;

Expand Down Expand Up @@ -94,7 +93,9 @@ public FlowSpec flowSpec() {

@BeforeEach
void startEngine() {
engine.start();
if (!engine.isRunning()) {
engine.start();
}
}

@AfterEach
Expand Down
Loading