package com.baiyue.audit; import com.baiyue.common.web.CommonWebAutoConfiguration; import org.junit.jupiter.api.Test; import org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration; import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration; import org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration; import org.springframework.boot.actuate.autoconfigure.health.HealthEndpointAutoConfiguration; import org.springframework.boot.actuate.health.Health; import org.springframework.boot.actuate.health.HealthIndicator; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration; import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration; import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration; import org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration; import org.springframework.boot.test.context.runner.WebApplicationContextRunner; import org.springframework.test.web.servlet.setup.MockMvcBuilders; 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; class AuditHealthEndpointTest { private final WebApplicationContextRunner context = new WebApplicationContextRunner() .withConfiguration(AutoConfigurations.of( JacksonAutoConfiguration.class, HttpMessageConvertersAutoConfiguration.class, WebMvcAutoConfiguration.class, DispatcherServletAutoConfiguration.class, EndpointAutoConfiguration.class, HealthEndpointAutoConfiguration.class, WebEndpointAutoConfiguration.class, ManagementContextAutoConfiguration.class, CommonWebAutoConfiguration.class)) .withPropertyValues("management.endpoints.web.exposure.include=health"); @Test void actuatorHealthReturnsUpInsteadOfBusinessResourceNotFound() { context.withBean("dependencyHealthIndicator", HealthIndicator.class, () -> () -> Health.up().build()) .run(application -> MockMvcBuilders.webAppContextSetup(application).build() .perform(get("/actuator/health")) .andExpect(status().isOk()) .andExpect(jsonPath("$.status").value("UP")) .andExpect(jsonPath("$.code").doesNotExist())); } @Test void failedHealthContributorReturnsDownAndServiceUnavailable() { context.withBean("dependencyHealthIndicator", HealthIndicator.class, () -> () -> Health.down().build()) .run(application -> MockMvcBuilders.webAppContextSetup(application).build() .perform(get("/actuator/health")) .andExpect(status().isServiceUnavailable()) .andExpect(jsonPath("$.status").value("DOWN")) .andExpect(jsonPath("$.code").doesNotExist())); } }