From 06c6dafee2e91fb160f097e48249a9695fc5b9a6 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 30 Nov 2022 20:32:46 -0800 Subject: [PATCH] Add Neo4jReactiveHealthIndicatorIntegrationTests Add a full integration test for `Neo4jReactiveHealthIndicator` to ensure that it works against a real server. See gh-33428 --- .../spring-boot-actuator/build.gradle | 2 + ...activeHealthIndicatorIntegrationTests.java | 79 +++++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/neo4j/Neo4jReactiveHealthIndicatorIntegrationTests.java diff --git a/spring-boot-project/spring-boot-actuator/build.gradle b/spring-boot-project/spring-boot-actuator/build.gradle index 155a42b9218f..b31492180328 100644 --- a/spring-boot-project/spring-boot-actuator/build.gradle +++ b/spring-boot-project/spring-boot-actuator/build.gradle @@ -107,6 +107,8 @@ dependencies { testImplementation("org.springframework:spring-test") testImplementation("com.squareup.okhttp3:mockwebserver") testImplementation("org.testcontainers:junit-jupiter") + testImplementation("org.testcontainers:neo4j") + testImplementation("org.testcontainers:testcontainers") testRuntimeOnly("ch.qos.logback:logback-classic") testRuntimeOnly("io.projectreactor.netty:reactor-netty-http") diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/neo4j/Neo4jReactiveHealthIndicatorIntegrationTests.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/neo4j/Neo4jReactiveHealthIndicatorIntegrationTests.java new file mode 100644 index 000000000000..44e66cc10c90 --- /dev/null +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/neo4j/Neo4jReactiveHealthIndicatorIntegrationTests.java @@ -0,0 +1,79 @@ +/* + * Copyright 2012-2022 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.actuate.neo4j; + +import java.time.Duration; + +import org.junit.jupiter.api.Test; +import org.testcontainers.containers.Neo4jContainer; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.actuate.health.Health; +import org.springframework.boot.actuate.health.Status; +import org.springframework.boot.autoconfigure.ImportAutoConfiguration; +import org.springframework.boot.autoconfigure.neo4j.Neo4jAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.testsupport.testcontainers.DockerImageNames; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.test.context.DynamicPropertyRegistry; +import org.springframework.test.context.DynamicPropertySource; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Integration tests for {@link Neo4jReactiveHealthIndicator}. + * + * @author Phillip Webb + */ +@SpringBootTest +@Testcontainers(disabledWithoutDocker = true) +public class Neo4jReactiveHealthIndicatorIntegrationTests { + + // gh-33428 + + @Container + private static final Neo4jContainer neo4jServer = new Neo4jContainer<>(DockerImageNames.neo4j()) + .withStartupAttempts(5).withStartupTimeout(Duration.ofMinutes(10)); + + @DynamicPropertySource + static void neo4jProperties(DynamicPropertyRegistry registry) { + registry.add("spring.neo4j.uri", neo4jServer::getBoltUrl); + registry.add("spring.neo4j.authentication.username", () -> "neo4j"); + registry.add("spring.neo4j.authentication.password", neo4jServer::getAdminPassword); + } + + @Autowired + private Neo4jReactiveHealthIndicator healthIndicator; + + @Test + void health() { + Health health = this.healthIndicator.getHealth(true).block(Duration.ofSeconds(5)); + assertThat(health.getStatus()).isEqualTo(Status.UP); + assertThat(health.getDetails()).containsEntry("edition", "community"); + } + + @Configuration(proxyBeanMethods = false) + @ImportAutoConfiguration(Neo4jAutoConfiguration.class) + @Import(Neo4jReactiveHealthIndicator.class) + static class TestConfiguration { + + } + +}