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

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

commit 123ffb1fcbfd4e31a8dec45310e4022884838563
Author: Pasquale Congiusti <[email protected]>
AuthorDate: Wed May 10 16:37:16 2023 +0200

    chore(e2e): builder resources test
---
 e2e/common/traits/builder_test.go         | 43 +++++++++++++++++++++++++++++++
 e2e/support/test_support.go               | 10 +++++++
 pkg/apis/camel/v1/common_types_support.go |  9 +++++++
 pkg/controller/build/build_pod.go         | 22 ++++++++--------
 pkg/controller/integrationkit/build.go    |  9 ++++++-
 pkg/util/kubernetes/factory_test.go       |  9 +++----
 6 files changed, 85 insertions(+), 17 deletions(-)

diff --git a/e2e/common/traits/builder_test.go 
b/e2e/common/traits/builder_test.go
index e57e0ceba..8eeb0c834 100644
--- a/e2e/common/traits/builder_test.go
+++ b/e2e/common/traits/builder_test.go
@@ -38,18 +38,61 @@ func TestBuilderTrait(t *testing.T) {
        RegisterTestingT(t)
 
        name := "java"
+
        t.Run("Run build strategy routine", func(t *testing.T) {
                Expect(KamelRunWithID(operatorID, ns, "files/Java.java",
                        "--name", name,
                        "-t", 
"builder.strategy=routine").Execute()).To(Succeed())
+
                Eventually(IntegrationPodPhase(ns, name), 
TestTimeoutLong).Should(Equal(corev1.PodRunning))
                Eventually(IntegrationConditionStatus(ns, name, 
v1.IntegrationConditionReady), 
TestTimeoutShort).Should(Equal(corev1.ConditionTrue))
                Eventually(IntegrationLogs(ns, name), 
TestTimeoutShort).Should(ContainSubstring("Magicstring!"))
 
                integrationKitName := IntegrationKit(ns, name)()
                builderKitName := fmt.Sprintf("camel-k-%s-builder", 
integrationKitName)
+               Eventually(BuildConfig(ns, integrationKitName)().Strategy, 
TestTimeoutShort).Should(Equal(v1.BuildStrategyRoutine))
+               // Default resource CPU Check
+               Eventually(BuildConfig(ns, integrationKitName)().RequestCPU, 
TestTimeoutShort).Should(Equal(""))
+               Eventually(BuildConfig(ns, integrationKitName)().LimitCPU, 
TestTimeoutShort).Should(Equal(""))
+               Eventually(BuildConfig(ns, integrationKitName)().RequestMemory, 
TestTimeoutShort).Should(Equal(""))
+               Eventually(BuildConfig(ns, integrationKitName)().LimitMemory, 
TestTimeoutShort).Should(Equal(""))
+
                Eventually(BuilderPod(ns, builderKitName), 
TestTimeoutShort).Should(BeNil())
 
+               // We need to remove the kit as well
+               Expect(Kamel("reset", "-n", ns).Execute()).To(Succeed())
+       })
+
+       t.Run("Run build resources configuration", func(t *testing.T) {
+               Expect(KamelRunWithID(operatorID, ns, "files/Java.java",
+                       "--name", name,
+                       "-t", "builder.request-cpu=500m",
+                       "-t", "builder.limit-cpu=1000m",
+                       "-t", "builder.request-memory=2Gi",
+                       "-t", "builder.limit-memory=3Gi",
+               ).Execute()).To(Succeed())
+
+               Eventually(IntegrationPodPhase(ns, name), 
TestTimeoutLong).Should(Equal(corev1.PodRunning))
+               Eventually(IntegrationConditionStatus(ns, name, 
v1.IntegrationConditionReady), 
TestTimeoutShort).Should(Equal(corev1.ConditionTrue))
+               Eventually(IntegrationLogs(ns, name), 
TestTimeoutShort).Should(ContainSubstring("Magicstring!"))
+
+               integrationKitName := IntegrationKit(ns, name)()
+               builderKitName := fmt.Sprintf("camel-k-%s-builder", 
integrationKitName)
+
+               Eventually(BuildConfig(ns, integrationKitName)().Strategy, 
TestTimeoutShort).Should(Equal(v1.BuildStrategyPod))
+               Eventually(BuildConfig(ns, integrationKitName)().RequestCPU, 
TestTimeoutShort).Should(Equal("500m"))
+               Eventually(BuildConfig(ns, integrationKitName)().LimitCPU, 
TestTimeoutShort).Should(Equal("1000m"))
+               Eventually(BuildConfig(ns, integrationKitName)().RequestMemory, 
TestTimeoutShort).Should(Equal("2Gi"))
+               Eventually(BuildConfig(ns, integrationKitName)().LimitMemory, 
TestTimeoutShort).Should(Equal("3Gi"))
+
+               Eventually(BuilderPod(ns, builderKitName), 
TestTimeoutShort).ShouldNot(BeNil())
+               // Let's assert we set the resources on the builder container
+               Eventually(BuilderPod(ns, 
builderKitName)().Spec.InitContainers[0].Name, 
TestTimeoutShort).Should(Equal("builder"))
+               Eventually(BuilderPod(ns, 
builderKitName)().Spec.InitContainers[0].Resources.Requests.Cpu().String(), 
TestTimeoutShort).Should(Equal("500m"))
+               Eventually(BuilderPod(ns, 
builderKitName)().Spec.InitContainers[0].Resources.Limits.Cpu().String(), 
TestTimeoutShort).Should(Equal("1"))
+               Eventually(BuilderPod(ns, 
builderKitName)().Spec.InitContainers[0].Resources.Requests.Memory().String(), 
TestTimeoutShort).Should(Equal("2Gi"))
+               Eventually(BuilderPod(ns, 
builderKitName)().Spec.InitContainers[0].Resources.Limits.Memory().String(), 
TestTimeoutShort).Should(Equal("3Gi"))
+
                Expect(Kamel("delete", "--all", "-n", 
ns).Execute()).To(Succeed())
        })
 }
