You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by as...@apache.org on 2021/03/02 13:46:54 UTC

[camel-k] 03/03: refactor(trait): nil PodSpec check

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 <pa...@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{