From 8736a59d92d47362419d85f9885b58b86da67a7b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Nov 2024 18:31:02 +0000 Subject: [PATCH 1/3] Bump io.github.mfvanek:pg-index-health-bom from 0.13.2 to 0.13.3 Bumps [io.github.mfvanek:pg-index-health-bom](https://github.com/mfvanek/pg-index-health) from 0.13.2 to 0.13.3. - [Release notes](https://github.com/mfvanek/pg-index-health/releases) - [Commits](https://github.com/mfvanek/pg-index-health/compare/v.0.13.2...v.0.13.3) --- updated-dependencies: - dependency-name: io.github.mfvanek:pg-index-health-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- common-internal-bom/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common-internal-bom/build.gradle.kts b/common-internal-bom/build.gradle.kts index ece5dde7..86eb373b 100644 --- a/common-internal-bom/build.gradle.kts +++ b/common-internal-bom/build.gradle.kts @@ -12,7 +12,7 @@ dependencies { api(platform("org.assertj:assertj-bom:3.26.3")) api(platform("org.testcontainers:testcontainers-bom:1.20.3")) api(platform("org.junit:junit-bom:5.11.3")) - api(platform("io.github.mfvanek:pg-index-health-bom:0.13.2")) + api(platform("io.github.mfvanek:pg-index-health-bom:0.13.3")) constraints { api("org.liquibase:liquibase-core:4.30.0") From d53c52f9d450425a845de12af7c5fef46efeb357 Mon Sep 17 00:00:00 2001 From: Ivan Vakhrushev Date: Tue, 19 Nov 2024 22:43:26 +0400 Subject: [PATCH 2/3] Upgrade Gradle --- build.gradle.kts | 4 +- gradle/wrapper/gradle-wrapper.properties | 2 +- .../boot2/test/IndexesMaintenanceTest.java | 17 ++----- .../test/controllers/TimeControllerTest.java | 48 +++++++++---------- .../boot3/test/IndexesMaintenanceTest.java | 17 ++----- .../test/controllers/TimeControllerTest.java | 38 +++++++-------- 6 files changed, 54 insertions(+), 72 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 6b7de427..c600f81d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -9,7 +9,7 @@ description = "Experiments with Java" allprojects { group = "io.github.mfvanek" - version = "0.2.1" + version = "0.2.2" repositories { mavenLocal() @@ -19,7 +19,7 @@ allprojects { tasks { wrapper { - gradleVersion = "8.10.2" + gradleVersion = "8.11" } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index df97d72b..94113f20 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/spring-boot-2-demo-app/src/test/java/io/github/mfvanek/spring/boot2/test/IndexesMaintenanceTest.java b/spring-boot-2-demo-app/src/test/java/io/github/mfvanek/spring/boot2/test/IndexesMaintenanceTest.java index 064fd5aa..e8f43439 100644 --- a/spring-boot-2-demo-app/src/test/java/io/github/mfvanek/spring/boot2/test/IndexesMaintenanceTest.java +++ b/spring-boot-2-demo-app/src/test/java/io/github/mfvanek/spring/boot2/test/IndexesMaintenanceTest.java @@ -4,14 +4,13 @@ import io.github.mfvanek.pg.common.maintenance.Diagnostic; import io.github.mfvanek.pg.model.DbObject; import io.github.mfvanek.pg.model.PgContext; -import io.github.mfvanek.pg.model.table.TableNameAware; +import io.github.mfvanek.pg.model.predicates.SkipLiquibaseTablesPredicate; import io.github.mfvanek.spring.boot2.test.support.TestBase; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import java.util.List; -import java.util.function.Predicate; import static org.assertj.core.api.Assertions.assertThat; @@ -35,17 +34,9 @@ void databaseStructureCheckForPublicSchema() { checks.stream() .filter(DatabaseCheckOnHost::isStatic) - .forEach(check -> { - final Predicate skipLiquibaseTables = dbObject -> { - if (dbObject instanceof TableNameAware t) { - return !t.getTableName().equalsIgnoreCase("databasechangelog"); - } - return true; - }; - final List objects = check.check(PgContext.ofPublic(), skipLiquibaseTables); - assertThat(objects) + .forEach(check -> + assertThat(check.check(PgContext.ofPublic(), SkipLiquibaseTablesPredicate.ofPublic())) .as(check.getDiagnostic().name()) - .isEmpty(); - }); + .isEmpty()); } } diff --git a/spring-boot-2-demo-app/src/test/java/io/github/mfvanek/spring/boot2/test/controllers/TimeControllerTest.java b/spring-boot-2-demo-app/src/test/java/io/github/mfvanek/spring/boot2/test/controllers/TimeControllerTest.java index 8932fd35..6c25f5dc 100644 --- a/spring-boot-2-demo-app/src/test/java/io/github/mfvanek/spring/boot2/test/controllers/TimeControllerTest.java +++ b/spring-boot-2-demo-app/src/test/java/io/github/mfvanek/spring/boot2/test/controllers/TimeControllerTest.java @@ -19,7 +19,6 @@ import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; import org.springframework.kafka.listener.KafkaMessageListenerContainer; -import javax.annotation.Nonnull; import java.nio.charset.StandardCharsets; import java.time.Clock; import java.time.Duration; @@ -31,6 +30,7 @@ import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; +import javax.annotation.Nonnull; import static io.github.mfvanek.spring.boot2.test.filters.TraceIdInResponseServletFilter.TRACE_ID_HEADER_NAME; import static org.assertj.core.api.Assertions.assertThat; @@ -47,7 +47,7 @@ class TimeControllerTest extends TestBase { @Autowired private Clock clock; @Autowired - private NamedParameterJdbcTemplate jdbcTemplate; + private NamedParameterJdbcTemplate namedParameterJdbcTemplate; @BeforeAll void setUpKafkaConsumer() { @@ -64,45 +64,45 @@ void tearDownKafkaConsumer() { @BeforeEach void cleanUpDatabase() { - jdbcTemplate.getJdbcTemplate().execute("truncate table otel_demo.storage"); + jdbcTemplate.execute("truncate table otel_demo.storage"); } @SneakyThrows @Test void spanShouldBeReportedInLogs(@Nonnull final CapturedOutput output) { final var result = webTestClient.get() - .uri(uriBuilder -> uriBuilder.path("current-time") - .build()) - .exchange() - .expectStatus().isOk() - .expectHeader().exists(TRACE_ID_HEADER_NAME) - .expectBody(LocalDateTime.class) - .returnResult(); + .uri(uriBuilder -> uriBuilder.path("current-time") + .build()) + .exchange() + .expectStatus().isOk() + .expectHeader().exists(TRACE_ID_HEADER_NAME) + .expectBody(LocalDateTime.class) + .returnResult(); final String traceId = result.getResponseHeaders().getFirst(TRACE_ID_HEADER_NAME); assertThat(traceId).isNotBlank(); assertThat(result.getResponseBody()) - .isBefore(LocalDateTime.now(clock)); + .isBefore(LocalDateTime.now(clock)); assertThat(output.getAll()) - .contains("Called method getNow. TraceId = " + traceId) - .contains("Awaiting acknowledgement from Kafka"); + .contains("Called method getNow. TraceId = " + traceId) + .contains("Awaiting acknowledgement from Kafka"); final var received = consumerRecords.poll(10, TimeUnit.SECONDS); assertThat(received).isNotNull(); assertThat(received.value()).startsWith("Current time = "); final Header[] headers = received.headers().toArray(); final var headerNames = Arrays.stream(headers) - .map(Header::key) - .toList(); + .map(Header::key) + .toList(); assertThat(headerNames) - .hasSize(2) - .containsExactlyInAnyOrder("traceparent", "b3"); + .hasSize(2) + .containsExactlyInAnyOrder("traceparent", "b3"); final var headerValues = Arrays.stream(headers) - .map(Header::value) - .map(v -> new String(v, StandardCharsets.UTF_8)) - .toList(); + .map(Header::value) + .map(v -> new String(v, StandardCharsets.UTF_8)) + .toList(); assertThat(headerValues) - .hasSameSizeAs(headerNames) - .allSatisfy(h -> assertThat(h).contains(traceId)); + .hasSameSizeAs(headerNames) + .allSatisfy(h -> assertThat(h).contains(traceId)); Awaitility .await() @@ -111,14 +111,14 @@ void spanShouldBeReportedInLogs(@Nonnull final CapturedOutput output) { .until(() -> countRecordsInTable() >= 1L); assertThat(output.getAll()) .contains("Received record: " + received.value() + " with traceId " + traceId); - final String messageFromDb = jdbcTemplate.queryForObject("select message from otel_demo.storage where trace_id = :traceId", + final String messageFromDb = namedParameterJdbcTemplate.queryForObject("select message from otel_demo.storage where trace_id = :traceId", Map.of("traceId", traceId), String.class); assertThat(messageFromDb) .isEqualTo(received.value()); } private long countRecordsInTable() { - final Long queryResult = jdbcTemplate.getJdbcTemplate().queryForObject("select count(*) from otel_demo.storage", Long.class); + final Long queryResult = jdbcTemplate.queryForObject("select count(*) from otel_demo.storage", Long.class); return Objects.requireNonNullElse(queryResult, 0L); } } diff --git a/spring-boot-3-demo-app/src/test/java/io/github/mfvanek/spring/boot3/test/IndexesMaintenanceTest.java b/spring-boot-3-demo-app/src/test/java/io/github/mfvanek/spring/boot3/test/IndexesMaintenanceTest.java index 0fe52597..44ff5df1 100644 --- a/spring-boot-3-demo-app/src/test/java/io/github/mfvanek/spring/boot3/test/IndexesMaintenanceTest.java +++ b/spring-boot-3-demo-app/src/test/java/io/github/mfvanek/spring/boot3/test/IndexesMaintenanceTest.java @@ -4,14 +4,13 @@ import io.github.mfvanek.pg.common.maintenance.Diagnostic; import io.github.mfvanek.pg.model.DbObject; import io.github.mfvanek.pg.model.PgContext; -import io.github.mfvanek.pg.model.table.TableNameAware; +import io.github.mfvanek.pg.model.predicates.SkipLiquibaseTablesPredicate; import io.github.mfvanek.spring.boot3.test.support.TestBase; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import java.util.List; -import java.util.function.Predicate; import static org.assertj.core.api.Assertions.assertThat; @@ -35,17 +34,9 @@ void databaseStructureCheckForPublicSchema() { checks.stream() .filter(DatabaseCheckOnHost::isStatic) - .forEach(check -> { - final Predicate skipLiquibaseTables = dbObject -> { - if (dbObject instanceof TableNameAware t) { - return !t.getTableName().equalsIgnoreCase("databasechangelog"); - } - return true; - }; - final List objects = check.check(PgContext.ofPublic(), skipLiquibaseTables); - assertThat(objects) + .forEach(check -> + assertThat(check.check(PgContext.ofPublic(), SkipLiquibaseTablesPredicate.ofPublic())) .as(check.getDiagnostic().name()) - .isEmpty(); - }); + .isEmpty()); } } diff --git a/spring-boot-3-demo-app/src/test/java/io/github/mfvanek/spring/boot3/test/controllers/TimeControllerTest.java b/spring-boot-3-demo-app/src/test/java/io/github/mfvanek/spring/boot3/test/controllers/TimeControllerTest.java index 3f626f44..8f96436e 100644 --- a/spring-boot-3-demo-app/src/test/java/io/github/mfvanek/spring/boot3/test/controllers/TimeControllerTest.java +++ b/spring-boot-3-demo-app/src/test/java/io/github/mfvanek/spring/boot3/test/controllers/TimeControllerTest.java @@ -71,38 +71,38 @@ void cleanUpDatabase() { @Test void spanShouldBeReportedInLogs(@Nonnull final CapturedOutput output) { final var result = webTestClient.get() - .uri(uriBuilder -> uriBuilder.path("current-time") - .build()) - .exchange() - .expectStatus().isOk() - .expectHeader().exists(TRACE_ID_HEADER_NAME) - .expectBody(LocalDateTime.class) - .returnResult(); + .uri(uriBuilder -> uriBuilder.path("current-time") + .build()) + .exchange() + .expectStatus().isOk() + .expectHeader().exists(TRACE_ID_HEADER_NAME) + .expectBody(LocalDateTime.class) + .returnResult(); final String traceId = result.getResponseHeaders().getFirst(TRACE_ID_HEADER_NAME); assertThat(traceId).isNotBlank(); assertThat(result.getResponseBody()) - .isBefore(LocalDateTime.now(clock)); + .isBefore(LocalDateTime.now(clock)); assertThat(output.getAll()) - .contains("Called method getNow. TraceId = " + traceId) - .contains("Awaiting acknowledgement from Kafka"); + .contains("Called method getNow. TraceId = " + traceId) + .contains("Awaiting acknowledgement from Kafka"); final var received = consumerRecords.poll(10, TimeUnit.SECONDS); assertThat(received).isNotNull(); assertThat(received.value()).startsWith("Current time = "); final Header[] headers = received.headers().toArray(); final var headerNames = Arrays.stream(headers) - .map(Header::key) - .toList(); + .map(Header::key) + .toList(); assertThat(headerNames) - .hasSize(2) - .containsExactlyInAnyOrder("traceparent", "b3"); + .hasSize(2) + .containsExactlyInAnyOrder("traceparent", "b3"); final var headerValues = Arrays.stream(headers) - .map(Header::value) - .map(v -> new String(v, StandardCharsets.UTF_8)) - .toList(); + .map(Header::value) + .map(v -> new String(v, StandardCharsets.UTF_8)) + .toList(); assertThat(headerValues) - .hasSameSizeAs(headerNames) - .allSatisfy(h -> assertThat(h).contains(traceId)); + .hasSameSizeAs(headerNames) + .allSatisfy(h -> assertThat(h).contains(traceId)); Awaitility .await() From 63c2e902c33dff3d809a24736a957acced5e4d4e Mon Sep 17 00:00:00 2001 From: Ivan Vakhrushev Date: Tue, 19 Nov 2024 22:44:38 +0400 Subject: [PATCH 3/3] Reformat code --- .../test/controllers/TimeController.java | 15 ++- .../TraceIdInResponseServletFilter.java | 4 +- .../test/service/KafkaReadingService.java | 10 +- .../test/service/KafkaSendingService.java | 2 +- .../boot2/test/ActuatorEndpointTest.java | 96 +++++++++---------- .../boot2/test/support/JaegerInitializer.java | 4 +- .../test/support/KafkaConsumerUtils.java | 6 +- .../boot2/test/support/KafkaInitializer.java | 32 +++---- .../test/config/OpenTelemetryConfig.java | 8 +- .../test/controllers/TimeController.java | 10 +- .../TraceIdInResponseServletFilter.java | 2 +- .../test/service/KafkaReadingService.java | 10 +- .../test/service/KafkaSendingService.java | 2 +- .../boot3/test/ActuatorEndpointTest.java | 96 +++++++++---------- .../test/support/KafkaConsumerUtils.java | 2 +- .../boot3/test/support/KafkaInitializer.java | 2 +- 16 files changed, 150 insertions(+), 151 deletions(-) diff --git a/spring-boot-2-demo-app/src/main/java/io/github/mfvanek/spring/boot2/test/controllers/TimeController.java b/spring-boot-2-demo-app/src/main/java/io/github/mfvanek/spring/boot2/test/controllers/TimeController.java index 6219424a..f893e234 100644 --- a/spring-boot-2-demo-app/src/main/java/io/github/mfvanek/spring/boot2/test/controllers/TimeController.java +++ b/spring-boot-2-demo-app/src/main/java/io/github/mfvanek/spring/boot2/test/controllers/TimeController.java @@ -1,8 +1,5 @@ package io.github.mfvanek.spring.boot2.test.controllers; -import java.time.Clock; -import java.util.Optional; - import io.github.mfvanek.spring.boot2.test.service.KafkaSendingService; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; @@ -13,7 +10,9 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; +import java.time.Clock; import java.time.LocalDateTime; +import java.util.Optional; @Slf4j @RestController @@ -29,14 +28,14 @@ public class TimeController { @GetMapping(path = "/current-time") public LocalDateTime getNow() { final var traceId = Optional.ofNullable(tracer.currentSpan()) - .map(Span::context) - .map(TraceContext::traceId) - .orElse(null); + .map(Span::context) + .map(TraceContext::traceId) + .orElse(null); log.info("Called method getNow. TraceId = {}", traceId); final LocalDateTime now = LocalDateTime.now(clock); kafkaSendingService.sendNotification("Current time = " + now) - .thenRun(() -> log.info("Awaiting acknowledgement from Kafka")) - .get(); + .thenRun(() -> log.info("Awaiting acknowledgement from Kafka")) + .get(); return now; } } diff --git a/spring-boot-2-demo-app/src/main/java/io/github/mfvanek/spring/boot2/test/filters/TraceIdInResponseServletFilter.java b/spring-boot-2-demo-app/src/main/java/io/github/mfvanek/spring/boot2/test/filters/TraceIdInResponseServletFilter.java index 4566dcdb..e45a697d 100644 --- a/spring-boot-2-demo-app/src/main/java/io/github/mfvanek/spring/boot2/test/filters/TraceIdInResponseServletFilter.java +++ b/spring-boot-2-demo-app/src/main/java/io/github/mfvanek/spring/boot2/test/filters/TraceIdInResponseServletFilter.java @@ -5,13 +5,13 @@ import org.springframework.cloud.sleuth.Tracer; import org.springframework.stereotype.Component; +import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletResponse; -import java.io.IOException; @Component @RequiredArgsConstructor @@ -23,7 +23,7 @@ public class TraceIdInResponseServletFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) - throws IOException, ServletException { + throws IOException, ServletException { final Span currentSpan = tracer.currentSpan(); if (currentSpan != null) { HttpServletResponse resp = (HttpServletResponse) response; diff --git a/spring-boot-2-demo-app/src/main/java/io/github/mfvanek/spring/boot2/test/service/KafkaReadingService.java b/spring-boot-2-demo-app/src/main/java/io/github/mfvanek/spring/boot2/test/service/KafkaReadingService.java index c408a0fe..60cd3b5e 100644 --- a/spring-boot-2-demo-app/src/main/java/io/github/mfvanek/spring/boot2/test/service/KafkaReadingService.java +++ b/spring-boot-2-demo-app/src/main/java/io/github/mfvanek/spring/boot2/test/service/KafkaReadingService.java @@ -30,11 +30,11 @@ public void listen(ConsumerRecord message, Acknowledgment ack) { final String traceId = currentSpan != null ? currentSpan.context().traceId() : ""; log.info("Received record: {} with traceId {}", message.value(), traceId); jdbcTemplate.update("insert into otel_demo.storage(message, trace_id, created_at) values(:msg, :traceId, :createdAt);", - Map.ofEntries( - Map.entry("msg", message.value()), - Map.entry("traceId", traceId), - Map.entry("createdAt", LocalDateTime.now(clock)) - ) + Map.ofEntries( + Map.entry("msg", message.value()), + Map.entry("traceId", traceId), + Map.entry("createdAt", LocalDateTime.now(clock)) + ) ); ack.acknowledge(); } diff --git a/spring-boot-2-demo-app/src/main/java/io/github/mfvanek/spring/boot2/test/service/KafkaSendingService.java b/spring-boot-2-demo-app/src/main/java/io/github/mfvanek/spring/boot2/test/service/KafkaSendingService.java index 131717af..9be49a27 100644 --- a/spring-boot-2-demo-app/src/main/java/io/github/mfvanek/spring/boot2/test/service/KafkaSendingService.java +++ b/spring-boot-2-demo-app/src/main/java/io/github/mfvanek/spring/boot2/test/service/KafkaSendingService.java @@ -6,9 +6,9 @@ import org.springframework.kafka.support.SendResult; import org.springframework.stereotype.Service; -import javax.annotation.Nonnull; import java.util.UUID; import java.util.concurrent.CompletableFuture; +import javax.annotation.Nonnull; @Slf4j @Service diff --git a/spring-boot-2-demo-app/src/test/java/io/github/mfvanek/spring/boot2/test/ActuatorEndpointTest.java b/spring-boot-2-demo-app/src/test/java/io/github/mfvanek/spring/boot2/test/ActuatorEndpointTest.java index befe9779..0f415bb4 100644 --- a/spring-boot-2-demo-app/src/test/java/io/github/mfvanek/spring/boot2/test/ActuatorEndpointTest.java +++ b/spring-boot-2-demo-app/src/test/java/io/github/mfvanek/spring/boot2/test/ActuatorEndpointTest.java @@ -26,82 +26,82 @@ class ActuatorEndpointTest extends TestBase { @BeforeEach void setUp() { this.actuatorClient = WebTestClient.bindToServer() - .baseUrl("http://localhost:" + actuatorPort + "/actuator/") - .build(); + .baseUrl("http://localhost:" + actuatorPort + "/actuator/") + .build(); } @Test void actuatorShouldBeRunOnSeparatePort() { assertThat(actuatorPort) - .isNotEqualTo(port); + .isNotEqualTo(port); } @ParameterizedTest @CsvSource(value = { - "prometheus|jvm_threads_live_threads|text/plain", - "health|{\"status\":\"UP\",\"groups\":[\"liveness\",\"readiness\"]}|application/json", - "health/liveness|{\"status\":\"UP\"}|application/json", - "health/readiness|{\"status\":\"UP\"}|application/json", - "info|\"version\":|application/json"}, delimiter = '|') + "prometheus|jvm_threads_live_threads|text/plain", + "health|{\"status\":\"UP\",\"groups\":[\"liveness\",\"readiness\"]}|application/json", + "health/liveness|{\"status\":\"UP\"}|application/json", + "health/readiness|{\"status\":\"UP\"}|application/json", + "info|\"version\":|application/json"}, delimiter = '|') void actuatorEndpointShouldReturnOk(@Nonnull final String endpointName, @Nonnull final String expectedSubstring, @Nonnull final String mediaType) { final var result = actuatorClient.get() - .uri(uriBuilder -> uriBuilder - .path(endpointName) - .build()) - .accept(MediaType.valueOf(mediaType)) - .exchange() - .expectStatus().isOk() - .expectBody(String.class) - .returnResult() - .getResponseBody(); + .uri(uriBuilder -> uriBuilder + .path(endpointName) + .build()) + .accept(MediaType.valueOf(mediaType)) + .exchange() + .expectStatus().isOk() + .expectBody(String.class) + .returnResult() + .getResponseBody(); assertThat(result) - .contains(expectedSubstring); + .contains(expectedSubstring); } @Test void swaggerUiEndpointShouldReturnFound() { final var result = actuatorClient.get() - .uri(uriBuilder -> uriBuilder - .pathSegment("swagger-ui") - .build()) - .accept(MediaType.TEXT_HTML) - .exchange() - .expectStatus().isFound() - .expectHeader().location("/actuator/swagger-ui/index.html") - .expectBody() - .returnResult() - .getResponseBody(); + .uri(uriBuilder -> uriBuilder + .pathSegment("swagger-ui") + .build()) + .accept(MediaType.TEXT_HTML) + .exchange() + .expectStatus().isFound() + .expectHeader().location("/actuator/swagger-ui/index.html") + .expectBody() + .returnResult() + .getResponseBody(); assertThat(result).isNull(); } @Test void readinessProbeShouldBeCollectedFromApplicationMainPort() { final var result = webTestClient.get() - .uri(uriBuilder -> uriBuilder - .pathSegment("readyz") - .build()) - .accept(MediaType.APPLICATION_JSON) - .exchange() - .expectStatus().isOk() - .expectBody(String.class) - .returnResult() - .getResponseBody(); + .uri(uriBuilder -> uriBuilder + .pathSegment("readyz") + .build()) + .accept(MediaType.APPLICATION_JSON) + .exchange() + .expectStatus().isOk() + .expectBody(String.class) + .returnResult() + .getResponseBody(); assertThat(result) - .isEqualTo("{\"status\":\"UP\"}"); + .isEqualTo("{\"status\":\"UP\"}"); final String metricsResult = actuatorClient.get() - .uri(uriBuilder -> uriBuilder - .path("prometheus") - .build()) - .accept(MediaType.valueOf("text/plain")) - .exchange() - .expectStatus().isOk() - .expectBody(String.class) - .returnResult() - .getResponseBody(); + .uri(uriBuilder -> uriBuilder + .path("prometheus") + .build()) + .accept(MediaType.valueOf("text/plain")) + .exchange() + .expectStatus().isOk() + .expectBody(String.class) + .returnResult() + .getResponseBody(); assertThat(metricsResult) - .contains("http_server_requests_seconds_bucket"); + .contains("http_server_requests_seconds_bucket"); } } diff --git a/spring-boot-2-demo-app/src/test/java/io/github/mfvanek/spring/boot2/test/support/JaegerInitializer.java b/spring-boot-2-demo-app/src/test/java/io/github/mfvanek/spring/boot2/test/support/JaegerInitializer.java index 6946940e..34e60ee6 100644 --- a/spring-boot-2-demo-app/src/test/java/io/github/mfvanek/spring/boot2/test/support/JaegerInitializer.java +++ b/spring-boot-2-demo-app/src/test/java/io/github/mfvanek/spring/boot2/test/support/JaegerInitializer.java @@ -11,7 +11,7 @@ public class JaegerInitializer implements ApplicationContextInitializer JAEGER = new GenericContainer<>(IMAGE) - .withExposedPorts(4317); + .withExposedPorts(4317); @Override public void initialize(final ConfigurableApplicationContext context) { @@ -19,7 +19,7 @@ public void initialize(final ConfigurableApplicationContext context) { final String jaegerUrl = "http://localhost:" + JAEGER.getFirstMappedPort(); TestPropertyValues.of( - "spring.sleuth.otel.exporter.otlp.endpoint=" + jaegerUrl + "spring.sleuth.otel.exporter.otlp.endpoint=" + jaegerUrl ).applyTo(context.getEnvironment()); } } diff --git a/spring-boot-2-demo-app/src/test/java/io/github/mfvanek/spring/boot2/test/support/KafkaConsumerUtils.java b/spring-boot-2-demo-app/src/test/java/io/github/mfvanek/spring/boot2/test/support/KafkaConsumerUtils.java index 624a91be..d12a0654 100644 --- a/spring-boot-2-demo-app/src/test/java/io/github/mfvanek/spring/boot2/test/support/KafkaConsumerUtils.java +++ b/spring-boot-2-demo-app/src/test/java/io/github/mfvanek/spring/boot2/test/support/KafkaConsumerUtils.java @@ -13,17 +13,17 @@ import org.springframework.kafka.test.utils.ContainerTestUtils; import org.springframework.kafka.test.utils.KafkaTestUtils; -import javax.annotation.Nonnull; import java.util.Map; import java.util.UUID; import java.util.concurrent.BlockingQueue; +import javax.annotation.Nonnull; @UtilityClass public class KafkaConsumerUtils { public KafkaMessageListenerContainer setUpKafkaConsumer( - @Nonnull final KafkaProperties kafkaProperties, - @Nonnull final BlockingQueue> consumerRecords) { + @Nonnull final KafkaProperties kafkaProperties, + @Nonnull final BlockingQueue> consumerRecords) { final var containerProperties = new ContainerProperties(kafkaProperties.getTemplate().getDefaultTopic()); final Map consumerProperties = KafkaTestUtils.consumerProps(KafkaInitializer.getBootstrapSevers(), "test-group", "false"); consumerProperties.put(CommonClientConfigs.SECURITY_PROTOCOL_CONFIG, "SASL_PLAINTEXT"); diff --git a/spring-boot-2-demo-app/src/test/java/io/github/mfvanek/spring/boot2/test/support/KafkaInitializer.java b/spring-boot-2-demo-app/src/test/java/io/github/mfvanek/spring/boot2/test/support/KafkaInitializer.java index ae162a2e..9b2ed081 100644 --- a/spring-boot-2-demo-app/src/test/java/io/github/mfvanek/spring/boot2/test/support/KafkaInitializer.java +++ b/spring-boot-2-demo-app/src/test/java/io/github/mfvanek/spring/boot2/test/support/KafkaInitializer.java @@ -7,9 +7,9 @@ import org.testcontainers.containers.KafkaContainer; import org.testcontainers.utility.DockerImageName; -import javax.annotation.Nonnull; import java.util.Map; import java.util.stream.Collectors; +import javax.annotation.Nonnull; public class KafkaInitializer implements ApplicationContextInitializer { @@ -19,10 +19,10 @@ public class KafkaInitializer implements ApplicationContextInitializer additionalUsers) { final String users = additionalUsers.entrySet() - .stream() - .map(e -> "user_%s=\"%s\"".formatted(e.getKey(), e.getValue())) - .collect(Collectors.joining(" ")); + .stream() + .map(e -> "user_%s=\"%s\"".formatted(e.getKey(), e.getValue())) + .collect(Collectors.joining(" ")); final StringBuilder builder = new StringBuilder() - .append(PlainLoginModule.class.getName()) - .append(" required username=\"%s\" password=\"%s\"".formatted(KAFKA_USER_NAME, KAFKA_USER_PASSWORD)); + .append(PlainLoginModule.class.getName()) + .append(" required username=\"%s\" password=\"%s\"".formatted(KAFKA_USER_NAME, KAFKA_USER_PASSWORD)); if (!users.isBlank()) { builder.append(" ") - .append(users); + .append(users); } - return builder.append(";") - .toString(); + return builder.append(";") + .toString(); } @Override public void initialize(@Nonnull final ConfigurableApplicationContext applicationContext) { KAFKA_CONTAINER.start(); TestPropertyValues.of( - "spring.kafka.bootstrap-servers=" + KAFKA_CONTAINER.getBootstrapServers(), - "demo.kafka.opentelemetry.username=" + KAFKA_USER_NAME, - "demo.kafka.opentelemetry.password=" + KAFKA_USER_PASSWORD + "spring.kafka.bootstrap-servers=" + KAFKA_CONTAINER.getBootstrapServers(), + "demo.kafka.opentelemetry.username=" + KAFKA_USER_NAME, + "demo.kafka.opentelemetry.password=" + KAFKA_USER_PASSWORD ).applyTo(applicationContext.getEnvironment()); } diff --git a/spring-boot-3-demo-app/src/main/java/io/github/mfvanek/spring/boot3/test/config/OpenTelemetryConfig.java b/spring-boot-3-demo-app/src/main/java/io/github/mfvanek/spring/boot3/test/config/OpenTelemetryConfig.java index 5f3325ba..2050e02e 100644 --- a/spring-boot-3-demo-app/src/main/java/io/github/mfvanek/spring/boot3/test/config/OpenTelemetryConfig.java +++ b/spring-boot-3-demo-app/src/main/java/io/github/mfvanek/spring/boot3/test/config/OpenTelemetryConfig.java @@ -9,8 +9,8 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import javax.annotation.Nonnull; import java.util.Locale; +import javax.annotation.Nonnull; @AutoConfigureBefore(OtlpAutoConfiguration.class) @Configuration(proxyBeanMethods = false) @@ -21,9 +21,9 @@ class OpenTelemetryConfig { @ConditionalOnMissingBean(OtlpGrpcSpanExporter.class) OtlpGrpcSpanExporter otelJaegerGrpcSpanExporter(@Nonnull final OtlpProperties otlpProperties) { OtlpGrpcSpanExporterBuilder builder = OtlpGrpcSpanExporter.builder() - .setEndpoint(otlpProperties.getEndpoint()) - .setTimeout(otlpProperties.getTimeout()) - .setCompression(String.valueOf(otlpProperties.getCompression()).toLowerCase(Locale.ROOT)); + .setEndpoint(otlpProperties.getEndpoint()) + .setTimeout(otlpProperties.getTimeout()) + .setCompression(String.valueOf(otlpProperties.getCompression()).toLowerCase(Locale.ROOT)); otlpProperties.getHeaders().forEach(builder::addHeader); return builder.build(); } diff --git a/spring-boot-3-demo-app/src/main/java/io/github/mfvanek/spring/boot3/test/controllers/TimeController.java b/spring-boot-3-demo-app/src/main/java/io/github/mfvanek/spring/boot3/test/controllers/TimeController.java index 843eafe4..d12ba617 100644 --- a/spring-boot-3-demo-app/src/main/java/io/github/mfvanek/spring/boot3/test/controllers/TimeController.java +++ b/spring-boot-3-demo-app/src/main/java/io/github/mfvanek/spring/boot3/test/controllers/TimeController.java @@ -29,14 +29,14 @@ public class TimeController { public LocalDateTime getNow() { log.trace("tracer {}", tracer); final var traceId = Optional.ofNullable(tracer.currentSpan()) - .map(Span::context) - .map(TraceContext::traceId) - .orElse(null); + .map(Span::context) + .map(TraceContext::traceId) + .orElse(null); log.info("Called method getNow. TraceId = {}", traceId); final LocalDateTime now = LocalDateTime.now(clock); kafkaSendingService.sendNotification("Current time = " + now) - .thenRun(() -> log.info("Awaiting acknowledgement from Kafka")) - .get(); + .thenRun(() -> log.info("Awaiting acknowledgement from Kafka")) + .get(); return now; } } diff --git a/spring-boot-3-demo-app/src/main/java/io/github/mfvanek/spring/boot3/test/filters/TraceIdInResponseServletFilter.java b/spring-boot-3-demo-app/src/main/java/io/github/mfvanek/spring/boot3/test/filters/TraceIdInResponseServletFilter.java index 1fb33a47..4d9c5633 100644 --- a/spring-boot-3-demo-app/src/main/java/io/github/mfvanek/spring/boot3/test/filters/TraceIdInResponseServletFilter.java +++ b/spring-boot-3-demo-app/src/main/java/io/github/mfvanek/spring/boot3/test/filters/TraceIdInResponseServletFilter.java @@ -23,7 +23,7 @@ public class TraceIdInResponseServletFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) - throws IOException, ServletException { + throws IOException, ServletException { final Span currentSpan = tracer.currentSpan(); if (currentSpan != null) { HttpServletResponse resp = (HttpServletResponse) response; diff --git a/spring-boot-3-demo-app/src/main/java/io/github/mfvanek/spring/boot3/test/service/KafkaReadingService.java b/spring-boot-3-demo-app/src/main/java/io/github/mfvanek/spring/boot3/test/service/KafkaReadingService.java index dae0d1aa..1cf68a36 100644 --- a/spring-boot-3-demo-app/src/main/java/io/github/mfvanek/spring/boot3/test/service/KafkaReadingService.java +++ b/spring-boot-3-demo-app/src/main/java/io/github/mfvanek/spring/boot3/test/service/KafkaReadingService.java @@ -30,11 +30,11 @@ public void listen(ConsumerRecord message, Acknowledgment ack) { final String traceId = currentSpan != null ? currentSpan.context().traceId() : ""; log.info("Received record: {} with traceId {}", message.value(), traceId); jdbcTemplate.update("insert into otel_demo.storage(message, trace_id, created_at) values(:msg, :traceId, :createdAt);", - Map.ofEntries( - Map.entry("msg", message.value()), - Map.entry("traceId", traceId), - Map.entry("createdAt", LocalDateTime.now(clock)) - ) + Map.ofEntries( + Map.entry("msg", message.value()), + Map.entry("traceId", traceId), + Map.entry("createdAt", LocalDateTime.now(clock)) + ) ); ack.acknowledge(); } diff --git a/spring-boot-3-demo-app/src/main/java/io/github/mfvanek/spring/boot3/test/service/KafkaSendingService.java b/spring-boot-3-demo-app/src/main/java/io/github/mfvanek/spring/boot3/test/service/KafkaSendingService.java index 2daa1b92..8987f922 100644 --- a/spring-boot-3-demo-app/src/main/java/io/github/mfvanek/spring/boot3/test/service/KafkaSendingService.java +++ b/spring-boot-3-demo-app/src/main/java/io/github/mfvanek/spring/boot3/test/service/KafkaSendingService.java @@ -6,9 +6,9 @@ import org.springframework.kafka.support.SendResult; import org.springframework.stereotype.Service; -import javax.annotation.Nonnull; import java.util.UUID; import java.util.concurrent.CompletableFuture; +import javax.annotation.Nonnull; @Slf4j @Service diff --git a/spring-boot-3-demo-app/src/test/java/io/github/mfvanek/spring/boot3/test/ActuatorEndpointTest.java b/spring-boot-3-demo-app/src/test/java/io/github/mfvanek/spring/boot3/test/ActuatorEndpointTest.java index 3bc35226..e259e2b9 100644 --- a/spring-boot-3-demo-app/src/test/java/io/github/mfvanek/spring/boot3/test/ActuatorEndpointTest.java +++ b/spring-boot-3-demo-app/src/test/java/io/github/mfvanek/spring/boot3/test/ActuatorEndpointTest.java @@ -26,82 +26,82 @@ class ActuatorEndpointTest extends TestBase { @BeforeEach void setUp() { this.actuatorClient = WebTestClient.bindToServer() - .baseUrl("http://localhost:" + actuatorPort + "/actuator/") - .build(); + .baseUrl("http://localhost:" + actuatorPort + "/actuator/") + .build(); } @Test void actuatorShouldBeRunOnSeparatePort() { assertThat(actuatorPort) - .isNotEqualTo(port); + .isNotEqualTo(port); } @ParameterizedTest @CsvSource(value = { - "prometheus|jvm_threads_live_threads|text/plain", - "health|{\"status\":\"UP\",\"groups\":[\"liveness\",\"readiness\"]}|application/json", - "health/liveness|{\"status\":\"UP\"}|application/json", - "health/readiness|{\"status\":\"UP\"}|application/json", - "info|\"version\":|application/json"}, delimiter = '|') + "prometheus|jvm_threads_live_threads|text/plain", + "health|{\"status\":\"UP\",\"groups\":[\"liveness\",\"readiness\"]}|application/json", + "health/liveness|{\"status\":\"UP\"}|application/json", + "health/readiness|{\"status\":\"UP\"}|application/json", + "info|\"version\":|application/json"}, delimiter = '|') void actuatorEndpointShouldReturnOk(@Nonnull final String endpointName, @Nonnull final String expectedSubstring, @Nonnull final String mediaType) { final var result = actuatorClient.get() - .uri(uriBuilder -> uriBuilder - .path(endpointName) - .build()) - .accept(MediaType.valueOf(mediaType)) - .exchange() - .expectStatus().isOk() - .expectBody(String.class) - .returnResult() - .getResponseBody(); + .uri(uriBuilder -> uriBuilder + .path(endpointName) + .build()) + .accept(MediaType.valueOf(mediaType)) + .exchange() + .expectStatus().isOk() + .expectBody(String.class) + .returnResult() + .getResponseBody(); assertThat(result) - .contains(expectedSubstring); + .contains(expectedSubstring); } @Test void swaggerUiEndpointShouldReturnFound() { final var result = actuatorClient.get() - .uri(uriBuilder -> uriBuilder - .pathSegment("swagger-ui") - .build()) - .accept(MediaType.TEXT_HTML) - .exchange() - .expectStatus().isFound() - .expectHeader().location("/actuator/swagger-ui/index.html") - .expectBody() - .returnResult() - .getResponseBody(); + .uri(uriBuilder -> uriBuilder + .pathSegment("swagger-ui") + .build()) + .accept(MediaType.TEXT_HTML) + .exchange() + .expectStatus().isFound() + .expectHeader().location("/actuator/swagger-ui/index.html") + .expectBody() + .returnResult() + .getResponseBody(); assertThat(result).isNull(); } @Test void readinessProbeShouldBeCollectedFromApplicationMainPort() { final var result = webTestClient.get() - .uri(uriBuilder -> uriBuilder - .pathSegment("readyz") - .build()) - .accept(MediaType.APPLICATION_JSON) - .exchange() - .expectStatus().isOk() - .expectBody(String.class) - .returnResult() - .getResponseBody(); + .uri(uriBuilder -> uriBuilder + .pathSegment("readyz") + .build()) + .accept(MediaType.APPLICATION_JSON) + .exchange() + .expectStatus().isOk() + .expectBody(String.class) + .returnResult() + .getResponseBody(); assertThat(result) - .isEqualTo("{\"status\":\"UP\"}"); + .isEqualTo("{\"status\":\"UP\"}"); final String metricsResult = actuatorClient.get() - .uri(uriBuilder -> uriBuilder - .path("prometheus") - .build()) - .accept(MediaType.valueOf("text/plain")) - .exchange() - .expectStatus().isOk() - .expectBody(String.class) - .returnResult() - .getResponseBody(); + .uri(uriBuilder -> uriBuilder + .path("prometheus") + .build()) + .accept(MediaType.valueOf("text/plain")) + .exchange() + .expectStatus().isOk() + .expectBody(String.class) + .returnResult() + .getResponseBody(); assertThat(metricsResult) - .contains("http_server_requests_seconds_bucket"); + .contains("http_server_requests_seconds_bucket"); } } diff --git a/spring-boot-3-demo-app/src/test/java/io/github/mfvanek/spring/boot3/test/support/KafkaConsumerUtils.java b/spring-boot-3-demo-app/src/test/java/io/github/mfvanek/spring/boot3/test/support/KafkaConsumerUtils.java index 88d895ff..af473406 100644 --- a/spring-boot-3-demo-app/src/test/java/io/github/mfvanek/spring/boot3/test/support/KafkaConsumerUtils.java +++ b/spring-boot-3-demo-app/src/test/java/io/github/mfvanek/spring/boot3/test/support/KafkaConsumerUtils.java @@ -13,10 +13,10 @@ import org.springframework.kafka.test.utils.ContainerTestUtils; import org.springframework.kafka.test.utils.KafkaTestUtils; -import javax.annotation.Nonnull; import java.util.Map; import java.util.UUID; import java.util.concurrent.BlockingQueue; +import javax.annotation.Nonnull; @UtilityClass public class KafkaConsumerUtils { diff --git a/spring-boot-3-demo-app/src/test/java/io/github/mfvanek/spring/boot3/test/support/KafkaInitializer.java b/spring-boot-3-demo-app/src/test/java/io/github/mfvanek/spring/boot3/test/support/KafkaInitializer.java index 4302bbd9..cd7a4779 100644 --- a/spring-boot-3-demo-app/src/test/java/io/github/mfvanek/spring/boot3/test/support/KafkaInitializer.java +++ b/spring-boot-3-demo-app/src/test/java/io/github/mfvanek/spring/boot3/test/support/KafkaInitializer.java @@ -7,9 +7,9 @@ import org.testcontainers.containers.KafkaContainer; import org.testcontainers.utility.DockerImageName; -import javax.annotation.Nonnull; import java.util.Map; import java.util.stream.Collectors; +import javax.annotation.Nonnull; public class KafkaInitializer implements ApplicationContextInitializer {