diff --git a/e2e/support/test_support.go b/e2e/support/test_support.go
index fd07afc60..1823c229a 100644
--- a/e2e/support/test_support.go
+++ b/e2e/support/test_support.go
@@ -1602,6 +1602,16 @@ func Build(ns, name string) func() *v1.Build {
        }
 }
 
+func BuildConfig(ns, name string) func() v1.BuildConfiguration {
+       return func() v1.BuildConfiguration {
+               build := Build(ns, name)()
+               if build != nil {
+                       return build.Spec.Configuration
+               }
+               return v1.BuildConfiguration{}
+       }
+}
+
 func BuildPhase(ns, name string) func() v1.BuildPhase {
        return func() v1.BuildPhase {
                build := Build(ns, name)()
diff --git a/pkg/apis/camel/v1/common_types_support.go 
b/pkg/apis/camel/v1/common_types_support.go
index d16aeaee1..b66dca9a8 100644
--- a/pkg/apis/camel/v1/common_types_support.go
+++ b/pkg/apis/camel/v1/common_types_support.go
@@ -155,3 +155,12 @@ func SetAnnotation(obj *metav1.ObjectMeta, name string, 
value string) {
 
 var _ json.Marshaler = (*RawMessage)(nil)
 var _ json.Unmarshaler = (*RawMessage)(nil)
+
+// IsEmpty -- .
+func (bc *BuildConfiguration) IsEmpty() bool {
+       return bc.Strategy == "" &&
+               bc.RequestCPU == "" &&
+               bc.RequestMemory == "" &&
+               bc.LimitCPU == "" &&
+               bc.LimitMemory == ""
+}
diff --git a/pkg/controller/build/build_pod.go 
b/pkg/controller/build/build_pod.go
index da25ab3f0..88c35d078 100644
--- a/pkg/controller/build/build_pod.go
+++ b/pkg/controller/build/build_pod.go
@@ -165,14 +165,11 @@ func newBuildPod(ctx context.Context, c ctrl.Reader, 
build *v1.Build) (*corev1.P
        pod.Spec.Containers = 
pod.Spec.InitContainers[len(pod.Spec.InitContainers)-1 : 
len(pod.Spec.InitContainers)]
        pod.Spec.InitContainers = 
pod.Spec.InitContainers[:len(pod.Spec.InitContainers)-1]
 
-       if err := configureResources(build.Spec.Configuration, 
&pod.Spec.Containers[0]); err != nil {
-               return pod, err
-       }
-
        return pod, nil
 }
 
-func configureResources(conf v1.BuildConfiguration, container 
*corev1.Container) error {
+func configureResources(build *v1.Build, container *corev1.Container) {
+       conf := build.Spec.Configuration
        requestsList := container.Resources.Requests
        limitsList := container.Resources.Limits
        var err error
@@ -185,25 +182,27 @@ func configureResources(conf v1.BuildConfiguration, 
container *corev1.Container)
 
        requestsList, err = kubernetes.ConfigureResource(conf.RequestCPU, 
requestsList, corev1.ResourceCPU)
        if err != nil {
-               return err
+               Log.WithValues("request-namespace", build.Namespace, 
"request-name", build.Name).
+                       Errorf(err, "Could not configure builder resource cpu, 
leaving default value")
        }
        requestsList, err = kubernetes.ConfigureResource(conf.RequestMemory, 
requestsList, corev1.ResourceMemory)
        if err != nil {
-               return err
+               Log.WithValues("request-namespace", build.Namespace, 
"request-name", build.Name).
+                       Errorf(err, "Could not configure builder resource 
memory, leaving default value")
        }
        limitsList, err = kubernetes.ConfigureResource(conf.LimitCPU, 
limitsList, corev1.ResourceCPU)
        if err != nil {
-               return err
+               Log.WithValues("request-namespace", build.Namespace, 
"request-name", build.Name).
+                       Errorf(err, "Could not configure builder limit cpu, 
leaving default value")
        }
        limitsList, err = kubernetes.ConfigureResource(conf.LimitMemory, 
limitsList, corev1.ResourceMemory)
        if err != nil {
-               return err
+               Log.WithValues("request-namespace", build.Namespace, 
"request-name", build.Name).
+                       Errorf(err, "Could not configure builder limit memory, 
leaving default value")
        }
 
        container.Resources.Requests = requestsList
        container.Resources.Limits = limitsList
-
-       return nil
 }
 
 func deleteBuilderPod(ctx context.Context, c ctrl.Writer, build *v1.Build) 
error {
@@ -287,6 +286,7 @@ func addBuildTaskToPod(build *v1.Build, taskName string, 
pod *corev1.Pod) {
                Env:        proxyFromEnvironment(),
        }
 
+       configureResources(build, &container)
        addContainerToPod(build, container, pod)
 }
 
diff --git a/pkg/controller/integrationkit/build.go 
b/pkg/controller/integrationkit/build.go
index d7dcea5dd..ab7744ecd 100644
--- a/pkg/controller/integrationkit/build.go
+++ b/pkg/controller/integrationkit/build.go
@@ -109,7 +109,14 @@ func (action *buildAction) handleBuildSubmitted(ctx 
context.Context, kit *v1.Int
 
                // It has to be the same namespace as the operator as they must 
share a PVC
                builderPodNamespace := platform.GetOperatorNamespace()
-               buildConfig := env.Platform.Status.Build.BuildConfiguration
+               buildConfig := env.BuildConfiguration
+               if buildConfig.IsEmpty() {
+                       // default to IntegrationPlatform configuration
+                       buildConfig = 
env.Platform.Status.Build.BuildConfiguration
+               } else if buildConfig.Strategy == "" {
+                       // we always need to define a strategy, so we default 
to platform if none
+                       buildConfig.Strategy = 
env.Platform.Status.Build.BuildConfiguration.Strategy
+               }
 
                // nolint: contextcheck
                if buildConfig.Strategy == v1.BuildStrategyPod {
diff --git a/pkg/util/kubernetes/factory_test.go 
b/pkg/util/kubernetes/factory_test.go
index 530c747fa..581e2d82e 100644
--- a/pkg/util/kubernetes/factory_test.go
+++ b/pkg/util/kubernetes/factory_test.go
@@ -22,7 +22,6 @@ import (
        "testing"
 
        "github.com/stretchr/testify/assert"
-       corev1 "k8s.io/api/core/v1"
        v1 "k8s.io/api/core/v1"
        "k8s.io/apimachinery/pkg/api/resource"
 )
@@ -173,14 +172,14 @@ func TestMissingResourceRequirements(t *testing.T) {
 }
 
 func TestConfigureResources(t *testing.T) {
-       requestsList := make(corev1.ResourceList)
-       requestsList, err := ConfigureResource("500m", requestsList, 
corev1.ResourceCPU)
+       requestsList := make(v1.ResourceList)
+       requestsList, err := ConfigureResource("500m", requestsList, 
v1.ResourceCPU)
        assert.Nil(t, err)
        assert.Equal(t, "500m", requestsList.Cpu().String())
-       requestsList, err = ConfigureResource("5Gi", requestsList, 
corev1.ResourceMemory)
+       requestsList, err = ConfigureResource("5Gi", requestsList, 
v1.ResourceMemory)
        assert.Nil(t, err)
        assert.Equal(t, "5Gi", requestsList.Memory().String())
-       requestsList, err = ConfigureResource("5ss", requestsList, 
corev1.ResourceCPU)
+       requestsList, err = ConfigureResource("5ss", requestsList, 
v1.ResourceCPU)
        assert.NotNil(t, err)
        // Assert previous values haven't changed
        assert.Equal(t, "500m", requestsList.Cpu().String())

Reply via email to