diff --git a/extensions/smallrye-health/deployment/src/main/java/io/quarkus/smallrye/health/deployment/DeprecatedHealthBuildTimeConfig.java b/extensions/smallrye-health/deployment/src/main/java/io/quarkus/smallrye/health/deployment/DeprecatedHealthBuildTimeConfig.java new file mode 100644 index 0000000000000..8b3473ec9a5f0 --- /dev/null +++ b/extensions/smallrye-health/deployment/src/main/java/io/quarkus/smallrye/health/deployment/DeprecatedHealthBuildTimeConfig.java @@ -0,0 +1,34 @@ +package io.quarkus.smallrye.health.deployment; + +import io.quarkus.runtime.annotations.ConfigItem; +import io.quarkus.runtime.annotations.ConfigRoot; + +/** + * This class is deprecated, don't add any more properties here. + * + * When dropping this class please make the properties in {@link SmallRyeHealthBuildTimeConfig} non optional. + * + * @deprecated Use {@link SmallRyeHealthBuildTimeConfig} instead. + */ +@ConfigRoot(name = "health") +@Deprecated(since = "3.14", forRemoval = true) +public class DeprecatedHealthBuildTimeConfig { + + /** + * Whether extensions published health check should be enabled. + * + * @deprecated Use {@code quarkus.smallrye-health.extensions.enabled} instead. + */ + @ConfigItem(name = "extensions.enabled", defaultValue = "true") + @Deprecated(since = "3.14", forRemoval = true) + public boolean extensionsEnabled; + + /** + * Whether to include the Liveness and Readiness Health endpoints in the generated OpenAPI document + * + * @deprecated Use {@code quarkus.smallrye-health.openapi.included} instead. + */ + @ConfigItem(name = "openapi.included", defaultValue = "false") + @Deprecated(since = "3.14", forRemoval = true) + public boolean openapiIncluded; +} diff --git a/extensions/smallrye-health/deployment/src/main/java/io/quarkus/smallrye/health/deployment/SmallRyeHealthActive.java b/extensions/smallrye-health/deployment/src/main/java/io/quarkus/smallrye/health/deployment/SmallRyeHealthActive.java index 5eaac369674ec..c5fe90ce7e69a 100644 --- a/extensions/smallrye-health/deployment/src/main/java/io/quarkus/smallrye/health/deployment/SmallRyeHealthActive.java +++ b/extensions/smallrye-health/deployment/src/main/java/io/quarkus/smallrye/health/deployment/SmallRyeHealthActive.java @@ -4,9 +4,9 @@ public class SmallRyeHealthActive implements BooleanSupplier { - private final HealthBuildTimeConfig config; + private final SmallRyeHealthBuildTimeConfig config; - SmallRyeHealthActive(HealthBuildTimeConfig config) { + SmallRyeHealthActive(SmallRyeHealthBuildTimeConfig config) { this.config = config; } diff --git a/extensions/smallrye-health/deployment/src/main/java/io/quarkus/smallrye/health/deployment/HealthBuildTimeConfig.java b/extensions/smallrye-health/deployment/src/main/java/io/quarkus/smallrye/health/deployment/SmallRyeHealthBuildTimeConfig.java similarity index 60% rename from extensions/smallrye-health/deployment/src/main/java/io/quarkus/smallrye/health/deployment/HealthBuildTimeConfig.java rename to extensions/smallrye-health/deployment/src/main/java/io/quarkus/smallrye/health/deployment/SmallRyeHealthBuildTimeConfig.java index 1cca5c30fe8c2..29ceda99da53e 100644 --- a/extensions/smallrye-health/deployment/src/main/java/io/quarkus/smallrye/health/deployment/HealthBuildTimeConfig.java +++ b/extensions/smallrye-health/deployment/src/main/java/io/quarkus/smallrye/health/deployment/SmallRyeHealthBuildTimeConfig.java @@ -1,10 +1,12 @@ package io.quarkus.smallrye.health.deployment; +import java.util.Optional; + import io.quarkus.runtime.annotations.ConfigItem; import io.quarkus.runtime.annotations.ConfigRoot; -@ConfigRoot(name = "health") -public class HealthBuildTimeConfig { +@ConfigRoot(name = "smallrye-health") +public class SmallRyeHealthBuildTimeConfig { /** * Activate or disable this extension. Disabling this extension means that no health related information is exposed. */ @@ -14,12 +16,12 @@ public class HealthBuildTimeConfig { /** * Whether extensions published health check should be enabled. */ - @ConfigItem(name = "extensions.enabled", defaultValue = "true") - public boolean extensionsEnabled; + @ConfigItem(name = "extensions.enabled", defaultValueDocumentation = "true") + public Optional extensionsEnabled; /** * Whether to include the Liveness and Readiness Health endpoints in the generated OpenAPI document */ - @ConfigItem(name = "openapi.included", defaultValue = "false") - public boolean openapiIncluded; + @ConfigItem(name = "openapi.included", defaultValueDocumentation = "false") + public Optional openapiIncluded; } diff --git a/extensions/smallrye-health/deployment/src/main/java/io/quarkus/smallrye/health/deployment/SmallRyeHealthProcessor.java b/extensions/smallrye-health/deployment/src/main/java/io/quarkus/smallrye/health/deployment/SmallRyeHealthProcessor.java index e95a7d4e1b511..05c6c701b509f 100644 --- a/extensions/smallrye-health/deployment/src/main/java/io/quarkus/smallrye/health/deployment/SmallRyeHealthProcessor.java +++ b/extensions/smallrye-health/deployment/src/main/java/io/quarkus/smallrye/health/deployment/SmallRyeHealthProcessor.java @@ -118,15 +118,14 @@ class SmallRyeHealthProcessor { "key-files"); static class OpenAPIIncluded implements BooleanSupplier { - HealthBuildTimeConfig config; + SmallRyeHealthBuildTimeConfig smallryeHealthBuildTimeConfig; + DeprecatedHealthBuildTimeConfig deprecatedHealthBuildTimeConfig; public boolean getAsBoolean() { - return config.openapiIncluded; + return smallryeHealthBuildTimeConfig.openapiIncluded.orElse(deprecatedHealthBuildTimeConfig.openapiIncluded); } } - HealthBuildTimeConfig config; - @BuildStep List brandingFiles() { return Stream.of(BRANDING_LOGO_GENERAL, @@ -140,8 +139,11 @@ List brandingFiles() { @BuildStep void healthCheck(BuildProducer buildItemBuildProducer, - List healthBuildItems) { - boolean extensionsEnabled = config.extensionsEnabled && + List healthBuildItems, + SmallRyeHealthBuildTimeConfig smallryeHealthBuildTimeConfig, + DeprecatedHealthBuildTimeConfig deprecatedHealthBuildTimeConfig) { + boolean extensionsEnabled = smallryeHealthBuildTimeConfig.extensionsEnabled + .orElse(deprecatedHealthBuildTimeConfig.extensionsEnabled) && !ConfigProvider.getConfig().getOptionalValue("mp.health.disable-default-procedures", boolean.class) .orElse(false); if (extensionsEnabled) { diff --git a/extensions/smallrye-health/deployment/src/test/java/io/quarkus/smallrye/health/test/DeactiveHealthWithConfigTest.java b/extensions/smallrye-health/deployment/src/test/java/io/quarkus/smallrye/health/test/DeactiveHealthWithConfigTest.java index a655c4e928a65..001b7903305c3 100644 --- a/extensions/smallrye-health/deployment/src/test/java/io/quarkus/smallrye/health/test/DeactiveHealthWithConfigTest.java +++ b/extensions/smallrye-health/deployment/src/test/java/io/quarkus/smallrye/health/test/DeactiveHealthWithConfigTest.java @@ -15,7 +15,7 @@ class DeactiveHealthWithConfigTest { .withApplicationRoot((jar) -> jar .addClasses(BasicHealthCheck.class) .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml")) - .overrideConfigKey("quarkus.health.enabled", "false"); + .overrideConfigKey("quarkus.smallrye-health.enabled", "false"); @Test void testAdditionalJsonPropertyInclusions() { diff --git a/extensions/smallrye-health/deployment/src/test/java/io/quarkus/smallrye/health/test/DeprecatedHealthOpenAPITest.java b/extensions/smallrye-health/deployment/src/test/java/io/quarkus/smallrye/health/test/DeprecatedHealthOpenAPITest.java new file mode 100644 index 0000000000000..f7c85bd175e98 --- /dev/null +++ b/extensions/smallrye-health/deployment/src/test/java/io/quarkus/smallrye/health/test/DeprecatedHealthOpenAPITest.java @@ -0,0 +1,40 @@ +package io.quarkus.smallrye.health.test; + +import org.hamcrest.Matchers; +import org.jboss.shrinkwrap.api.asset.EmptyAsset; +import org.jboss.shrinkwrap.api.asset.StringAsset; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; + +import io.quarkus.test.QuarkusUnitTest; +import io.restassured.RestAssured; + +@Deprecated(since = "3.14", forRemoval = true) +class DeprecatedHealthOpenAPITest { + + private static final String OPEN_API_PATH = "/q/openapi"; + + @RegisterExtension + static final QuarkusUnitTest config = new QuarkusUnitTest() + .withApplicationRoot((jar) -> jar + .addClasses(BasicHealthCheck.class, OpenApiRoute.class) + .addAsResource(new StringAsset("quarkus.health.openapi.included=true\n" + + "quarkus.smallrye-openapi.store-schema-directory=target"), "application.properties") + .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml")); + + @Test + void testOpenApiPathAccessResource() { + + RestAssured.given().header("Accept", "application/json") + .when().get(OPEN_API_PATH) + .then() + .header("Content-Type", "application/json;charset=UTF-8") + .body("paths", Matchers.hasKey("/q/health/ready")) + .body("paths", Matchers.hasKey("/q/health/live")) + .body("paths", Matchers.hasKey("/q/health/started")) + .body("paths", Matchers.hasKey("/q/health")) + .body("components.schemas.HealthCheckResponse.type", Matchers.equalTo("object")); + + } + +} diff --git a/extensions/smallrye-health/deployment/src/test/java/io/quarkus/smallrye/health/test/HealthOpenAPITest.java b/extensions/smallrye-health/deployment/src/test/java/io/quarkus/smallrye/health/test/HealthOpenAPITest.java index b0b33b1ccc189..96697dc0e9c5e 100644 --- a/extensions/smallrye-health/deployment/src/test/java/io/quarkus/smallrye/health/test/HealthOpenAPITest.java +++ b/extensions/smallrye-health/deployment/src/test/java/io/quarkus/smallrye/health/test/HealthOpenAPITest.java @@ -17,7 +17,7 @@ class HealthOpenAPITest { static final QuarkusUnitTest config = new QuarkusUnitTest() .withApplicationRoot((jar) -> jar .addClasses(BasicHealthCheck.class, OpenApiRoute.class) - .addAsResource(new StringAsset("quarkus.health.openapi.included=true\n" + .addAsResource(new StringAsset("quarkus.smallrye-health.openapi.included=true\n" + "quarkus.smallrye-openapi.store-schema-directory=target"), "application.properties") .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml"));