diff --git a/pkg/canary/deployment_controller_test.go b/pkg/canary/deployment_controller_test.go index ec4b9b57..f7918287 100644 --- a/pkg/canary/deployment_controller_test.go +++ b/pkg/canary/deployment_controller_test.go @@ -2,6 +2,7 @@ package canary import ( "context" + "fmt" "testing" "github.com/stretchr/testify/assert" @@ -14,12 +15,12 @@ import ( flaggerv1 "github.com/weaveworks/flagger/pkg/apis/flagger/v1beta1" ) -func TestDeploymentController_Sync(t *testing.T) { +func TestDeploymentController_Sync_ConsistentNaming(t *testing.T) { dc := deploymentConfigs{name: "podinfo", label: "name", labelValue: "podinfo"} mocks := newDeploymentFixture(dc) mocks.initializeCanary(t) - depPrimary, err := mocks.kubeClient.AppsV1().Deployments("default").Get(context.TODO(), "podinfo-primary", metav1.GetOptions{}) + depPrimary, err := mocks.kubeClient.AppsV1().Deployments("default").Get(context.TODO(), fmt.Sprintf("%s-primary", dc.name), metav1.GetOptions{}) require.NoError(t, err) dep := newDeploymentControllerTest(dc) @@ -27,6 +28,32 @@ func TestDeploymentController_Sync(t *testing.T) { sourceImage := dep.Spec.Template.Spec.Containers[0].Image assert.Equal(t, sourceImage, primaryImage) + primarySelectorValue := depPrimary.Spec.Selector.MatchLabels[dc.label] + sourceSelectorValue := dep.Spec.Selector.MatchLabels[dc.label] + assert.Equal(t, primarySelectorValue, fmt.Sprintf("%s-primary", sourceSelectorValue)) + + hpaPrimary, err := mocks.kubeClient.AutoscalingV2beta1().HorizontalPodAutoscalers("default").Get(context.TODO(), "podinfo-primary", metav1.GetOptions{}) + require.NoError(t, err) + assert.Equal(t, depPrimary.Name, hpaPrimary.Spec.ScaleTargetRef.Name) +} + +func TestDeploymentController_Sync_InconsistentNaming(t *testing.T) { + dc := deploymentConfigs{name: "podinfo-service", label: "name", labelValue: "podinfo"} + mocks := newDeploymentFixture(dc) + mocks.initializeCanary(t) + + depPrimary, err := mocks.kubeClient.AppsV1().Deployments("default").Get(context.TODO(), fmt.Sprintf("%s-primary", dc.name), metav1.GetOptions{}) + require.NoError(t, err) + + dep := newDeploymentControllerTest(dc) + primaryImage := depPrimary.Spec.Template.Spec.Containers[0].Image + sourceImage := dep.Spec.Template.Spec.Containers[0].Image + assert.Equal(t, sourceImage, primaryImage) + + primarySelectorValue := depPrimary.Spec.Selector.MatchLabels[dc.label] + sourceSelectorValue := dep.Spec.Selector.MatchLabels[dc.label] + assert.Equal(t, primarySelectorValue, fmt.Sprintf("%s-primary", sourceSelectorValue)) + hpaPrimary, err := mocks.kubeClient.AutoscalingV2beta1().HorizontalPodAutoscalers("default").Get(context.TODO(), "podinfo-primary", metav1.GetOptions{}) require.NoError(t, err) assert.Equal(t, depPrimary.Name, hpaPrimary.Spec.ScaleTargetRef.Name) diff --git a/pkg/canary/deployment_fixture_test.go b/pkg/canary/deployment_fixture_test.go index cf474a11..7cbe6bdc 100644 --- a/pkg/canary/deployment_fixture_test.go +++ b/pkg/canary/deployment_fixture_test.go @@ -29,6 +29,10 @@ type deploymentControllerFixture struct { logger *zap.SugaredLogger } +type canaryConfigs struct { + targetName string +} + type deploymentConfigs struct { name string labelValue string @@ -59,7 +63,8 @@ func (d deploymentControllerFixture) initializeCanary(t *testing.T) { func newDeploymentFixture(dc deploymentConfigs) deploymentControllerFixture { // init canary - canary := newDeploymentControllerTestCanary() + cc := canaryConfigs{targetName: dc.name} + canary := newDeploymentControllerTestCanary(cc) flaggerClient := fakeFlagger.NewSimpleClientset(canary) // init kube clientset and register mock objects @@ -299,7 +304,7 @@ func newDeploymentControllerTestSecretTrackerDisabled() *corev1.Secret { } } -func newDeploymentControllerTestCanary() *flaggerv1.Canary { +func newDeploymentControllerTestCanary(cc canaryConfigs) *flaggerv1.Canary { cd := &flaggerv1.Canary{ TypeMeta: metav1.TypeMeta{APIVersion: flaggerv1.SchemeGroupVersion.String()}, ObjectMeta: metav1.ObjectMeta{ @@ -308,7 +313,7 @@ func newDeploymentControllerTestCanary() *flaggerv1.Canary { }, Spec: flaggerv1.CanarySpec{ TargetRef: flaggerv1.CrossNamespaceObjectReference{ - Name: "podinfo", + Name: cc.targetName, APIVersion: "apps/v1", Kind: "Deployment", },