From f5f382c87a048276fbcdafb1ea849664646c131d Mon Sep 17 00:00:00 2001 From: William Cheng Date: Fri, 19 May 2023 09:45:43 +0800 Subject: [PATCH] Improve build time (#15566) * remove java helidon client, server tests (covered in sample tests) * add new workflow to test java helidon samples * trigger build * test jdk 17 only * Revert "trigger build" This reverts commit b9528a65889577ea1adba6c1dbafc6b623a55555. --- .../java-helidon-functional-tests.yaml | 48 --- .github/workflows/samples-java-helidon.yaml | 41 ++ .../JavaHelidonMpClientCodegenTest.java | 114 ------ .../JavaHelidonMpServerCodegenTest.java | 252 ------------ .../JavaHelidonSeClientCodegenTest.java | 144 ------- .../JavaHelidonSeServerCodegenTest.java | 305 --------------- .../helidon/functional/FunctionalBase.java | 361 ------------------ .../FunctionalHelidonClientBase.java | 83 ---- .../FunctionalHelidonMPClientTest.java | 29 -- .../FunctionalHelidonMPServerTest.java | 97 ----- .../FunctionalHelidonSEClientTest.java | 40 -- .../FunctionalHelidonSeServerTest.java | 80 ---- 12 files changed, 41 insertions(+), 1553 deletions(-) delete mode 100644 .github/workflows/java-helidon-functional-tests.yaml create mode 100644 .github/workflows/samples-java-helidon.yaml delete mode 100644 modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/JavaHelidonMpClientCodegenTest.java delete mode 100644 modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/JavaHelidonMpServerCodegenTest.java delete mode 100644 modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/JavaHelidonSeClientCodegenTest.java delete mode 100644 modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/JavaHelidonSeServerCodegenTest.java delete mode 100644 modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/functional/FunctionalBase.java delete mode 100644 modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/functional/FunctionalHelidonClientBase.java delete mode 100644 modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/functional/FunctionalHelidonMPClientTest.java delete mode 100644 modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/functional/FunctionalHelidonMPServerTest.java delete mode 100644 modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/functional/FunctionalHelidonSEClientTest.java delete mode 100644 modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/functional/FunctionalHelidonSeServerTest.java diff --git a/.github/workflows/java-helidon-functional-tests.yaml b/.github/workflows/java-helidon-functional-tests.yaml deleted file mode 100644 index a57bf72503c8..000000000000 --- a/.github/workflows/java-helidon-functional-tests.yaml +++ /dev/null @@ -1,48 +0,0 @@ -name: Java Helidon Functional tests - -on: - push: - paths: - - modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/** - pull_request: - paths: - - modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/** - -jobs: - build: - name: Java Helidon Functional tests - runs-on: ubuntu-latest - strategy: - matrix: - java-version: [11, 17] - steps: - - uses: actions/checkout@v3 - - name: Set up JDK - uses: actions/setup-java@v3 - with: - java-version: ${{ matrix.java-version }} - distribution: 'temurin' - - name: Cache maven dependencies - uses: actions/cache@v3 - env: - cache-name: cache-maven-repository - with: - path: | - ~/.m2/repository - ~/.gradle - !~/.gradle/caches/*/plugin-resolution/ - !~/.m2/repository/org/openapitools/ - key: ${{ runner.os }}-test-${{ env.cache-name }}-${{ hashFiles('**/pom.xml') }} - restore-keys: | - ${{ runner.os }}-build-${{ env.cache-name }}- - ${{ runner.os }}-build- - - name: Run unit tests - run: cd modules/openapi-generator && mvn --no-snapshot-updates --batch-mode -Dtest="**/functional/*Test" test -Dorg.slf4j.simpleLogger.defaultLogLevel=error - env: - GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY }} - - name: Publish unit test reports - if: ${{ always() }} - uses: actions/upload-artifact@v3 - with: - name: surefire-test-results - path: '**/surefire-reports/TEST-*.xml' diff --git a/.github/workflows/samples-java-helidon.yaml b/.github/workflows/samples-java-helidon.yaml new file mode 100644 index 000000000000..1bdc5b4ae5eb --- /dev/null +++ b/.github/workflows/samples-java-helidon.yaml @@ -0,0 +1,41 @@ +name: Samples Java Helidon + +on: + push: + paths: + - samples/client/petstore/java-helidon-client/** + - samples/server/petstore/java-helidon-server/** + pull_request: + paths: + - samples/client/petstore/java-helidon-client/** + - samples/server/petstore/java-helidon-server/** +jobs: + build: + name: Build Java Helidon + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + sample: + - samples/client/petstore/java-helidon-client/mp + - samples/client/petstore/java-helidon-client/se + - samples/server/petstore/java-helidon-server/mp + - samples/server/petstore/java-helidon-server/se + version: [17] + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: ${{ matrix.version }} + - name: Cache maven dependencies + uses: actions/cache@v3 + env: + cache-name: maven-repository + with: + path: | + ~/.m2 + key: ${{ runner.os }}-${{ github.job }}-${{ env.cache-name }}-${{ hashFiles('**/pom.xml') }} + - name: Build + working-directory: ${{ matrix.sample }} + run: mvn clean package diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/JavaHelidonMpClientCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/JavaHelidonMpClientCodegenTest.java deleted file mode 100644 index 3cecbf9b6053..000000000000 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/JavaHelidonMpClientCodegenTest.java +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright 2022 OpenAPI-Generator Contributors (https://openapi-generator.tech) - * Copyright (c) 2022 Oracle and/or its affiliates - * - * 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.openapitools.codegen.java.helidon; - -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Paths; -import java.util.List; - -import org.openapitools.codegen.ClientOptInput; -import org.openapitools.codegen.DefaultGenerator; -import org.openapitools.codegen.TestUtils; -import org.openapitools.codegen.config.CodegenConfigurator; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; - -import static org.openapitools.codegen.java.assertions.JavaFileAssert.assertThat; - -public class JavaHelidonMpClientCodegenTest { - - private String outputPath; - private List generatedFiles; - - @BeforeClass - public void setup() throws IOException { - File output = Files.createTempDirectory("test").toFile(); - output.deleteOnExit(); - outputPath = output.getAbsolutePath().replace('\\', '/'); - - System.out.println("Generating java-helidon-client MP project in " + outputPath); - - final CodegenConfigurator configurator = new CodegenConfigurator() - .setGeneratorName("java-helidon-client") - .setLibrary("mp") - .setInputSpec("src/test/resources/3_0/helidon/petstore-no-multipart-for-testing.yaml") - .setOutputDir(outputPath); - - final ClientOptInput clientOptInput = configurator.toClientOptInput(); - DefaultGenerator generator = new DefaultGenerator(); - generator.opts(clientOptInput); - generatedFiles = generator.generate(); - } - - @Test - public void testPom() { - TestUtils.ensureContainsFile(generatedFiles, new File(outputPath), "pom.xml"); - } - - @Test - public void testPetApi() { - assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/client/api/PetApi.java")) - .assertMethod("addPet", "Pet") - .toFileAssert() - .assertMethod("deletePet", "Long", "String", "Long", "String", "Integer", - "List", "List") - .toFileAssert() - .assertMethod("findPetsByStatus", "List") - .toFileAssert() - .assertMethod("findPetsByTags", "List") - .toFileAssert() - .assertMethod("getPetById", "Long") - .toFileAssert() - .assertMethod("updatePet", "Pet") - .toFileAssert() - .assertMethod("updatePetWithForm", "Long", "String", "String") - .toFileAssert(); - } - - @Test - public void testStoreApi() { - assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/client/api/StoreApi.java")) - .assertMethod("deleteOrder", "String") - .toFileAssert() - .assertMethod("getInventory") - .toFileAssert() - .assertMethod("getOrderById", "BigDecimal") - .toFileAssert() - .assertMethod("placeOrder", "Order") - .toFileAssert(); - } - - @Test - public void testUserApi() { - assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/client/api/UserApi.java")) - .assertMethod("createUser", "User") - .toFileAssert() - .assertMethod("createUsersWithArrayInput", "List") - .toFileAssert() - .assertMethod("createUsersWithListInput", "List") - .toFileAssert() - .assertMethod("getUserByName", "String") - .toFileAssert() - .assertMethod("loginUser", "String", "String", "String", "Long", "BigDecimal") - .toFileAssert() - .assertMethod("updateUser", "String", "User") - .toFileAssert(); - } -} diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/JavaHelidonMpServerCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/JavaHelidonMpServerCodegenTest.java deleted file mode 100644 index 312d2f9d8558..000000000000 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/JavaHelidonMpServerCodegenTest.java +++ /dev/null @@ -1,252 +0,0 @@ -/* - * Copyright 2022 OpenAPI-Generator Contributors (https://openapi-generator.tech) - * Copyright (c) 2022 Oracle and/or its affiliates - * - * 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.openapitools.codegen.java.helidon; - -import org.openapitools.codegen.DefaultGenerator; -import org.openapitools.codegen.TestUtils; -import org.openapitools.codegen.config.CodegenConfigurator; -import org.openapitools.codegen.java.assertions.JavaFileAssert; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; - -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Paths; -import java.util.Objects; -import java.util.concurrent.CompletableFuture; - -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.MatcherAssert.assertThat; - -import static org.openapitools.codegen.CodegenConstants.SERIALIZATION_LIBRARY; - -public class JavaHelidonMpServerCodegenTest { - - private DefaultGenerator generator; - private String outputPath; - private String apiPackage; - private String modelPackage; - - @BeforeMethod - public void setup() throws IOException { - File output = Files.createTempDirectory("test").toFile(); - output.deleteOnExit(); - outputPath = output.getAbsolutePath().replace('\\', '/'); - apiPackage = outputPath + "/src/main/java/org/openapitools/server/api"; - modelPackage = outputPath + "/src/main/java/org/openapitools/server/model"; - generator = new DefaultGenerator(); - } - - private CodegenConfigurator createConfigurator() { - return new CodegenConfigurator() - .setGeneratorName("java-helidon-server") - .setLibrary("mp") - .setInputSpec("src/test/resources/3_0/helidon/petstore-for-testing.yaml") - .setOutputDir(outputPath); - } - - private void generate(CodegenConfigurator config) { - generator.opts(config.toClientOptInput()); - generator.setGenerateMetadata(false); - generator.generate(); - } - - private void generate() { - generate(createConfigurator()); - } - - @Test - public void testRestApiFilesOnly() { - generate(createConfigurator().addAdditionalProperty("fullProject", "false")); - - JavaFileAssert.assertThat(Paths.get(apiPackage + "/PetService.java")) - .fileContains("public interface PetService"); - - File outputFile = Paths.get(outputPath).toFile(); - assertThat(Objects.requireNonNull(outputFile.listFiles()).length, is(1)); - } - - @Test - public void testJackson() { - generate(createConfigurator().addAdditionalProperty(SERIALIZATION_LIBRARY, "jackson")); - - JavaFileAssert.assertThat(Paths.get(modelPackage + "/Color.java")) - .fileContains("com.fasterxml.jackson.annotation.JsonCreator") - .fileContains("com.fasterxml.jackson.annotation.JsonValue"); - } - - @Test - public void testJsonb() { - generate(createConfigurator().addAdditionalProperty(SERIALIZATION_LIBRARY, "jsonb")); - - JavaFileAssert.assertThat(Paths.get(modelPackage + "/Color.java")) - .fileContains(".json.bind.annotation.JsonbCreator"); - } - - @Test - public void testAbstractClass() { - generate(createConfigurator().addAdditionalProperty("useAbstractClass", "true")); - - JavaFileAssert.assertThat(Paths.get(apiPackage + "/PetService.java")) - .fileContains("public abstract class PetService") - .assertMethod("addPet", "Pet") - .doesNotHaveImplementation(); - - JavaFileAssert.assertThat(Paths.get(apiPackage + "/StoreService.java")) - .fileContains("public abstract class StoreService") - .assertMethod("placeOrder", "Order") - .doesNotHaveImplementation() - .hasReturnType("Order"); - - JavaFileAssert.assertThat(Paths.get(apiPackage + "/StoreServiceImpl.java")) - .fileContains("public class StoreServiceImpl extends StoreService") - .assertMethod("placeOrder", "Order") - .hasReturnType("Order") - .bodyContainsLines("Order result = null; // Replace with correct business logic.", "return result;"); - } - - @Test - public void testFullProject() { - generate(createConfigurator().addAdditionalProperty("fullProject", "true")); - - JavaFileAssert.assertThat(Paths.get(apiPackage + "/PetService.java")) - .fileContains("public interface PetService") - .assertMethod("addPet", "Pet"); - - JavaFileAssert.assertThat(Paths.get(apiPackage + "/StoreService.java")) - .fileContains("public interface StoreService") - .assertMethod("placeOrder", "Order") - .hasReturnType("Order"); - } - - @Test - public void validatePetApi() { - generate(); - - JavaFileAssert.assertThat(Paths.get(apiPackage + "/PetService.java")) - .fileContains("org.openapitools.server.model.Pet") - .assertMethod("addPet", "Pet") - .toFileAssert() - .assertMethod("addPets", "String", "InputStream", "InputStream", "List", "List", "Integer") - .toFileAssert() - .assertMethod("deletePet", "Long", "String", "Long", "String", "Integer", "List", "List") - .toFileAssert() - .assertMethod("findPetsByStatus", "List") - .toFileAssert() - .assertMethod("findPetsByTags", "List") - .toFileAssert() - .assertMethod("getPetById", "Long") - .toFileAssert() - .assertMethod("updatePet", "Pet") - .toFileAssert() - .assertMethod("updatePetWithForm", "Long", "String", "String") - .toFileAssert() - .assertMethod("uploadFile", "Long", "Long", "String", "InputStream"); - } - - @Test - public void validateStoreApi() { - generate(); - - JavaFileAssert.assertThat(Paths.get(apiPackage + "/StoreService.java")) - .fileContains("org.openapitools.server.model.Order") - .assertMethod("deleteOrder", "String") - .toFileAssert() - .assertMethod("getInventory") - .toFileAssert() - .assertMethod("getOrderById", "BigDecimal") - .toFileAssert() - .assertMethod("placeOrder", "Order"); - } - - @Test - public void validateUserApi() { - generate(); - - JavaFileAssert.assertThat(Paths.get(apiPackage + "/UserService.java")) - .fileContains("org.openapitools.server.model.User") - .assertMethod("createUser", "User") - .toFileAssert() - .assertMethod("createUsersWithArrayInput", "List") - .toFileAssert() - .assertMethod("createUsersWithListInput", "List") - .toFileAssert() - .assertMethod("deleteUser", "String") - .toFileAssert() - .assertMethod("getUserByName", "String") - .toFileAssert() - .assertMethod("loginUser", "String", "String", "String", "Long", "BigDecimal") - .toFileAssert() - .assertMethod("logoutUser") - .toFileAssert() - .assertMethod("updateUser", "String", "User"); - } - - @Test - public void testGenerateGradleProject() { - generate(createConfigurator().addAdditionalProperty("gradleProject", "true")); - - assertThat(Paths.get(outputPath + "/build.gradle").toFile().exists(), is(true)); - assertThat(Paths.get(outputPath + "/settings.gradle").toFile().exists(), is(true)); - TestUtils.assertFileNotExists(Paths.get(outputPath + "/pom.xml")); - } - - @Test - public void testReturnResponse() { - generate(createConfigurator().addAdditionalProperty("returnResponse", "true")); - - JavaFileAssert.assertThat(Paths.get(apiPackage + "/PetService.java")) - .fileContains("public interface PetService") - .assertMethod("addPet", "Pet") - .hasReturnType("Response"); - JavaFileAssert.assertThat(Paths.get(apiPackage + "/PetService.java")) - .fileContains("public interface PetService") - .assertMethod("deletePet", "Long", "String", "Long", "String", "Integer", "List", "List") - .hasReturnType("Response"); - - JavaFileAssert.assertThat(Paths.get(apiPackage + "/PetServiceImpl.java")) - .fileContains("public class PetServiceImpl implements PetService") - .assertMethod("addPet", "Pet") - .hasReturnType("Response") - .bodyContainsLines("return Response.ok(/* Pass Pet entity payload */).build(); " - + "// Replace with correct business logic."); - } - - @Test - public void testSupportAsync() { - generate(createConfigurator().addAdditionalProperty("supportAsync", "true")); - - JavaFileAssert.assertThat(Paths.get(apiPackage + "/PetService.java")) - .fileContains("public interface PetService") - .assertMethod("addPet", "Pet") - .hasReturnType("CompletionStage"); - JavaFileAssert.assertThat(Paths.get(apiPackage + "/PetService.java")) - .fileContains("public interface PetService") - .assertMethod("deletePet", "Long", "String", "Long", "String", "Integer", "List", "List") - .hasReturnType("CompletionStage"); - - JavaFileAssert.assertThat(Paths.get(apiPackage + "/PetServiceImpl.java")) - .fileContains("public class PetServiceImpl implements PetService") - .assertMethod("addPet", "Pet") - .hasReturnType("CompletionStage") - .bodyContainsLines("Pet result = null; // Replace with correct business logic.", - "return CompletableFuture.supplyAsync(() -> result);"); - } - -} \ No newline at end of file diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/JavaHelidonSeClientCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/JavaHelidonSeClientCodegenTest.java deleted file mode 100644 index 526176260b0d..000000000000 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/JavaHelidonSeClientCodegenTest.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright 2022, 2023 OpenAPI-Generator Contributors (https://openapi-generator.tech) - * Copyright (c) 2022, 2023 Oracle and/or its affiliates - * - * 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.openapitools.codegen.java.helidon; - -import org.openapitools.codegen.ClientOptInput; -import org.openapitools.codegen.DefaultGenerator; -import org.openapitools.codegen.TestUtils; -import org.openapitools.codegen.config.CodegenConfigurator; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.DataProvider; -import org.testng.annotations.Test; - -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Paths; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static org.openapitools.codegen.TestUtils.assertFileContains; -import static org.openapitools.codegen.java.assertions.JavaFileAssert.assertThat; - -public class JavaHelidonSeClientCodegenTest { - - private String outputPath; - private List generatedFiles; - private DefaultGenerator generator; - - @BeforeMethod - public void setup() throws IOException { - File output = Files.createTempDirectory("test").toFile(); - output.deleteOnExit(); - outputPath = output.getAbsolutePath().replace('\\', '/'); - - System.out.println("Generating java-helidon-client SE project in " + outputPath); - - final CodegenConfigurator configurator = codegenConfigurator(new HashMap<>()); - final ClientOptInput clientOptInput = configurator.toClientOptInput(); - generator = new DefaultGenerator(); - generator.opts(clientOptInput); - } - - private CodegenConfigurator codegenConfigurator(Map additionalProperties) { - return new CodegenConfigurator() - .setGeneratorName("java-helidon-client") - .setLibrary("se") - .setAdditionalProperties(additionalProperties) - .setInputSpec("src/test/resources/3_0/helidon/petstore-no-multipart-for-testing.yaml") - .setOutputDir(outputPath); - } - - @DataProvider(name = "fileSuffix") - public Object[][] fileSuffixes() { - return new Object[][] { - {""}, - {"Impl"} - }; - } - - @Test - public void testPom() { - generatedFiles = generator.generate(); - TestUtils.ensureContainsFile(generatedFiles, new File(outputPath), "pom.xml"); - } - - @Test(dataProvider = "fileSuffix") - public void testPetApi(String fileSuffix) { - generatedFiles = generator.generate(); - assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/client/api/PetApi" + fileSuffix + ".java")) - .assertMethod("addPet", "Pet") - .toFileAssert() - .assertMethod("deletePet", "Long", "String", "Long", "String", "Integer", - "List", "List") - .toFileAssert() - .assertMethod("findPetsByStatus", "List") - .toFileAssert() - .assertMethod("findPetsByTags", "List") - .toFileAssert() - .assertMethod("getPetById", "Long") - .toFileAssert() - .assertMethod("updatePet", "Pet") - .toFileAssert() - .assertMethod("updatePetWithForm", "Long", "String", "String") - .toFileAssert(); - } - - @Test(dataProvider = "fileSuffix") - public void testStoreApi(String fileSuffix) { - generatedFiles = generator.generate(); - assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/client/api/StoreApi" + fileSuffix + ".java")) - .assertMethod("deleteOrder", "String") - .toFileAssert() - .assertMethod("getInventory") - .toFileAssert() - .assertMethod("getOrderById", "BigDecimal") - .toFileAssert() - .assertMethod("placeOrder", "Order") - .toFileAssert(); - } - - @Test(dataProvider = "fileSuffix") - public void testUserApi(String fileSuffix) { - generatedFiles = generator.generate(); - assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/client/api/UserApi" + fileSuffix + ".java")) - .assertMethod("createUser", "User") - .toFileAssert() - .assertMethod("createUsersWithArrayInput", "List") - .toFileAssert() - .assertMethod("createUsersWithListInput", "List") - .toFileAssert() - .assertMethod("getUserByName", "String") - .toFileAssert() - .assertMethod("loginUser", "String", "String", "String", "Long", "BigDecimal") - .toFileAssert() - .assertMethod("updateUser", "String", "User") - .toFileAssert(); - } - - @Test - public void testJsonbSupport() { - Map additionalProperties = new HashMap<>(); - additionalProperties.put("serializationLibrary", "jsonb"); - final CodegenConfigurator configurator = codegenConfigurator(additionalProperties); - generator.opts(configurator.toClientOptInput()).generate(); - assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/client/ApiClient.java")) - .fileContains("JsonbSupport.create(JsonbBuilder.create(jsonbConfig))"); - assertFileContains(Paths.get(outputPath ,"pom.xml"), "helidon-media-jsonb"); - } -} diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/JavaHelidonSeServerCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/JavaHelidonSeServerCodegenTest.java deleted file mode 100644 index 0e415b838693..000000000000 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/JavaHelidonSeServerCodegenTest.java +++ /dev/null @@ -1,305 +0,0 @@ -/* - * Copyright 2022 OpenAPI-Generator Contributors (https://openapi-generator.tech) - * Copyright (c) 2022 Oracle and/or its affiliates - * - * 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.openapitools.codegen.java.helidon; - -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Paths; -import java.util.HashMap; -import java.util.Map; - -import org.openapitools.codegen.ClientOptInput; -import org.openapitools.codegen.DefaultGenerator; -import org.openapitools.codegen.Generator; -import org.openapitools.codegen.TestUtils; -import org.openapitools.codegen.config.CodegenConfigurator; -import org.openapitools.codegen.java.assertions.JavaFileAssert; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; - -import static org.testng.Assert.assertTrue; - -public class JavaHelidonSeServerCodegenTest { - - private DefaultGenerator generator; - private String outputPath; - - @BeforeMethod - public void setup() throws IOException { - File output = Files.createTempDirectory("test").toFile(); - output.deleteOnExit(); - outputPath = output.getAbsolutePath().replace('\\', '/'); - - final CodegenConfigurator configurator = codegenConfigurator(new HashMap<>()); - - final ClientOptInput clientOptInput = configurator.toClientOptInput(); - generator = new DefaultGenerator(); - generator.opts(clientOptInput); - } - - private CodegenConfigurator codegenConfigurator(Map additionalProperties) { - return new CodegenConfigurator() - .setGeneratorName("java-helidon-server") - .setLibrary("se") - .setAdditionalProperties(additionalProperties) - .setInputSpec("src/test/resources/3_0/helidon/petstore-for-testing.yaml") - .setOutputDir(outputPath); - } - - - @Test - public void testGenerateFullProject() { - generator.generate(); - - JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/server/api/PetServiceImpl.java")) - .fileContains( - "public class PetServiceImpl", - "response.status(HTTP_CODE_NOT_IMPLEMENTED).send();" - ); - JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/server/Main.java")) - .fileContains( - "import org.openapitools.server.api.PetServiceImpl;", - ".register(\"/\", new PetServiceImpl())" - ); - } - - @Test - public void testGenerateProjectByDefault() { - generator.generate(); - - JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/server/api/PetService.java")) - .fileContains( - "public interface PetService extends Service {", - "default void update(Routing.Rules rules) {", - "void addPet(ServerRequest request, ServerResponse response, Pet pet);", - "void deletePet(ServerRequest request, ServerResponse response);" - ); - TestUtils.assertFileNotExists(Paths.get(outputPath + "/build.gradle")); - TestUtils.assertFileNotExists(Paths.get(outputPath + "/settings.gradle")); - } - - @Test - public void testGenerateGradleProject() { - Map additionalProperties = new HashMap<>(); - additionalProperties.put("gradleProject", true); - final CodegenConfigurator configurator = codegenConfigurator(additionalProperties); - generator.opts(configurator.toClientOptInput()).generate(); - - assertTrue(Paths.get(outputPath + "/build.gradle").toFile().exists()); - assertTrue(Paths.get(outputPath + "/settings.gradle").toFile().exists()); - TestUtils.assertFileNotExists(Paths.get(outputPath + "/pom.xml")); - } - - @Test - public void testGeneratePathParams() throws IOException { - Map additionalProperties = new HashMap<>(); - additionalProperties.put("useAbstractClass", true); - final CodegenConfigurator configurator = codegenConfigurator(additionalProperties); - generator.opts(configurator.toClientOptInput()).generate(); - - JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/server/api/PetService.java")) - .assertMethod("deletePet", "ServerRequest", "ServerResponse") - .bodyContainsLines( - "Long petId = Optional.ofNullable(request.path().param(\"petId\")).map(Long::valueOf).orElse" + - "(null);", - "ValidatorUtils.checkNonNull(petId);" - ) - .toFileAssert() - .assertMethod("getPetById") - .bodyContainsLines( - "Long petId = Optional.ofNullable(request.path().param(\"petId\")).map(Long::valueOf).orElse" + - "(null);", - "ValidatorUtils.checkNonNull(petId);" - ); - } - - @Test - public void testGenerateQueryParams() throws IOException { - Map additionalProperties = new HashMap<>(); - additionalProperties.put("useAbstractClass", true); - final CodegenConfigurator configurator = codegenConfigurator(additionalProperties); - generator.opts(configurator.toClientOptInput()).generate(); - - JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/server/api/PetService.java")) - .fileContains("import java.util.List;") - .assertMethod("findPetsByTags") - .bodyContainsLines( - "List tags = Optional.ofNullable(request.queryParams().toMap().get(\"tags\"))" + - ".orElse(null);", - "ValidatorUtils.checkNonNull(tags);" - ) - .toFileAssert() - .assertMethod("findPetsByStatus") - .bodyContainsLines( - "List status = Optional.ofNullable(request.queryParams().toMap().get(\"status\")).orElse" + - "(null);", - "ValidatorUtils.checkNonNull(status);" - ); - } - - @Test - public void testGenerateBodyParams() throws IOException { - Map additionalProperties = new HashMap<>(); - additionalProperties.put("useAbstractClass", true); - final CodegenConfigurator configurator = codegenConfigurator(additionalProperties); - generator.opts(configurator.toClientOptInput()).generate(); - - JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/server/api/PetService.java")) - .assertMethod("update") - .bodyContainsLines( - "rules.post(\"/pet\", Handler.create(Pet.class, this::addPet));", - "rules.put(\"/pet\", Handler.create(Pet.class, this::updatePet));" - ) - .toFileAssert() - .assertMethod("addPet", "ServerRequest", "ServerResponse", "Pet") - .bodyContainsLines( - "ValidatorUtils.checkNonNull(pet);", - "handleAddPet(request, response, pet);" - ) - .toFileAssert() - .assertMethod("updatePet", "ServerRequest", "ServerResponse", "Pet") - .bodyContainsLines( - "ValidatorUtils.checkNonNull(pet);", - "handleUpdatePet(request, response, pet);" - ); - - JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/server/api/UserService.java")) - .assertMethod("update") - .bodyContainsLines( - "rules.post(\"/user\", Handler.create(User.class, this::createUser));", - "rules.post(\"/user/createWithArray\", this::createUsersWithArrayInput);", - "rules.post(\"/user/createWithList\", this::createUsersWithListInput);", - "rules.put(\"/user/{username}\", Handler.create(User.class, this::updateUser));" - ) - .toFileAssert() - .assertMethod("createUser", "ServerRequest", "ServerResponse", "User") - .bodyContainsLines( - "ValidatorUtils.checkNonNull(user);", - "handleCreateUser(request, response, user);" - ) - .toFileAssert() - .assertMethod("createUsersWithArrayInput", "ServerRequest", "ServerResponse") - .bodyContainsLines( - "Single.create(request.content().as(new GenericType>() { }))", - ".thenAccept(user -> {", - "ValidatorUtils.checkNonNull(user);", - "handleCreateUsersWithArrayInput(request, response, user);", - ".exceptionally(throwable -> handleError(request, response, throwable));" - ); - } - - @Test - public void testGenerateHeaderParams() throws IOException { - Map additionalProperties = new HashMap<>(); - additionalProperties.put("useAbstractClass", true); - final CodegenConfigurator configurator = codegenConfigurator(additionalProperties); - generator.opts(configurator.toClientOptInput()).generate(); - - JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/server/api/PetService.java")) - .assertMethod("deletePet", "ServerRequest", "ServerResponse") - .bodyContainsLines( - "String apiKey = request.headers().value(\"api_key\").orElse(null);", - "Long headerLong = request.headers().value(\"headerLong\").map(Long::valueOf).orElse(null);", - "ValidatorUtils.checkNonNull(headerLong);" - ); - } - - @Test - public void testGenerateCookiesParams() throws IOException { - Map additionalProperties = new HashMap<>(); - additionalProperties.put("useAbstractClass", true); - final CodegenConfigurator configurator = codegenConfigurator(additionalProperties); - generator.opts(configurator.toClientOptInput()).generate(); - - JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/server/api/PetService.java")) - .assertMethod("deletePet", "ServerRequest", "ServerResponse") - .bodyContainsLines( - "String cookieString = request.headers().cookies().toMap().getOrDefault(\"cookieString\", List.of" + - "()).stream().findFirst().orElse(null);", - "ValidatorUtils.checkNonNull(cookieString);", - "Integer cookieInt = request.headers().cookies().toMap().getOrDefault(\"cookieInt\", List.of())" + - ".stream().findFirst().map(Integer::valueOf).orElse(null);", - "List cookieIntArray = Optional.ofNullable(request.headers().cookies().toMap().get" + - "(\"cookieIntArray\")).orElse(null);", - "List cookieStringArray = Optional.ofNullable(request.headers().cookies().toMap().get" + - "(\"cookieStringArray\")).orElse(null);" - ); - } - - @Test - public void testGenerateFormParams() throws IOException { - Map additionalProperties = new HashMap<>(); - additionalProperties.put("useAbstractClass", true); - final CodegenConfigurator configurator = codegenConfigurator(additionalProperties); - generator.opts(configurator.toClientOptInput()).generate(); - - JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/server/api/PetService.java")) - .assertMethod("addPets", "ServerRequest", "ServerResponse") - .bodyContainsLines( - "Map> nonFileFormContent = new HashMap<>();", - "Map> fileFormContent = new HashMap<>();", - " Single formSingle = request.content().asStream(ReadableBodyPart.class)", - "if (\"images[]\".equals(name)) {", - "processFileFormField(name, fileFormContent, part);", - "if (\"image\".equals(name)) {", - "if (\"titles[]\".equals(name)) {", - "processNonFileFormField(name, nonFileFormContent, part);", - "if (\"longArray\".equals(name)) {", - "if (\"stringParam\".equals(name)) {", - "if (\"intParam\".equals(name)) {", - "List images = Optional.ofNullable(fileFormContent.get(\"images[]\")).orElse(null);", - "InputStream image = Optional.ofNullable(fileFormContent.get(\"image\")).flatMap(list->list" + - ".stream().findFirst()).orElse(null);", - "List titles = Optional.ofNullable(nonFileFormContent.get(\"titles[]\")).orElse(null);", - "List longArray = Optional.ofNullable(nonFileFormContent.get(\"longArray\")).orElse(null);", - "Integer intParam = Optional.ofNullable(nonFileFormContent.get(\"intParam\")).flatMap(list->list" + - ".stream().findFirst()).map(Integer::valueOf).orElse(null);" - ); - } - - @Test - public void testGenerateParamsValidation() throws IOException { - Map additionalProperties = new HashMap<>(); - additionalProperties.put("useAbstractClass", true); - final CodegenConfigurator configurator = codegenConfigurator(additionalProperties); - generator.opts(configurator.toClientOptInput()).generate(); - - JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/server/api/PetService.java")) - .assertMethod("findPetsByStatus") - .bodyContainsLines( - "ValidatorUtils.checkNonNull(status);", - "List status = Optional.ofNullable(request.queryParams().toMap().get(\"status\")).orElse" + - "(null);" - ) - .toFileAssert() - .assertMethod("findPetsByTags") - .bodyContainsLines( - "List tags = Optional.ofNullable(request.queryParams().toMap().get(\"tags\")).orElse" + - "(null);", - "ValidatorUtils.checkNonNull(tags);" - ); - - JavaFileAssert.assertThat(Paths.get(outputPath + "/src/main/java/org/openapitools/server/api/UserService.java")) - .assertMethod("loginUser") - .bodyContainsLines( - "ValidatorUtils.validatePattern(username, \"^[a-zA-Z0-9]+[a-zA-Z0-9\\\\" + - ".\\\\-_]*[a-zA-Z0-9]+$\");", - "" - ); - } -} diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/functional/FunctionalBase.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/functional/FunctionalBase.java deleted file mode 100644 index 15c858f43521..000000000000 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/functional/FunctionalBase.java +++ /dev/null @@ -1,361 +0,0 @@ -/* - * Copyright 2022 OpenAPI-Generator Contributors (https://openapi-generator.tech) - * Copyright (c) 2022 Oracle and/or its affiliates - * - * 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.openapitools.codegen.java.helidon.functional; - -import java.io.BufferedReader; -import java.io.File; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.UncheckedIOException; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.AbstractMap; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.concurrent.TimeUnit; -import java.util.logging.Level; -import java.util.logging.Logger; -import java.util.stream.Collectors; - -import org.openapitools.codegen.DefaultGenerator; -import org.openapitools.codegen.config.CodegenConfigurator; -import org.openapitools.codegen.languages.JavaHelidonCommonCodegen; -import org.testng.SkipException; - -import static java.util.Objects.requireNonNull; -import static org.hamcrest.CoreMatchers.containsString; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.MatcherAssert.assertThat; - -abstract class FunctionalBase { - - private static final Logger LOGGER = Logger.getLogger(FunctionalBase.class.getName()); - - private static final String MAVEN_SHIM_TARGET = "libexec/bin/mvn"; - private static final String MAVEN_HOME_VAR = "MAVEN_HOME"; - private static final String MVN_HOME_VAR = "MVN_HOME"; - private static final String PATH_VAR = "PATH"; - private static final String MAVEN_BINARY_NAME; - private static final boolean IS_WINDOWS_OS; - private static final List> DEFAULT_HELIDON_VERSIONS_FOR_JAVA_VERSIONS = new ArrayList<>(); - - protected static final String FULL_PROJECT = "fullProject"; - protected static final String USE_ABSTRACT_CLASS = "useAbstractClass"; - - static { - /* - The inferred Helidon version for tests is from the entry for which the Java major version does not exceed - the current runtime Java major version. - - For example, for Java 8 or 9 or 11: 2.5.3. For Java 13 or later: 3.0.1. - */ - DEFAULT_HELIDON_VERSIONS_FOR_JAVA_VERSIONS.add(new AbstractMap.SimpleEntry<>(11, "2.5.3")); - DEFAULT_HELIDON_VERSIONS_FOR_JAVA_VERSIONS.add(new AbstractMap.SimpleEntry<>(13, "3.0.1")); - } - - private String library; - private String generatorName; - private String inputSpec; - protected Path outputPath; - - private Path mvn; - - static { - IS_WINDOWS_OS = System.getProperty("os.name", "unknown") - .toLowerCase(Locale.ENGLISH) - .contains("win"); - MAVEN_BINARY_NAME = IS_WINDOWS_OS ? "mvn.cmd" : "mvn"; - } - - protected CodegenConfigurator createConfigurator() { - try { - return createConfigurator(Files.createTempDirectory("test")); - } catch (IOException e) { - throw new UncheckedIOException("Can not create temp directory", e); - } - } - - protected CodegenConfigurator createConfigurator(Path outputPath) { - Objects.requireNonNull(inputSpec); - this.outputPath = outputPath; - String sanitizedPath = outputPath.toFile() - .getAbsolutePath() - .replace('\\', '/'); - return new CodegenConfigurator() - .setGeneratorName(generatorName) - .setLibrary(library) - .setInputSpec(inputSpec) - .setOutputDir(sanitizedPath); - - } - - protected void generate(CodegenConfigurator config) { - String helidonVersionToUse = chooseHelidonVersion(config); - enforceJavaVersion(helidonVersionToUse); - DefaultGenerator generator = new DefaultGenerator(); - generator.opts(config.toClientOptInput()); - generator.generate(); - } - - protected void generate() { - generate(createConfigurator()); - } - - protected void generate(String inputSpec) { - inputSpec(inputSpec); - generate(createConfigurator()); - } - - protected void generatorName(String generatorName) { - this.generatorName = generatorName; - } - - protected void library(String library) { - this.library = library; - } - - protected void inputSpec(String inputSpec) { - this.inputSpec = inputSpec; - } - - /** - * Run maven command with provided arguments. - * - * @param args maven command arguments - * @return a {@link ProcessReader} - */ - protected ProcessReader runMavenProcess(String... args) { - return runMavenProcess(outputPath.toFile(), args); - } - - /** - * Run maven command and causes the current thread to wait for {@link Process} to terminate. - * - * @param args maven command arguments - * @return a {@link ProcessReader} - */ - protected ProcessReader runMavenProcessAndWait(String... args) { - ProcessReader process = runMavenProcess(args); - process.waitFor(10, TimeUnit.MINUTES); - return process; - } - - /** - * Run maven command in the provided directory. - * - * @param directory from where the command is executed - * @param args maven command arguments - * @return a {@link ProcessReader} - */ - protected ProcessReader runMavenProcess(File directory, String... args) { - List command = new ArrayList<>(Collections.singleton(mavenExecutable())); - Collections.addAll(command, args); - try { - Process process = new ProcessBuilder() - .directory(directory) - .command(command) - .start(); - return new ProcessReader(process); - } catch (IOException e) { - throw new UncheckedIOException(e); - } - } - - /** - * Finds the {@code mvn} executable. Searches using the following, in order: - *
    - *
  1. The {@code MAVEN_HOME} environment variable
  2. - *
  3. The {@code MVN_HOME} environment variable
  4. - *
  5. The {@code PATH} environment variable
  6. - *
- * - * @return The path. - */ - public String mavenExecutable() { - if (mvn == null) { - Path maven; - Optional path = findExecutableInPath(); - if (path.isPresent()) { - maven = path.get(); - } else { - maven = toMavenExecutable(MAVEN_HOME_VAR); - if (maven == null) { - maven = toMavenExecutable(MVN_HOME_VAR); - } - } - try { - assumeTrue( "Maven not found, test is skipped", maven != null); - maven = maven.toRealPath(); - Path shimmed = maven.getParent().getParent().resolve(MAVEN_SHIM_TARGET); - if (Files.exists(shimmed)) { - maven = shimmed; - } - mvn = maven.toRealPath(); - } catch (IOException ex) { - throw new IllegalStateException(ex.getMessage()); - } - } - return mvn.toString(); - } - - private String chooseHelidonVersion(CodegenConfigurator config) { - Map unprocessedAdditionalProperties = config.toContext() - .getGeneratorSettings() - .getAdditionalProperties(); - if (unprocessedAdditionalProperties.containsKey(JavaHelidonCommonCodegen.HELIDON_VERSION)) { - return unprocessedAdditionalProperties.get(JavaHelidonCommonCodegen.HELIDON_VERSION).toString(); - } - String result = inferredHelidonVersion(); - config.addAdditionalProperty(JavaHelidonCommonCodegen.HELIDON_VERSION, result); - return result; - } - - private void enforceJavaVersion(String helidonVersionToUse) { - int currentJavaVersion = getCurrentJavaMajorVersion(); - int requiredJavaVersion = getRequiredJavaVersion(helidonVersionToUse); - String errorJavaVersion = String.format(Locale.ROOT, "Java version must be %s, test is skipped", requiredJavaVersion); - assumeTrue(errorJavaVersion, currentJavaVersion == requiredJavaVersion); - } - - private int getRequiredJavaVersion(String helidonVersionToUse) { - return helidonVersionToUse - .startsWith("3.") ? 17 : 11; - } - - private int getCurrentJavaMajorVersion() { - String[] versionElements = System.getProperty("java.version").split("\\."); - int firstElement = Integer.parseInt(versionElements[0]); - if (firstElement == 1) { - return Integer.parseInt(versionElements[1]); - } else { - return firstElement; - } - } - - private String inferredHelidonVersion() { - int javaMajorVersion = getCurrentJavaMajorVersion(); - String result = null; - for (Map.Entry javaToHelidonVersionMapping : DEFAULT_HELIDON_VERSIONS_FOR_JAVA_VERSIONS) { - if (javaToHelidonVersionMapping.getKey() <= javaMajorVersion) { - result = javaToHelidonVersionMapping.getValue(); - } - } - if (result == null) { - String message = String.format(Locale.ROOT, "Unable to infer Helidon version from current Java major version %d using mapping %s", - javaMajorVersion, DEFAULT_HELIDON_VERSIONS_FOR_JAVA_VERSIONS); - LOGGER.log(Level.WARNING, message); - throw new SkipException(message); - } - return result; - } - - /** - * Find an executable in the {@code PATH} environment variable, if present. - * - * @return The path. - */ - private Optional findExecutableInPath() { - return Arrays.stream(requireNonNull(System.getenv(PATH_VAR)).split(File.pathSeparator)) - .map(Paths::get) - .map(path -> path.resolve(FunctionalBase.MAVEN_BINARY_NAME)) - .filter(Files::isExecutable) - .findFirst(); - } - - private Path toMavenExecutable(String mavenHomeEnvVar) { - Path mavenHome = envVarPath(mavenHomeEnvVar); - if (mavenHome != null) { - if (Files.isDirectory(mavenHome)) { - Path executable = mavenHome.resolve("bin").resolve(MAVEN_BINARY_NAME); - if (Files.exists(executable) && (IS_WINDOWS_OS || Files.isExecutable(executable))) { - return executable; - } - } - } - return null; - } - - private static Path envVarPath(String var) { - final String path = System.getenv(var); - return path == null ? null : Paths.get(path); - } - - /** - * Allow junit to skip test without throwing an exception and report tests as failed. - * - * @param message warning message - * @param condition to be checked - */ - protected static void assumeTrue(String message, boolean condition) { - if (!condition) { - LOGGER.log(Level.WARNING, message); - throw new SkipException(message); - } - } - - /** - * Convenience method to build project using Maven and verify test output. - * - * @param jarPath path to expected jar file - */ - protected void buildAndVerify(String jarPath) { - ProcessReader reader = runMavenProcessAndWait("package"); - Path executableJar = outputPath.resolve(jarPath); - String output = reader.readOutputConsole(); - assertThat(output, containsString("BUILD SUCCESS")); - assertThat(output, containsString("Errors: 0")); - assertThat(output, containsString("Failures: 0")); - assertThat(output, containsString("Skipped: 0")); - assertThat(Files.exists(executableJar), is(true)); - } - - /** - * {@link Process} wrapper to read I/O Stream. - */ - static class ProcessReader { - - private final Process process; - private final BufferedReader consoleReader; - - ProcessReader(Process process) { - this.process = process; - this.consoleReader = new BufferedReader(new InputStreamReader(process.getInputStream(), StandardCharsets.UTF_8)); - } - - public String readOutputConsole() { - return consoleReader.lines().collect(Collectors.joining("\n")); - } - - @SuppressWarnings("UnusedReturnValue") - public boolean waitFor(long timeout, TimeUnit unit) { - try { - return process.waitFor(timeout, unit); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - } - } -} diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/functional/FunctionalHelidonClientBase.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/functional/FunctionalHelidonClientBase.java deleted file mode 100644 index ca7bf989b1b4..000000000000 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/functional/FunctionalHelidonClientBase.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright 2022 OpenAPI-Generator Contributors (https://openapi-generator.tech) - * Copyright (c) 2022 Oracle and/or its affiliates. - * - * 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 - * - * http://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.openapitools.codegen.java.helidon.functional; - -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; - -import java.nio.file.Files; -import java.nio.file.Path; - -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.CoreMatchers.not; -import static org.hamcrest.MatcherAssert.assertThat; - -public class FunctionalHelidonClientBase extends FunctionalBase { - - @BeforeClass - public void setup() { - generatorName("java-helidon-client"); - } - - @Test - void buildPetstore() { - generate("src/test/resources/3_0/petstore.yaml"); - buildAndVerify("target/openapi-java-client.jar"); - } - - @Test - void buildPetstoreWithFakeEndpoints() { - generate("src/test/resources/3_0/petstore-with-fake-endpoints-models-for-testing.yaml"); - buildAndVerify("target/openapi-java-client.jar"); - } - - @Test - void buildPetstoreNoMultipart() { - generate("src/test/resources/3_0/helidon/petstore-no-multipart-for-testing.yaml"); - buildAndVerify("target/openapi-java-client.jar"); - } - - @Test - void verifyFullProjectSemantics() { - inputSpec("src/test/resources/3_0/petstore.yaml"); - - // Generate project for first time and record pom's timestamp - generate(createConfigurator()); - buildAndVerify("target/openapi-java-client.jar"); - Path pom1 = outputPath.resolve("pom.xml"); - assertThat(Files.exists(pom1), is(true)); - long lastModified = pom1.toFile().lastModified(); - - // Re-generate project over same directory with fullProject unspecified - generate(createConfigurator(outputPath)); - Path pom2 = outputPath.resolve("pom.xml"); - assertThat(Files.exists(pom2), is(true)); - assertThat(pom2.toFile().lastModified(), is(lastModified)); // not overwritten - - // Re-generate project over same directory with fullProject false - generate(createConfigurator(outputPath).addAdditionalProperty(FULL_PROJECT, "false")); - Path pom3 = outputPath.resolve("pom.xml"); - assertThat(Files.exists(pom3), is(true)); - assertThat(pom3.toFile().lastModified(), is(lastModified)); // not overwritten - - // Re-generate project over same directory with fullProject true - generate(createConfigurator(outputPath).addAdditionalProperty(FULL_PROJECT, "true")); - Path pom4 = outputPath.resolve("pom.xml"); - assertThat(Files.exists(pom4), is(true)); - assertThat(pom4.toFile().lastModified(), is(not(lastModified))); // overwritten - } -} diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/functional/FunctionalHelidonMPClientTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/functional/FunctionalHelidonMPClientTest.java deleted file mode 100644 index 7c2aa9435560..000000000000 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/functional/FunctionalHelidonMPClientTest.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2022 OpenAPI-Generator Contributors (https://openapi-generator.tech) - * Copyright (c) 2022 Oracle and/or its affiliates - * - * 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.openapitools.codegen.java.helidon.functional; - -import org.testng.annotations.BeforeClass; - -public class FunctionalHelidonMPClientTest extends FunctionalHelidonClientBase { - - @BeforeClass - public void setup() { - library("mp"); - generatorName("java-helidon-client"); - } -} diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/functional/FunctionalHelidonMPServerTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/functional/FunctionalHelidonMPServerTest.java deleted file mode 100644 index ca19e93f7a39..000000000000 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/functional/FunctionalHelidonMPServerTest.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright 2022 OpenAPI-Generator Contributors (https://openapi-generator.tech) - * Copyright (c) 2022 Oracle and/or its affiliates - * - * 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.openapitools.codegen.java.helidon.functional; - -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; - -import java.nio.file.Files; -import java.nio.file.Path; - -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.CoreMatchers.not; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.openapitools.codegen.CodegenConstants.SERIALIZATION_LIBRARY; - -public class FunctionalHelidonMPServerTest extends FunctionalBase { - - @BeforeClass - public void setup() { - library("mp"); - generatorName("java-helidon-server"); - inputSpec("src/test/resources/3_0/helidon/petstore-for-testing.yaml"); - } - - @Test - void buildProjectDefaultOptions() { - generate(); - buildAndVerify("target/openapi-java-server.jar"); - } - - @Test - void buildProjectAbstractClasses() { - generate(createConfigurator().addAdditionalProperty(USE_ABSTRACT_CLASS, "true")); - buildAndVerify("target/openapi-java-server.jar"); - } - - @Test - void buildFullProject() { - generate(createConfigurator().addAdditionalProperty(FULL_PROJECT, "true")); - buildAndVerify("target/openapi-java-server.jar"); - } - - @Test - void verifyFullProjectSemantics() { - // Generate project for first time and record pom's timestamp - generate(createConfigurator()); - buildAndVerify("target/openapi-java-server.jar"); - Path pom1 = outputPath.resolve("pom.xml"); - assertThat(Files.exists(pom1), is(true)); - long lastModified = pom1.toFile().lastModified(); - - // Re-generate project over same directory with fullProject unspecified - generate(createConfigurator(outputPath)); - Path pom2 = outputPath.resolve("pom.xml"); - assertThat(Files.exists(pom2), is(true)); - assertThat(pom2.toFile().lastModified(), is(lastModified)); // not overwritten - - // Re-generate project over same directory with fullProject false - generate(createConfigurator(outputPath).addAdditionalProperty(FULL_PROJECT, "false")); - Path pom3 = outputPath.resolve("pom.xml"); - assertThat(Files.exists(pom3), is(true)); - assertThat(pom3.toFile().lastModified(), is(lastModified)); // not overwritten - - // Re-generate project over same directory with fullProject true - generate(createConfigurator(outputPath).addAdditionalProperty(FULL_PROJECT, "true")); - Path pom4 = outputPath.resolve("pom.xml"); - assertThat(Files.exists(pom4), is(true)); - assertThat(pom4.toFile().lastModified(), is(not(lastModified))); // overwritten - } - - @Test - void buildJsonbProject() { - generate(createConfigurator().addAdditionalProperty(SERIALIZATION_LIBRARY, "jsonb")); - buildAndVerify("target/openapi-java-server.jar"); - } - - @Test - void buildJacksonProject() { - generate(createConfigurator().addAdditionalProperty(SERIALIZATION_LIBRARY, "jackson")); - buildAndVerify("target/openapi-java-server.jar"); - } -} diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/functional/FunctionalHelidonSEClientTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/functional/FunctionalHelidonSEClientTest.java deleted file mode 100644 index 8ba98c144d53..000000000000 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/functional/FunctionalHelidonSEClientTest.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright 2022, 2023 OpenAPI-Generator Contributors (https://openapi-generator.tech) - * Copyright (c) 2022, 2023 Oracle and/or its affiliates - * - * 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.openapitools.codegen.java.helidon.functional; - - -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; - -import static org.openapitools.codegen.CodegenConstants.SERIALIZATION_LIBRARY; - -public class FunctionalHelidonSEClientTest extends FunctionalHelidonClientBase { - - @BeforeClass - public void setup() { - library("se"); - generatorName("java-helidon-client"); - } - - @Test - void buildJsonbProject() { - inputSpec("src/test/resources/3_0/petstore.yaml"); - generate(createConfigurator().addAdditionalProperty(SERIALIZATION_LIBRARY, "jsonb")); - buildAndVerify("target/openapi-java-client.jar"); - } -} diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/functional/FunctionalHelidonSeServerTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/functional/FunctionalHelidonSeServerTest.java deleted file mode 100644 index 020c44257d61..000000000000 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/helidon/functional/FunctionalHelidonSeServerTest.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright 2022 OpenAPI-Generator Contributors (https://openapi-generator.tech) - * Copyright (c) 2022 Oracle and/or its affiliates - * - * 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.openapitools.codegen.java.helidon.functional; - -import java.nio.file.Files; -import java.nio.file.Path; - -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; - -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.CoreMatchers.not; -import static org.hamcrest.MatcherAssert.assertThat; - -public class FunctionalHelidonSeServerTest extends FunctionalBase { - - @BeforeClass - public void setup() { - library("se"); - generatorName("java-helidon-server"); - } - - @Test - void buildPetstoreWithDefaultOptions() { - generate("src/test/resources/3_0/petstore.yaml"); - buildAndVerify("target/openapi-java-server.jar"); - } - - @Test - void buildPetstoreWithAbstractClasses() { - inputSpec("src/test/resources/3_0/petstore.yaml"); - generate(createConfigurator().addAdditionalProperty(FunctionalBase.USE_ABSTRACT_CLASS, "true")); - buildAndVerify("target/openapi-java-server.jar"); - } - - @Test - void verifyFullProject() { - inputSpec("src/test/resources/3_0/petstore.yaml"); - - // Generate project for first time and record pom's timestamp - generate(createConfigurator()); - buildAndVerify("target/openapi-java-server.jar"); - Path pom1 = outputPath.resolve("pom.xml"); - assertThat(Files.exists(pom1), is(true)); - long lastModified = pom1.toFile().lastModified(); - - // Re-generate project over same directory with fullProject unspecified - generate(createConfigurator(outputPath)); - Path pom2 = outputPath.resolve("pom.xml"); - assertThat(Files.exists(pom2), is(true)); - assertThat(pom2.toFile().lastModified(), is(lastModified)); // not overwritten - - // Re-generate project over same directory with fullProject false - generate(createConfigurator(outputPath).addAdditionalProperty(FULL_PROJECT, "false")); - Path pom3 = outputPath.resolve("pom.xml"); - assertThat(Files.exists(pom3), is(true)); - assertThat(pom3.toFile().lastModified(), is(lastModified)); // not overwritten - - // Re-generate project over same directory with fullProject true - generate(createConfigurator(outputPath).addAdditionalProperty(FULL_PROJECT, "true")); - Path pom4 = outputPath.resolve("pom.xml"); - assertThat(Files.exists(pom4), is(true)); - assertThat(pom4.toFile().lastModified(), is(not(lastModified))); // overwritten - } -}