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{