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]