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

squakez pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-k.git

commit 7fde62cff3efae6cf65607f42d0844b0369a1963
Author: Æ״óÀë <[email protected]>
AuthorDate: Tue Jul 28 22:04:27 2026 +0800

    Fix #6508: address lint warnings and add mixed-format tests
    
    - Replace if-else chain with switch (gocritic)
    - Add //nolint:nestif for key=value parsing block
    - Add tests for mixed positional + key=value format
      (e.g. my-task;my-image;my-command;request-cpu=123m)
---
 pkg/trait/init_containers.go      |  8 ++--
 pkg/trait/init_containers_test.go | 83 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 88 insertions(+), 3 deletions(-)

diff --git a/pkg/trait/init_containers.go b/pkg/trait/init_containers.go
index 5e72da24f..f7a9c3af9 100644
--- a/pkg/trait/init_containers.go
+++ b/pkg/trait/init_containers.go
@@ -248,6 +248,7 @@ func parseSingleTask(task string, isSidecar bool) 
(containerTask, error) {
                if len(strings.TrimSpace(seg)) == 0 {
                        continue
                }
+               //nolint:nestif
                if strings.Contains(seg, "=") {
                        kv := strings.SplitN(seg, "=", 2)
                        key, value := strings.TrimSpace(kv[0]), 
strings.TrimSpace(kv[1])
@@ -284,11 +285,12 @@ func parseSingleTask(task string, isSidecar bool) 
(containerTask, error) {
                        }
                } else {
                        // Positional segment: fill first unset field
-                       if result.name == "" {
+                       switch {
+                       case result.name == "":
                                result.name = seg
-                       } else if result.image == "" {
+                       case result.image == "":
                                result.image = seg
-                       } else {
+                       default:
                                commandParts = append(commandParts, seg)
                        }
                }
diff --git a/pkg/trait/init_containers_test.go 
b/pkg/trait/init_containers_test.go
index e705a0bb1..c9da3de9c 100644
--- a/pkg/trait/init_containers_test.go
+++ b/pkg/trait/init_containers_test.go
@@ -698,6 +698,89 @@ func TestParseInitContainerInvalidResource(t *testing.T) {
        assert.Contains(t, err.Error(), `"abc"`)
 }
 
+func TestParseInitContainerMixedFormat(t *testing.T) {
+       trait := &initContainersTrait{
+               InitContainersTrait: trait.InitContainersTrait{
+                       InitTasks: []string{
+                               
"my-task;my-image;my-command;request-cpu=123m;limit-memory=256Mi",
+                       },
+               },
+       }
+
+       configured, err := trait.parseTasks()
+       assert.True(t, configured)
+       require.Nil(t, err)
+       require.Len(t, trait.tasks, 1)
+
+       task := trait.tasks[0]
+       assert.Equal(t, "my-task", task.name)
+       assert.Equal(t, "my-image", task.image)
+       assert.Equal(t, "my-command", task.command)
+       assert.False(t, task.isSidecar)
+       assert.Equal(t, "123m", task.requestCPU)
+       assert.Equal(t, "", task.requestMemory)
+       assert.Equal(t, "", task.limitCPU)
+       assert.Equal(t, "256Mi", task.limitMemory)
+}
+
+func TestApplyInitContainerMixedFormat(t *testing.T) {
+       environment := Environment{
+               Catalog:   NewCatalog(nil),
+               Resources: kubernetes.NewCollection(),
+               Integration: &v1.Integration{
+                       ObjectMeta: metav1.ObjectMeta{
+                               Name: "my-it",
+                       },
+                       Status: v1.IntegrationStatus{
+                               Phase: v1.IntegrationPhaseRunning,
+                       },
+               },
+       }
+       environment.Resources.Add(&appsv1.Deployment{
+               ObjectMeta: metav1.ObjectMeta{
+                       Labels: map[string]string{
+                               v1.IntegrationLabel: "my-it",
+                       },
+               },
+               Spec: appsv1.DeploymentSpec{
+                       Template: corev1.PodTemplateSpec{
+                               Spec: corev1.PodSpec{},
+                       },
+               },
+       })
+       initCont := initContainersTrait{
+               InitContainersTrait: trait.InitContainersTrait{
+                       InitTasks: []string{
+                               
"my-task;my-image;my-command;request-cpu=123m;limit-memory=256Mi",
+                       },
+               },
+       }
+       configured, condition, err := initCont.Configure(&environment)
+       assert.True(t, configured)
+       assert.Nil(t, condition)
+       require.Nil(t, err)
+       err = initCont.Apply(&environment)
+       require.Nil(t, err)
+
+       deploy := 
environment.Resources.GetDeploymentForIntegration(environment.Integration)
+       require.NotNil(t, deploy)
+       require.Len(t, deploy.Spec.Template.Spec.InitContainers, 1)
+
+       container := deploy.Spec.Template.Spec.InitContainers[0]
+       assert.Equal(t, "my-task", container.Name)
+       assert.Equal(t, "my-image", container.Image)
+
+       expectedResources := corev1.ResourceRequirements{
+               Requests: corev1.ResourceList{
+                       corev1.ResourceCPU: resource.MustParse("123m"),
+               },
+               Limits: corev1.ResourceList{
+                       corev1.ResourceMemory: resource.MustParse("256Mi"),
+               },
+       }
+       assert.Equal(t, expectedResources, container.Resources)
+}
+
 func TestApplyInitContainerWithResources(t *testing.T) {
        environment := Environment{
                Catalog:   NewCatalog(nil),

Reply via email to