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

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

commit cc0daf4fe4d59e9dec0d513256ed5e6e6ad0adf8
Author: Pasquale Congiusti <pasquale.congiu...@gmail.com>
AuthorDate: Tue Mar 2 10:49:59 2021 +0100

    refactor(trait): nil PodSpec check
    
    * Added a check to raise an error on nil PodSpec for affinity and 
toleration traits
    * Related unit test
    
    Ref #2047
---
 pkg/trait/affinity.go         | 28 ++++++++++++++--------------
 pkg/trait/affinity_test.go    |  9 +++++++++
 pkg/trait/toleration.go       | 13 ++++++-------
 pkg/trait/toleration_test.go  | 10 ++++++++++
 pkg/trait/trait_types_test.go | 16 ++++++++++++++++
 5 files changed, 55 insertions(+), 21 deletions(-)

diff --git a/pkg/trait/affinity.go b/pkg/trait/affinity.go
index aca0e0e..ff86dbd 100644
--- a/pkg/trait/affinity.go
+++ b/pkg/trait/affinity.go
@@ -75,21 +75,21 @@ func (t *affinityTrait) Configure(e *Environment) (bool, 
error) {
 func (t *affinityTrait) Apply(e *Environment) (err error) {
        podSpec := e.GetIntegrationPodSpec()
 
-       if podSpec != nil {
-               if podSpec.Affinity == nil {
-                       podSpec.Affinity = &corev1.Affinity{}
-               }
-               if err := t.addNodeAffinity(e, podSpec); err != nil {
-                       return err
-               }
-               if err := t.addPodAffinity(e, podSpec); err != nil {
-                       return err
-               }
-               if err := t.addPodAntiAffinity(e, podSpec); err != nil {
-                       return err
-               }
+       if podSpec == nil {
+               return fmt.Errorf("could not find any integration deployment 
for %v", e.Integration.Name)
+       }
+       if podSpec.Affinity == nil {
+               podSpec.Affinity = &corev1.Affinity{}
+       }
+       if err := t.addNodeAffinity(e, podSpec); err != nil {
+               return err
+       }
+       if err := t.addPodAffinity(e, podSpec); err != nil {
+               return err
+       }
+       if err := t.addPodAntiAffinity(e, podSpec); err != nil {
+               return err
        }
-
        return nil
 }
 
diff --git a/pkg/trait/affinity_test.go b/pkg/trait/affinity_test.go
index b008b6a..065b4dc 100644
--- a/pkg/trait/affinity_test.go
+++ b/pkg/trait/affinity_test.go
@@ -59,6 +59,15 @@ func TestConfigureDisabledAffinityTraitFails(t *testing.T) {
        assert.Nil(t, err)
 }
 
+func TestApplyAffinityMissingDeployment(t *testing.T) {
+       tolerationTrait := createNominalAffinityTest()
+
+       environment := createNominalMissingDeploymentTraitTest()
+       err := tolerationTrait.Apply(environment)
+
+       assert.NotNil(t, err)
+}
+
 func TestApplyEmptyAffinityLabelsDoesSucceed(t *testing.T) {
        affinityTrait := createNominalAffinityTest()
 
diff --git a/pkg/trait/toleration.go b/pkg/trait/toleration.go
index 481cebf..80dc69e 100644
--- a/pkg/trait/toleration.go
+++ b/pkg/trait/toleration.go
@@ -73,14 +73,13 @@ func (t *tolerationTrait) Apply(e *Environment) (err error) 
{
        }
        podSpec := e.GetIntegrationPodSpec()
 
-       // Add the toleration
-       if podSpec != nil {
-               if podSpec.Tolerations == nil {
-                       podSpec.Tolerations = make([]corev1.Toleration, 0)
-               }
-               podSpec.Tolerations = append(podSpec.Tolerations, 
tolerations...)
+       if podSpec == nil {
+               return fmt.Errorf("could not find any integration deployment 
for %v", e.Integration.Name)
        }
-
+       if podSpec.Tolerations == nil {
+               podSpec.Tolerations = make([]corev1.Toleration, 0)
+       }
+       podSpec.Tolerations = append(podSpec.Tolerations, tolerations...)
        return nil
 }
 
diff --git a/pkg/trait/toleration_test.go b/pkg/trait/toleration_test.go
index 8ce65cb..fcd26af 100644
--- a/pkg/trait/toleration_test.go
+++ b/pkg/trait/toleration_test.go
@@ -47,6 +47,16 @@ func TestApplyTolerationTraitMalformedTaint(t *testing.T) {
        assert.NotNil(t, err)
 }
 
+func TestApplyPodTolerationMissingDeployment(t *testing.T) {
+       tolerationTrait := createNominalTolerationTrait()
+       tolerationTrait.Taints = append(tolerationTrait.Taints, 
"my-toleration=my-value:NoExecute")
+
+       environment := createNominalMissingDeploymentTraitTest()
+       err := tolerationTrait.Apply(environment)
+
+       assert.NotNil(t, err)
+}
+
 func TestApplyPodTolerationLabelsDefault(t *testing.T) {
        tolerationTrait := createNominalTolerationTrait()
        tolerationTrait.Taints = append(tolerationTrait.Taints, 
"my-toleration=my-value:NoExecute")
diff --git a/pkg/trait/trait_types_test.go b/pkg/trait/trait_types_test.go
index 68e0238..137f0f9 100644
--- a/pkg/trait/trait_types_test.go
+++ b/pkg/trait/trait_types_test.go
@@ -54,6 +54,22 @@ func createNominalDeploymentTraitTest() (*Environment, 
*appsv1.Deployment) {
        return environment, deployment
 }
 
+func createNominalMissingDeploymentTraitTest() *Environment {
+       environment := &Environment{
+               Integration: &v1.Integration{
+                       ObjectMeta: metav1.ObjectMeta{
+                               Name: "integration-name",
+                       },
+                       Status: v1.IntegrationStatus{
+                               Phase: v1.IntegrationPhaseDeploying,
+                       },
+               },
+               Resources: kubernetes.NewCollection(),
+       }
+
+       return environment
+}
+
 func createNominalKnativeServiceTraitTest() (*Environment, *serving.Service) {
        knativeService := &serving.Service{
                ObjectMeta: metav1.ObjectMeta{

Reply via email to