From a700976eb39fa849fd398ef667fd0136bf565539 Mon Sep 17 00:00:00 2001 From: Matheus Cruz Date: Wed, 25 Dec 2024 23:29:38 -0300 Subject: [PATCH] Add some validations for server configs --- .../codegen/ApicurioOpenApiServerCodegen.java | 25 ++++++++++++++++--- .../generator/deployment/CodegenTest.java | 11 ++++++++ .../doesNotExistDir.application.properties | 2 ++ 3 files changed, 34 insertions(+), 4 deletions(-) create mode 100755 server/deployment/src/test/resources/io/quarkiverse/openapi/server/generator/deployment/doesNotExistDir.application.properties diff --git a/server/deployment/src/main/java/io/quarkiverse/openapi/server/generator/deployment/codegen/ApicurioOpenApiServerCodegen.java b/server/deployment/src/main/java/io/quarkiverse/openapi/server/generator/deployment/codegen/ApicurioOpenApiServerCodegen.java index 0f2e64ca6..9ec83fcf9 100755 --- a/server/deployment/src/main/java/io/quarkiverse/openapi/server/generator/deployment/codegen/ApicurioOpenApiServerCodegen.java +++ b/server/deployment/src/main/java/io/quarkiverse/openapi/server/generator/deployment/codegen/ApicurioOpenApiServerCodegen.java @@ -46,16 +46,20 @@ private Path getInputBaseDir(final Path sourceDir, final Config config) { @Override public boolean shouldRun(Path sourceDir, Config config) { - if (config.getOptionalValue(CodegenConfig.getSpecPropertyName(), String.class).isEmpty()) { - return false; + boolean specIsPresent = config.getOptionalValue(CodegenConfig.getSpecPropertyName(), String.class).isPresent(); + if (!specIsPresent) { + log.warn("The {} property is not present, the code generation will be ignored", + CodegenConfig.getSpecPropertyName()); } - Path path = getInputBaseDir(sourceDir, config); - return Files.isDirectory(path); + return specIsPresent; } @Override public boolean trigger(CodeGenContext context) throws CodeGenException { final Path openApiDir = getInputBaseDir(context.inputDir(), context.config()); + + validateOpenApiDir(context, openApiDir); + final Path outDir = context.outDir(); final ApicurioCodegenWrapper apicurioCodegenWrapper = new ApicurioCodegenWrapper( context.config(), outDir.toFile()); @@ -92,6 +96,19 @@ public boolean trigger(CodeGenContext context) throws CodeGenException { return true; } + private static void validateOpenApiDir(CodeGenContext context, Path openApiDir) throws CodeGenException { + if (!Files.exists(openApiDir)) { + throw new CodeGenException( + "The OpenAPI input base directory does not exist, please, create the directory on " + context.inputDir()); + } + + if (Files.isDirectory(openApiDir)) { + throw new CodeGenException( + "The OpenAPI input base directory is not a directory, please, create the directory on " + + context.inputDir()); + } + } + private File convertToJSON(Path yamlPath) throws CodeGenException { try { ObjectMapper yamlReader = new ObjectMapper(new YAMLFactory()); diff --git a/server/deployment/src/test/java/io/quarkiverse/openapi/server/generator/deployment/CodegenTest.java b/server/deployment/src/test/java/io/quarkiverse/openapi/server/generator/deployment/CodegenTest.java index b642475d1..25101698f 100755 --- a/server/deployment/src/test/java/io/quarkiverse/openapi/server/generator/deployment/CodegenTest.java +++ b/server/deployment/src/test/java/io/quarkiverse/openapi/server/generator/deployment/CodegenTest.java @@ -9,6 +9,7 @@ import org.apache.commons.io.FileUtils; import org.eclipse.microprofile.config.Config; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; @@ -60,4 +61,14 @@ public void testInputDir() throws CodeGenException { Path.of("target/generated-test-sources/inputDir/io/petstore/PetResource.java"))); } + @Test + public void shouldGenerateAnErrorWhenInputDirIsNotExist() throws CodeGenException { + Config config = MockConfigUtils.getTestConfig("doesNotExistDir.application.properties"); + CodeGenContext codeGenContext = new CodeGenContext(null, Path.of(OUT_DIR, "inputDir"), WORK_DIR, + INPUT_DIR, false, config, true); + ApicurioOpenApiServerCodegen apicurioOpenApiServerCodegen = new ApicurioOpenApiServerCodegen(); + + Assertions.assertThrows(CodeGenException.class, () -> apicurioOpenApiServerCodegen.trigger(codeGenContext)); + } + } diff --git a/server/deployment/src/test/resources/io/quarkiverse/openapi/server/generator/deployment/doesNotExistDir.application.properties b/server/deployment/src/test/resources/io/quarkiverse/openapi/server/generator/deployment/doesNotExistDir.application.properties new file mode 100755 index 000000000..a0c722e68 --- /dev/null +++ b/server/deployment/src/test/resources/io/quarkiverse/openapi/server/generator/deployment/doesNotExistDir.application.properties @@ -0,0 +1,2 @@ +quarkus.openapi.generator.spec=petstore-openapi-2.json +quarkus.openapi.generator.base-package=io.petstore \ No newline at end of file