From 5d421fc6f37719489eef78fdc14c67469b3c989f Mon Sep 17 00:00:00 2001 From: Kai Moritz Date: Sat, 5 Apr 2025 19:58:08 +0200 Subject: [PATCH] `ApplicationTests` verwendet die echte MVC-Implementierung MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit * Der Test verwendet jetzt nicht mehr `@AutoconfigureMockMvc`. * Statdessen wird `RANDOM_PORT` und das `TestRestTemplate` verwendet. * Außerdem: ** Logging für den Zookeeper- und den Broker-Prozess unterdrückt. ** `ApplicationTests` überarbeitet/aufgeräumt. --- pom.xml | 5 ++ .../de/juplo/kafka/DeadLetterConsumer.java | 5 +- ...troller.java => DeadLetterController.java} | 2 +- src/main/resources/logback.xml | 4 ++ .../java/de/juplo/kafka/ApplicationTests.java | 48 +++++++++---------- 5 files changed, 33 insertions(+), 31 deletions(-) rename src/main/java/de/juplo/kafka/{ApplicationController.java => DeadLetterController.java} (94%) diff --git a/pom.xml b/pom.xml index 21bd07f..7da3b49 100644 --- a/pom.xml +++ b/pom.xml @@ -63,6 +63,11 @@ spring-kafka-test test + + com.jayway.jsonpath + json-path + test + diff --git a/src/main/java/de/juplo/kafka/DeadLetterConsumer.java b/src/main/java/de/juplo/kafka/DeadLetterConsumer.java index 54192a5..8cd553e 100644 --- a/src/main/java/de/juplo/kafka/DeadLetterConsumer.java +++ b/src/main/java/de/juplo/kafka/DeadLetterConsumer.java @@ -99,10 +99,7 @@ public class DeadLetterConsumer implements Runnable fetchRequest.future().complete(record.value()); schedulePendingFetchRequest(record.partition()).ifPresentOrElse( - (nextFetchRequest) -> - { - scheduleFetchRequest(nextFetchRequest); - }, + (nextFetchRequest) -> scheduleFetchRequest(nextFetchRequest), () -> { log.info("{} - no pending fetch-requests for {}", id, partition); diff --git a/src/main/java/de/juplo/kafka/ApplicationController.java b/src/main/java/de/juplo/kafka/DeadLetterController.java similarity index 94% rename from src/main/java/de/juplo/kafka/ApplicationController.java rename to src/main/java/de/juplo/kafka/DeadLetterController.java index e526f82..e8da81c 100644 --- a/src/main/java/de/juplo/kafka/ApplicationController.java +++ b/src/main/java/de/juplo/kafka/DeadLetterController.java @@ -8,7 +8,7 @@ import reactor.core.publisher.Mono; @RestController -public class ApplicationController +public class DeadLetterController { @Autowired DeadLetterConsumer deadLetterConsumer; diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml index 9c7af76..a4c5192 100644 --- a/src/main/resources/logback.xml +++ b/src/main/resources/logback.xml @@ -11,4 +11,8 @@ + + + + diff --git a/src/test/java/de/juplo/kafka/ApplicationTests.java b/src/test/java/de/juplo/kafka/ApplicationTests.java index ae119bf..0a51022 100644 --- a/src/test/java/de/juplo/kafka/ApplicationTests.java +++ b/src/test/java/de/juplo/kafka/ApplicationTests.java @@ -1,46 +1,42 @@ package de.juplo.kafka; +import com.jayway.jsonpath.JsonPath; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.http.HttpStatus; +import org.springframework.http.HttpStatusCode; +import org.springframework.http.ResponseEntity; import org.springframework.kafka.test.context.EmbeddedKafka; -import org.springframework.test.web.servlet.MockMvc; -import java.time.Duration; - -import static de.juplo.kafka.ApplicationTests.PARTITIONS; +import static de.juplo.kafka.ApplicationTests.NUM_PARTITIONS; import static de.juplo.kafka.ApplicationTests.TOPIC; -import static org.awaitility.Awaitility.await; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static org.assertj.core.api.Assertions.assertThat; @SpringBootTest( + webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, properties = { "juplo.bootstrap-server=${spring.embedded.kafka.brokers}", - "juplo.consumer.topic=" + TOPIC }) -@AutoConfigureMockMvc -@EmbeddedKafka(topics = TOPIC, partitions = PARTITIONS) + "juplo.consumer.topic=" + TOPIC, + "logging.level.de.juplo.kafka=TRACE", + }) +@EmbeddedKafka(topics = TOPIC, partitions = NUM_PARTITIONS) public class ApplicationTests { - static final String TOPIC = "FOO"; - static final int PARTITIONS = 10; - - @Autowired - MockMvc mockMvc; - - - @Test public void testApplicationStartup() { - await("Application is healthy") - .atMost(Duration.ofSeconds(5)) - .untilAsserted(() -> mockMvc - .perform(get("/actuator/health")) - .andExpect(status().isOk()) - .andExpect(jsonPath("status").value("UP"))); + ResponseEntity response = restTemplate.getForEntity("/actuator/health", String.class); + assertThat(response.getStatusCode()).isEqualTo(HttpStatusCode.valueOf(HttpStatus.OK.value())); + assertThat(JsonPath.parse(response.getBody()).read("$.status", String.class)).isEqualTo("UP"); } + + + static final String TOPIC = "ExampleConsumerTest_TEST"; + static final int NUM_PARTITIONS = 7; + + @Autowired + TestRestTemplate restTemplate; } -- 2.20.1