This is an automated email from the ASF dual-hosted git repository.

treblereel pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-tools.git


The following commit(s) were added to refs/heads/main by this push:
     new cbb6fe1c000 [NO_ISSUE] restore kn-plugin quarkus tests (#3096)
cbb6fe1c000 is described below

commit cbb6fe1c000cba3cd0291155838a9540c66f19e4
Author: Dmitrii Tikhomirov <[email protected]>
AuthorDate: Wed Apr 30 14:23:49 2025 -0700

    [NO_ISSUE] restore kn-plugin quarkus tests (#3096)
---
 .../e2e-tests/quarkus_build_test.go                | 156 +++++++++++++++++
 .../e2e-tests/quarkus_convert_test.go              | 194 +++++++++++++++++++++
 .../e2e-tests/quarkus_create_test.go               | 168 ++++++++++++++++++
 .../e2e-tests/quarkus_run_test.go                  | 129 ++++++++++++++
 4 files changed, 647 insertions(+)

diff --git a/packages/kn-plugin-workflow/e2e-tests/quarkus_build_test.go 
b/packages/kn-plugin-workflow/e2e-tests/quarkus_build_test.go
new file mode 100644
index 00000000000..2b8e9af4122
--- /dev/null
+++ b/packages/kn-plugin-workflow/e2e-tests/quarkus_build_test.go
@@ -0,0 +1,156 @@
+//go:build e2e_tests
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 e2e_tests
+
+import (
+       "fmt"
+       "os"
+       "os/exec"
+       "path/filepath"
+       "testing"
+
+       "github.com/stretchr/testify/require"
+
+       
"github.com/apache/incubator-kie-tools/packages/kn-plugin-workflow/pkg/command/quarkus"
+)
+
+var cfgTestInputPrepareQuarkusCreateBuild = CfgTestInputQuarkusCreate{
+       input: quarkus.CreateQuarkusProjectConfig{
+               ProjectName: "new-project",
+       },
+}
+
+type CfgTestInputQuarkusBuild struct {
+       input quarkus.BuildCmdConfig
+}
+
+var cfgTestInputQuarkusBuild_Success = []CfgTestInputQuarkusBuild{
+       {input: quarkus.BuildCmdConfig{
+               Image: "dev.local/my-project",
+       }},
+       {input: quarkus.BuildCmdConfig{
+               Image:      "my-user/my-project:1.0.0",
+               Repository: "other-user",
+               Tag:        "1.0.1",
+       }},
+       {input: quarkus.BuildCmdConfig{
+               Image: "dev.local/my-project",
+               Jib:   true,
+       }},
+       //{input: quarkus.BuildCmdConfig{
+       //      Image:     "dev.local/my-project",
+       //      JibPodman: true,
+       //}},
+       // {input: quarkus.BuildCmdConfig{
+       //      Image: "dev.local/my-project",
+       //      Jib:   true,
+       //      Push:  true,
+       // }},
+       // {input: quarkus.BuildCmdConfig{
+       //      Image: "dev.local/my-project",
+       //      Push:  true,
+       // }},
+}
+
+func transformQuarkusBuildCmdCfgToArgs(cfg quarkus.BuildCmdConfig) []string {
+       args := []string{"build"}
+       if cfg.Image != "" {
+               args = append(args, "--image", cfg.Image)
+       }
+       if cfg.ImageName != "" {
+               args = append(args, "--image-name", cfg.ImageName)
+       }
+       if cfg.Registry != "" {
+               args = append(args, "--image-registry", cfg.Registry)
+       }
+       if cfg.Repository != "" {
+               args = append(args, "--image-repository", cfg.Repository)
+       }
+       if cfg.Tag != "" {
+               args = append(args, "--image-tag", cfg.Tag)
+       }
+       if cfg.Jib == true {
+               args = append(args, "--jib")
+       }
+       if cfg.JibPodman == true {
+               args = append(args, "--jib-podman")
+       }
+       if cfg.Push == true {
+               args = append(args, "--push")
+       }
+       if cfg.Test == true {
+               args = append(args, "--test")
+       }
+       return args
+}
+
+func TestQuarkusBuildCommand(t *testing.T) {
+       for testIndex, test := range cfgTestInputQuarkusBuild_Success {
+               t.Run(fmt.Sprintf("Test build project success index: %d", 
testIndex), func(t *testing.T) {
+                       defer CleanUpAndChdirTemp(t)
+                       RunQuarkusBuildTest(t, 
cfgTestInputPrepareQuarkusCreateBuild, test, true)
+               })
+       }
+}
+
+func RunQuarkusBuildTest(t *testing.T, cfgTestInputQuarkusCreate 
CfgTestInputQuarkusCreate, test CfgTestInputQuarkusBuild, cleanUp bool) string {
+       var err error
+
+       // Create the project
+       projectName := RunQuarkusCreateTest(t, cfgTestInputQuarkusCreate)
+       projectDir := filepath.Join(TempTestsPath, projectName)
+
+       err = os.Chdir(projectDir)
+       require.NoErrorf(t, err, "Expected nil error, got %v", err)
+       WriteMavenConfigFileWithTailDirs(projectDir)
+
+       // Run `quarkus build` command
+       args := transformQuarkusBuildCmdCfgToArgs(test.input)
+       _, err = ExecuteKnWorkflowQuarkus(args...)
+       require.NoErrorf(t, err, "Expected nil error, got %v", err)
+
+       require.FileExists(t, filepath.Join("target", "kubernetes", 
"knative.yml"))
+
+       // Clean up images from docker and podman
+       if cleanUp {
+               CleanUpDockerPodman(t, test)
+       }
+
+       return projectName
+}
+
+func CleanUpDockerPodman(t *testing.T, test CfgTestInputQuarkusBuild) {
+       var err error
+       expectedImageName := ExpectedImageName(test.input)
+       var removeCmd *exec.Cmd
+       if test.input.JibPodman {
+               // Remove built image from podman
+               removeCmd = exec.Command("podman", "image", "rm", 
expectedImageName) // podman only takes `rm` for removing images
+       } else {
+               // Remove built image from docker
+               removeCmd = exec.Command("docker", "image", "rm", 
expectedImageName) // docker takes both `rm` and `remove` for removing images
+       }
+       t.Log("Removing image:", removeCmd.Args)
+       out, err := removeCmd.Output()
+       fmt.Print(string(out))
+       require.NoErrorf(t, err, "Error when removing image: %s. Expected nil 
error, got %v", expectedImageName, err)
+}
diff --git a/packages/kn-plugin-workflow/e2e-tests/quarkus_convert_test.go 
b/packages/kn-plugin-workflow/e2e-tests/quarkus_convert_test.go
new file mode 100644
index 00000000000..0c5e317ca9e
--- /dev/null
+++ b/packages/kn-plugin-workflow/e2e-tests/quarkus_convert_test.go
@@ -0,0 +1,194 @@
+//go:build e2e_tests
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 e2e_tests
+
+import (
+       "fmt"
+       "os"
+       "path/filepath"
+       "testing"
+
+       "github.com/stretchr/testify/require"
+
+       
"github.com/apache/incubator-kie-tools/packages/kn-plugin-workflow/pkg/command"
+       
"github.com/apache/incubator-kie-tools/packages/kn-plugin-workflow/pkg/command/quarkus"
+       
"github.com/apache/incubator-kie-tools/packages/kn-plugin-workflow/pkg/common"
+       
"github.com/apache/incubator-kie-tools/packages/kn-plugin-workflow/pkg/metadata"
+)
+
+var cfgTestInputCreateConvert = CfgTestInputCreate{
+       input: command.CreateCmdConfig{},
+}
+
+var cfgTestInputQuarkusCreateConvert = CfgTestInputQuarkusCreate{
+       input: quarkus.CreateQuarkusProjectConfig{},
+}
+
+type CfgTestInputQuarkusConvert struct {
+       input quarkus.CreateQuarkusProjectConfig
+}
+
+var cfgTestInputQuarkusConvert_Success = []CfgTestInputQuarkusConvert{
+       {input: quarkus.CreateQuarkusProjectConfig{}},
+       {input: quarkus.CreateQuarkusProjectConfig{
+               Extensions: "quarkus-jsonp,quarkus-smallrye-openapi",
+       }},
+       {input: quarkus.CreateQuarkusProjectConfig{
+               Extensions: "quarkus-jsonp,quarkus-smallrye-openapi",
+               DependenciesVersion: metadata.DependenciesVersion{
+                       QuarkusPlatformGroupId: 
quarkusDependencies.QuarkusPlatformGroupId,
+                       QuarkusVersion: quarkusDependencies.QuarkusVersion,
+               },
+       }},
+}
+
+var cfgTestInputQuarkusConvert_Failed = []CfgTestInputQuarkusConvert{
+       {input: quarkus.CreateQuarkusProjectConfig{
+               Extensions: "nonexistent-extension",
+       }},
+}
+
+var cfgTestInputQuarkusConvert_FailedAlreadyQuarkus = 
[]CfgTestInputQuarkusConvert{
+       {input: quarkus.CreateQuarkusProjectConfig{}},
+}
+
+func transformQuarkusConvertCmdCfgToArgs(t *testing.T, cfg 
quarkus.CreateQuarkusProjectConfig) []string {
+       args := []string{"convert"}
+       require.Empty(t, cfg.ProjectName, "The project name can not be set in 
the test of `quarkus convert`.")
+       if cfg.Extensions != "" {
+               args = append(args, "--extension", cfg.Extensions)
+       }
+       if cfg.DependenciesVersion.QuarkusPlatformGroupId != "" {
+               args = append(args, "--quarkus-platform-group-id", 
cfg.DependenciesVersion.QuarkusPlatformGroupId)
+       }
+       if cfg.DependenciesVersion.QuarkusVersion != "" {
+               args = append(args, "--quarkus-version", 
cfg.DependenciesVersion.QuarkusVersion)
+       }
+       return args
+}
+
+func TestQuarkusConvertProjectSuccess(t *testing.T) {
+       for testIndex, test := range cfgTestInputQuarkusConvert_Success {
+               t.Run(fmt.Sprintf("Test quarkus convert project success index: 
%d", testIndex), func(t *testing.T) {
+                       defer CleanUpAndChdirTemp(t)
+                       RunQuarkusConvertTest(t, cfgTestInputCreateConvert, 
test)
+               })
+       }
+}
+
+func RunQuarkusConvertTest(t *testing.T, cfgTestInputCreateConvert 
CfgTestInputCreate, test CfgTestInputQuarkusConvert) string {
+       var err error
+
+       projectName := GetCreateProjectName(t, cfgTestInputCreateConvert)
+       projectDir := filepath.Join(TempTestsPath, projectName)
+
+       // Create the project
+       RunCreateTest(t, cfgTestInputCreateConvert)
+
+       err = os.Chdir(projectDir)
+       require.NoErrorf(t, err, "Expected nil error, got %v", err)
+       WriteMavenConfigFileWithTailDirs(projectDir)
+
+       // Run `quarkus convert` command
+       _, err = 
ExecuteKnWorkflowQuarkus(transformQuarkusConvertCmdCfgToArgs(t, test.input)...)
+       require.NoErrorf(t, err, "Expected nil error, got %v", err)
+
+       // Check if the expected directories and files are present
+       expectedDirectories := []string{
+               "src/main/java",
+               "src/main/resources",
+               "src/main/docker",
+               "src/main",
+               "src",
+       }
+       VerifyDirectoriesExist(t, projectDir, expectedDirectories)
+       expectedFiles := []string{
+               "src/main/resources/application.properties",
+               "src/main/resources/workflow.sw.json",
+               "src/main/docker/Dockerfile.legacy-jar",
+               "src/main/docker/Dockerfile.jvm",
+               "src/main/docker/Dockerfile.native",
+               "src/main/docker/Dockerfile.native-micro",
+               ".gitignore",
+               "pom.xml",
+               "README.md",
+               ".dockerignore",
+       }
+       VerifyFilesExist(t, projectDir, expectedFiles)
+
+       // Verify the content of the file `workflow.sw.json`
+       workflowFilePath := filepath.Join(projectDir, 
"src/main/resources/workflow.sw.json")
+       workflowFileData, err := common.GetWorkflowTemplate(false)
+       require.NoErrorf(t, err, "Error reading workflow template: %v", err)
+       expectedFileContent := string(workflowFileData)
+       VerifyFileContent(t, workflowFilePath, expectedFileContent)
+
+       return projectName
+}
+
+func TestQuarkusConvertProjectFailed(t *testing.T) {
+       for testIndex, test := range cfgTestInputQuarkusConvert_Failed {
+               t.Run(fmt.Sprintf("Test quarkus convert project fail index: 
%d", testIndex), func(t *testing.T) {
+                       defer CleanUpAndChdirTemp(t)
+
+                       var err error
+                       projectName := GetCreateProjectName(t, 
cfgTestInputCreateConvert)
+                       projectDir := filepath.Join(TempTestsPath, projectName)
+
+                       // Create the project
+                       RunCreateTest(t, cfgTestInputCreateConvert)
+
+                       err = os.Chdir(projectDir)
+                       require.NoErrorf(t, err, "Expected nil error, got %v", 
err)
+                       WriteMavenConfigFileWithTailDirs(projectDir)
+
+                       // Run `quarkus convert` command
+                       _, err = 
ExecuteKnWorkflowQuarkus(transformQuarkusConvertCmdCfgToArgs(t, test.input)...)
+                       require.Errorf(t, err, "Expected error, got nil")
+
+                       common.DeleteFolderStructure(t, projectDir)
+               })
+       }
+}
+
+func TestQuarkusConvertProjectFailedAlreadyQuarkus(t *testing.T) {
+       for testIndex, test := range cfgTestInputQuarkusConvert_Failed {
+               t.Run(fmt.Sprintf("Test quarkus convert project fail already 
quarkus index: %d", testIndex), func(t *testing.T) {
+                       defer CleanUpAndChdirTemp(t)
+
+                       var err error
+                       projectName := GetQuarkusCreateProjectName(t, 
cfgTestInputQuarkusCreateConvert)
+                       projectDir := filepath.Join(TempTestsPath, projectName)
+
+                       // Create the project
+                       RunQuarkusCreateTest(t, 
cfgTestInputQuarkusCreateConvert)
+
+                       err = os.Chdir(projectDir)
+                       require.NoErrorf(t, err, "Expected nil error, got %v", 
err)
+                       WriteMavenConfigFileWithTailDirs(projectDir)
+
+                       // Run `quarkus convert` command
+                       _, err = 
ExecuteKnWorkflowQuarkus(transformQuarkusConvertCmdCfgToArgs(t, test.input)...)
+                       require.Errorf(t, err, "Expected error, got nil")
+               })
+       }
+}
diff --git a/packages/kn-plugin-workflow/e2e-tests/quarkus_create_test.go 
b/packages/kn-plugin-workflow/e2e-tests/quarkus_create_test.go
new file mode 100644
index 00000000000..22069344137
--- /dev/null
+++ b/packages/kn-plugin-workflow/e2e-tests/quarkus_create_test.go
@@ -0,0 +1,168 @@
+//go:build e2e_tests
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 e2e_tests
+
+import (
+       "fmt"
+       "os"
+       "path/filepath"
+       "testing"
+
+       "github.com/stretchr/testify/require"
+
+       
"github.com/apache/incubator-kie-tools/packages/kn-plugin-workflow/pkg/command/quarkus"
+       
"github.com/apache/incubator-kie-tools/packages/kn-plugin-workflow/pkg/common"
+       
"github.com/apache/incubator-kie-tools/packages/kn-plugin-workflow/pkg/metadata"
+)
+
+type CfgTestInputQuarkusCreate struct {
+       input quarkus.CreateQuarkusProjectConfig
+}
+
+var cfgTestInputQuarkusCreate_Success = []CfgTestInputQuarkusCreate{
+       {input: quarkus.CreateQuarkusProjectConfig{}},
+       {input: quarkus.CreateQuarkusProjectConfig{
+               ProjectName: "my-project",
+       }},
+       {input: quarkus.CreateQuarkusProjectConfig{
+               Extensions: "quarkus-jsonp,quarkus-smallrye-openapi",
+       }},
+       {input: quarkus.CreateQuarkusProjectConfig{
+               ProjectName: "serverless-workflow-hello-world",
+               Extensions:  "quarkus-jsonp,quarkus-smallrye-openapi",
+               DependenciesVersion: metadata.DependenciesVersion{
+                       QuarkusPlatformGroupId: 
quarkusDependencies.QuarkusPlatformGroupId,
+                       QuarkusVersion:         
quarkusDependencies.QuarkusVersion,
+               },
+       }},
+}
+
+var cfgTestInputQuarkusCreate_Fail = []CfgTestInputQuarkusCreate{
+       {input: quarkus.CreateQuarkusProjectConfig{
+               ProjectName: "wrong/project-name",
+       }},
+       {input: quarkus.CreateQuarkusProjectConfig{
+               Extensions: "nonexistent-extension",
+       }},
+}
+
+func transformQuarkusCreateCmdCfgToArgs(cfg 
quarkus.CreateQuarkusProjectConfig) []string {
+       args := []string{"create"}
+       if cfg.ProjectName != "" {
+               args = append(args, "--name", cfg.ProjectName)
+       }
+       if cfg.Extensions != "" {
+               args = append(args, "--extension", cfg.Extensions)
+       }
+       if cfg.DependenciesVersion.QuarkusPlatformGroupId != "" {
+               args = append(args, "--quarkus-platform-group-id", 
cfg.DependenciesVersion.QuarkusPlatformGroupId)
+       }
+       if cfg.DependenciesVersion.QuarkusVersion != "" {
+               args = append(args, "--quarkus-version", 
cfg.DependenciesVersion.QuarkusVersion)
+       }
+       return args
+}
+
+func GetQuarkusCreateProjectName(t *testing.T, config 
CfgTestInputQuarkusCreate) string {
+       if config.input.ProjectName != "" {
+               return config.input.ProjectName
+       } else {
+               projectDefaultName, err := LookupFlagDefaultValue("name", 
quarkus.NewCreateCommand())
+               require.NoErrorf(t, err, "Error: %v", err)
+               return projectDefaultName
+       }
+}
+
+func TestQuarkusCreateProjectSuccess(t *testing.T) {
+       for testIndex, test := range cfgTestInputQuarkusCreate_Success {
+               t.Run(fmt.Sprintf("Test quarkus create project success index: 
%d", testIndex), func(t *testing.T) {
+                       defer CleanUpAndChdirTemp(t)
+                       RunQuarkusCreateTest(t, test)
+               })
+       }
+}
+
+func RunQuarkusCreateTest(t *testing.T, test CfgTestInputQuarkusCreate) string 
{
+       var err error
+
+       projectName := GetQuarkusCreateProjectName(t, test)
+       projectDir := filepath.Join(TempTestsPath, projectName)
+
+       // Run `quarkus create` command
+       _, err = 
ExecuteKnWorkflowQuarkus(transformQuarkusCreateCmdCfgToArgs(test.input)...)
+
+       err = os.Chdir(projectDir)
+       require.NoErrorf(t, err, "Expected nil error, got: %v", err)
+       WriteMavenConfigFileWithTailDirs(projectDir)
+
+       // Check if the project directory was created
+       require.DirExistsf(t, projectDir, "Expected project directory '%s' to 
be created", projectDir)
+
+       // Check if the expected directories and files are present
+       expectedDirectories := []string{
+               "src/main/java",
+               "src/main/resources",
+               "src/main/docker",
+               "src/main",
+               "src",
+       }
+       VerifyDirectoriesExist(t, projectDir, expectedDirectories)
+       expectedFiles := []string{
+               "src/main/resources/application.properties",
+               "src/main/resources/workflow.sw.json",
+               "src/main/docker/Dockerfile.legacy-jar",
+               "src/main/docker/Dockerfile.jvm",
+               "src/main/docker/Dockerfile.native",
+               "src/main/docker/Dockerfile.native-micro",
+               ".gitignore",
+               "pom.xml",
+               "README.md",
+               ".dockerignore",
+       }
+       VerifyFilesExist(t, projectDir, expectedFiles)
+
+       // Verify the content of the file `workflow.sw.json`
+       workflowFilePath := filepath.Join(projectDir, 
"src/main/resources/workflow.sw.json")
+       workflowFileData, err := common.GetWorkflowTemplate(false)
+       require.NoErrorf(t, err, "Error reading workflow template: %v", err)
+       expectedFileContent := string(workflowFileData)
+       VerifyFileContent(t, workflowFilePath, expectedFileContent)
+       return projectName
+}
+
+func TestQuarkusCreateProjectFail(t *testing.T) {
+       for testIndex, test := range cfgTestInputQuarkusCreate_Fail {
+               t.Run(fmt.Sprintf("Test quarkus create project fail index: %d", 
testIndex), func(t *testing.T) {
+                       defer CleanUpAndChdirTemp(t)
+
+                       projectName := GetQuarkusCreateProjectName(t, test)
+                       projectDir := filepath.Join(TempTestsPath, projectName)
+
+                       // Run `quarkus create` command
+                       _, err := 
ExecuteKnWorkflowQuarkus(transformQuarkusCreateCmdCfgToArgs(test.input)...)
+                       require.Errorf(t, err, "Expected error, got nil")
+
+                       // Check if the project directory was not created
+                       require.NoDirExistsf(t, projectDir, "Expected project 
directory '%s' not to be created", projectDir)
+               })
+       }
+}
diff --git a/packages/kn-plugin-workflow/e2e-tests/quarkus_run_test.go 
b/packages/kn-plugin-workflow/e2e-tests/quarkus_run_test.go
new file mode 100644
index 00000000000..f127d98575e
--- /dev/null
+++ b/packages/kn-plugin-workflow/e2e-tests/quarkus_run_test.go
@@ -0,0 +1,129 @@
+//go:build e2e_tests
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 e2e_tests
+
+import (
+       "fmt"
+       "os"
+       "os/exec"
+       "path/filepath"
+       "sync"
+       "testing"
+       "time"
+
+       
"github.com/apache/incubator-kie-tools/packages/kn-plugin-workflow/pkg/command"
+       
"github.com/apache/incubator-kie-tools/packages/kn-plugin-workflow/pkg/command/quarkus"
+       
"github.com/apache/incubator-kie-tools/packages/kn-plugin-workflow/pkg/common"
+       "github.com/stretchr/testify/require"
+)
+
+var cfgTestInputPrepareQuarkusCreateRun = CfgTestInputQuarkusCreate{
+       input: quarkus.CreateQuarkusProjectConfig{ProjectName: "new-project"},
+}
+
+var cfgTestInputPrepareQuarkusBuildRun = CfgTestInputQuarkusBuild{
+       input: quarkus.BuildCmdConfig{
+               Image: "dev.local/new-project",
+       },
+}
+
+type cfgTestInputQuarkusRun struct {
+       input quarkus.RunCmdConfig
+}
+
+var cfgTestInputQuarkusRun_Success = []cfgTestInputQuarkusRun{
+       {input: quarkus.RunCmdConfig{PortMapping: "8081", OpenDevUI: false}},
+       {input: quarkus.RunCmdConfig{OpenDevUI: true}},
+}
+
+func transformQuarkusRunCmdCfgToArgs(cfg quarkus.RunCmdConfig) []string {
+       args := []string{"run"}
+       if !cfg.OpenDevUI {
+               args = append(args, "--open-dev-ui=false")
+       }
+       if cfg.PortMapping != "" {
+               args = append(args, "--port", cfg.PortMapping)
+       }
+       return args
+}
+
+func getRunQuarkusProjectPort(t *testing.T, config cfgTestInputQuarkusRun) 
string {
+       if config.input.PortMapping != "" {
+               return config.input.PortMapping
+       } else {
+               projectDefaultPort, err := LookupFlagDefaultValue("port", 
command.NewRunCommand())
+               require.NoErrorf(t, err, "Error: %v", err)
+               return projectDefaultPort
+       }
+}
+
+func TestQuarkusRunCommand(t *testing.T) {
+       for testIndex, test := range cfgTestInputQuarkusRun_Success {
+               t.Run(fmt.Sprintf("Test quarkus run project success index: %d", 
testIndex), func(t *testing.T) {
+                       defer CleanUpAndChdirTemp(t)
+                       RunQuarkusRunTest(t, 
cfgTestInputPrepareQuarkusCreateRun, cfgTestInputPrepareQuarkusBuildRun, test)
+               })
+       }
+}
+
+func RunQuarkusRunTest(t *testing.T, cfgTestInputPrepareQuarkusCreateRun 
CfgTestInputQuarkusCreate, cfgTestInputPrepareQuarkusBuild 
CfgTestInputQuarkusBuild, test cfgTestInputQuarkusRun) string {
+       var err error
+
+       // Create and build the quarkus project
+       projectName := RunQuarkusCreateTest(t, 
cfgTestInputPrepareQuarkusCreateRun)
+       projectDir := filepath.Join(TempTestsPath, projectName)
+
+       err = os.Chdir(projectDir)
+       require.NoErrorf(t, err, "Expected nil error, got %v", err)
+       WriteMavenConfigFileWithTailDirs(projectDir)
+
+       cmd := exec.Command(KnExecutable)
+
+       var wg sync.WaitGroup
+       wg.Add(1)
+
+       // Run the `quarkus run` command
+       go func() {
+               defer wg.Done()
+               _, err = ExecuteKnWorkflowQuarkusWithCmd(cmd, 
transformQuarkusRunCmdCfgToArgs(test.input)...)
+               require.Truef(t, err == nil || IsSignalInterrupt(err), 
"Expected nil error or signal interrupt, got %v", err)
+       }()
+
+       // Check if the project is successfully run and accessible within a 
specified time limit.
+       readyCheckURL := fmt.Sprintf("http://localhost:%s/q/health/ready";, 
getRunQuarkusProjectPort(t, test))
+       pollInterval := 5 * time.Second
+       timeout := 10 * time.Minute
+       ready := make(chan bool)
+       t.Logf("Checking if project is ready at %s", readyCheckURL)
+       go common.PollReadyCheckURL(readyCheckURL, pollInterval, ready)
+       select {
+       case <-ready:
+               cmd.Process.Signal(os.Interrupt)
+       case <-time.After(timeout):
+               t.Fatalf("Test case timed out after %s. The project was not 
ready within the specified time.", timeout)
+               cmd.Process.Signal(os.Interrupt)
+       }
+
+       wg.Wait()
+
+       return projectName
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to