TEST
authorKai Moritz <kai@juplo.de>
Wed, 25 Dec 2024 17:47:09 +0000 (18:47 +0100)
committerKai Moritz <kai@juplo.de>
Sun, 5 Jan 2025 11:26:36 +0000 (12:26 +0100)
src/test/java/de/juplo/kafka/ExampleConsumerTest.java

index 0fe8fff..0716485 100644 (file)
@@ -422,6 +422,41 @@ public class ExampleConsumerTest
       .until(() -> mockRecordHandler.getNumMessagesHandled() == 29);
   }
 
+  @DisplayName("A message, that triggers a retryable exception in the domain-logic, is retried 3 times with a fixed back-of and all messages are eventually consumed")
+  @ParameterizedTest(name = "Back-Off millis: {0}")
+  @ValueSource(ints = { 100, 250, 500, 1000 })
+  void testOneMessageIsRetriedWithFixedBackOff(int backOffMillis)
+  {
+    BackOff backOff = new FixedBackOff(backOffMillis, 3);
+    createExampleConsumer(backOff);
+
+    sendValidMessage(0);
+    sendValidMessage(1);
+    sendValidMessage(2);
+    sendMessageThatTriggersRetriableExceptionInDomain(3, 3);
+    sendValidMessage(4);
+    sendValidMessage(5);
+    sendValidMessage(6);
+    sendValidMessage(7);
+    sendValidMessage(8);
+    sendValidMessage(9);
+    sendValidMessage(0);
+    sendValidMessage(1);
+    sendValidMessage(2);
+    sendValidMessage(3);
+    sendValidMessage(4);
+    sendValidMessage(5);
+    sendValidMessage(6);
+    sendValidMessage(7);
+    sendValidMessage(8);
+    sendValidMessage(9);
+
+    Awaitility
+      .await("All messages are eventually consumed")
+      .atMost(Duration.ofSeconds(15))
+      .until(() -> mockRecordHandler.getNumMessagesHandled() == 20);
+  }
+
 
   static final String ID = "TEST";
   static final String TOPIC = "ExampleConsumerTest_TEST";