make deployment tests aligned with daemonset

This commit is contained in:
mathetake
2020-03-07 23:28:50 +09:00
parent 8e9b9a358f
commit 7fb675e8aa
8 changed files with 96 additions and 78 deletions

View File

@@ -102,7 +102,7 @@ func (c *DaemonSetController) Promote(cd *flaggerv1.Canary) error {
canary, err := c.kubeClient.AppsV1().DaemonSets(cd.Namespace).Get(targetName, metav1.GetOptions{})
if err != nil {
return fmt.Errorf("damonset %s.%s get query error %v", targetName, cd.Namespace, err)
return fmt.Errorf("damonset %s.%s get query error: %v", targetName, cd.Namespace, err)
}
label, err := c.getSelectorLabel(canary)
@@ -112,7 +112,7 @@ func (c *DaemonSetController) Promote(cd *flaggerv1.Canary) error {
primary, err := c.kubeClient.AppsV1().DaemonSets(cd.Namespace).Get(primaryName, metav1.GetOptions{})
if err != nil {
return fmt.Errorf("daemonset %s.%s get query error %w", primaryName, cd.Namespace, err)
return fmt.Errorf("daemonset %s.%s get query error: %w", primaryName, cd.Namespace, err)
}
// promote secrets and config maps
@@ -160,7 +160,7 @@ func (c *DaemonSetController) HasTargetChanged(cd *flaggerv1.Canary) (bool, erro
targetName := cd.Spec.TargetRef.Name
canary, err := c.kubeClient.AppsV1().DaemonSets(cd.Namespace).Get(targetName, metav1.GetOptions{})
if err != nil {
return false, fmt.Errorf("daemonset %s.%s get query error %w", targetName, cd.Namespace, err)
return false, fmt.Errorf("daemonset %s.%s get query error: %w", targetName, cd.Namespace, err)
}
// ignore `daemonSetScaleDownNodeSelector` node selector
@@ -182,7 +182,7 @@ func (c *DaemonSetController) GetMetadata(cd *flaggerv1.Canary) (string, map[str
canaryDae, err := c.kubeClient.AppsV1().DaemonSets(cd.Namespace).Get(targetName, metav1.GetOptions{})
if err != nil {
return "", nil, fmt.Errorf("daemonset %s.%s get query error %w", targetName, cd.Namespace, err)
return "", nil, fmt.Errorf("daemonset %s.%s get query error: %w", targetName, cd.Namespace, err)
}
label, err := c.getSelectorLabel(canaryDae)
@@ -203,7 +203,7 @@ func (c *DaemonSetController) createPrimaryDaemonSet(cd *flaggerv1.Canary) error
canaryDae, err := c.kubeClient.AppsV1().DaemonSets(cd.Namespace).Get(targetName, metav1.GetOptions{})
if err != nil {
return fmt.Errorf("daemonset %s.%s get query error %w", targetName, cd.Namespace, err)
return fmt.Errorf("daemonset %s.%s get query error: %w", targetName, cd.Namespace, err)
}
if canaryDae.Spec.UpdateStrategy.Type != "" &&

View File

@@ -16,7 +16,7 @@ func (c *DaemonSetController) IsPrimaryReady(cd *flaggerv1.Canary) error {
primaryName := fmt.Sprintf("%s-primary", cd.Spec.TargetRef.Name)
primary, err := c.kubeClient.AppsV1().DaemonSets(cd.Namespace).Get(primaryName, metav1.GetOptions{})
if err != nil {
return fmt.Errorf("daemonset %s.%s get query error %w", primaryName, cd.Namespace, err)
return fmt.Errorf("daemonset %s.%s get query error: %w", primaryName, cd.Namespace, err)
}
_, err = c.isDaemonSetReady(cd, primary)
@@ -32,7 +32,7 @@ func (c *DaemonSetController) IsCanaryReady(cd *flaggerv1.Canary) (bool, error)
targetName := cd.Spec.TargetRef.Name
canary, err := c.kubeClient.AppsV1().DaemonSets(cd.Namespace).Get(targetName, metav1.GetOptions{})
if err != nil {
return true, fmt.Errorf("daemonset %s.%s get query error %w", targetName, cd.Namespace, err)
return true, fmt.Errorf("daemonset %s.%s get query error: %w", targetName, cd.Namespace, err)
}
retriable, err := c.isDaemonSetReady(cd, canary)

View File

@@ -70,7 +70,7 @@ func (c *DeploymentController) Promote(cd *flaggerv1.Canary) error {
canary, err := c.kubeClient.AppsV1().Deployments(cd.Namespace).Get(targetName, metav1.GetOptions{})
if err != nil {
return fmt.Errorf("deployment %s.%s query error %v", targetName, cd.Namespace, err)
return fmt.Errorf("deployment %s.%s query error: %v", targetName, cd.Namespace, err)
}
label, err := c.getSelectorLabel(canary)
@@ -80,7 +80,7 @@ func (c *DeploymentController) Promote(cd *flaggerv1.Canary) error {
primary, err := c.kubeClient.AppsV1().Deployments(cd.Namespace).Get(primaryName, metav1.GetOptions{})
if err != nil {
return fmt.Errorf("deployment %s.%s query error %v", primaryName, cd.Namespace, err)
return fmt.Errorf("deployment %s.%s query error: %v", primaryName, cd.Namespace, err)
}
// promote secrets and config maps
@@ -188,7 +188,7 @@ func (c *DeploymentController) GetMetadata(cd *flaggerv1.Canary) (string, map[st
canaryDep, err := c.kubeClient.AppsV1().Deployments(cd.Namespace).Get(targetName, metav1.GetOptions{})
if err != nil {
return "", nil, fmt.Errorf("deployment %s.%s get query error %w", targetName, cd.Namespace, err)
return "", nil, fmt.Errorf("deployment %s.%s get query error: %w", targetName, cd.Namespace, err)
}
label, err := c.getSelectorLabel(canaryDep)
@@ -209,7 +209,7 @@ func (c *DeploymentController) createPrimaryDeployment(cd *flaggerv1.Canary) err
canaryDep, err := c.kubeClient.AppsV1().Deployments(cd.Namespace).Get(targetName, metav1.GetOptions{})
if err != nil {
return fmt.Errorf("deplyoment %s.%s get query error %w", targetName, cd.Namespace, err)
return fmt.Errorf("deplyoment %s.%s get query error: %w", targetName, cd.Namespace, err)
}
label, err := c.getSelectorLabel(canaryDep)

View File

@@ -72,68 +72,6 @@ func TestDeploymentController_Promote(t *testing.T) {
assert.Equal(t, int32(2), hpaPrimary.Spec.MaxReplicas)
}
func TestDeploymentController_IsReady(t *testing.T) {
mocks := newDeploymentFixture()
err := mocks.controller.Initialize(mocks.canary, true)
require.NoError(t, err, "Expected primary readiness check to fail")
err = mocks.controller.IsPrimaryReady(mocks.canary)
require.Error(t, err)
_, err = mocks.controller.IsCanaryReady(mocks.canary)
require.NoError(t, err)
}
func TestDeploymentController_SetFailedChecks(t *testing.T) {
mocks := newDeploymentFixture()
err := mocks.controller.Initialize(mocks.canary, true)
require.NoError(t, err)
err = mocks.controller.SetStatusFailedChecks(mocks.canary, 1)
require.NoError(t, err)
res, err := mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Get("podinfo", metav1.GetOptions{})
require.NoError(t, err)
assert.Equal(t, 1, res.Status.FailedChecks)
}
func TestDeploymentController_SetState(t *testing.T) {
mocks := newDeploymentFixture()
err := mocks.controller.Initialize(mocks.canary, true)
require.NoError(t, err)
err = mocks.controller.SetStatusPhase(mocks.canary, flaggerv1.CanaryPhaseProgressing)
require.NoError(t, err)
res, err := mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Get("podinfo", metav1.GetOptions{})
require.NoError(t, err)
assert.Equal(t, flaggerv1.CanaryPhaseProgressing, res.Status.Phase)
}
func TestDeploymentController_SyncStatus(t *testing.T) {
mocks := newDeploymentFixture()
err := mocks.controller.Initialize(mocks.canary, true)
require.NoError(t, err)
status := flaggerv1.CanaryStatus{
Phase: flaggerv1.CanaryPhaseProgressing,
FailedChecks: 2,
}
err = mocks.controller.SyncStatus(mocks.canary, status)
require.NoError(t, err)
res, err := mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Get("podinfo", metav1.GetOptions{})
require.NoError(t, err)
assert.Equal(t, status.Phase, res.Status.Phase)
assert.Equal(t, status.FailedChecks, res.Status.FailedChecks)
require.NotNil(t, res.Status.TrackedConfigs)
configs := *res.Status.TrackedConfigs
secret := newDeploymentControllerTestSecret()
_, exists := configs["secret/"+secret.GetName()]
assert.True(t, exists, "Secret %s not found in status", secret.GetName())
}
func TestDeploymentController_ScaleToZero(t *testing.T) {
mocks := newDeploymentFixture()
err := mocks.controller.Initialize(mocks.canary, true)

View File

@@ -17,7 +17,7 @@ func (c *DeploymentController) IsPrimaryReady(cd *flaggerv1.Canary) error {
primaryName := fmt.Sprintf("%s-primary", cd.Spec.TargetRef.Name)
primary, err := c.kubeClient.AppsV1().Deployments(cd.Namespace).Get(primaryName, metav1.GetOptions{})
if err != nil {
return fmt.Errorf("deployment %s.%s get query error %w", primaryName, cd.Namespace, err)
return fmt.Errorf("deployment %s.%s get query error: %w", primaryName, cd.Namespace, err)
}
_, err = c.isDeploymentReady(primary, cd.GetProgressDeadlineSeconds())

View File

@@ -0,0 +1,19 @@
package canary
import (
"testing"
"github.com/stretchr/testify/require"
)
func TestDeploymentController_IsReady(t *testing.T) {
mocks := newDeploymentFixture()
err := mocks.controller.Initialize(mocks.canary, true)
require.NoError(t, err, "Expected primary readiness check to fail")
err = mocks.controller.IsPrimaryReady(mocks.canary)
require.Error(t, err)
_, err = mocks.controller.IsCanaryReady(mocks.canary)
require.NoError(t, err)
}

View File

@@ -0,0 +1,61 @@
package canary
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
flaggerv1 "github.com/weaveworks/flagger/pkg/apis/flagger/v1beta1"
)
func TestDeploymentController_SyncStatus(t *testing.T) {
mocks := newDeploymentFixture()
err := mocks.controller.Initialize(mocks.canary, true)
require.NoError(t, err)
status := flaggerv1.CanaryStatus{
Phase: flaggerv1.CanaryPhaseProgressing,
FailedChecks: 2,
}
err = mocks.controller.SyncStatus(mocks.canary, status)
require.NoError(t, err)
res, err := mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Get("podinfo", metav1.GetOptions{})
require.NoError(t, err)
assert.Equal(t, status.Phase, res.Status.Phase)
assert.Equal(t, status.FailedChecks, res.Status.FailedChecks)
require.NotNil(t, res.Status.TrackedConfigs)
configs := *res.Status.TrackedConfigs
secret := newDeploymentControllerTestSecret()
_, exists := configs["secret/"+secret.GetName()]
assert.True(t, exists, "Secret %s not found in status", secret.GetName())
}
func TestDeploymentController_SetFailedChecks(t *testing.T) {
mocks := newDeploymentFixture()
err := mocks.controller.Initialize(mocks.canary, true)
require.NoError(t, err)
err = mocks.controller.SetStatusFailedChecks(mocks.canary, 1)
require.NoError(t, err)
res, err := mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Get("podinfo", metav1.GetOptions{})
require.NoError(t, err)
assert.Equal(t, 1, res.Status.FailedChecks)
}
func TestDeploymentController_SetState(t *testing.T) {
mocks := newDeploymentFixture()
err := mocks.controller.Initialize(mocks.canary, true)
require.NoError(t, err)
err = mocks.controller.SetStatusPhase(mocks.canary, flaggerv1.CanaryPhaseProgressing)
require.NoError(t, err)
res, err := mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Get("podinfo", metav1.GetOptions{})
require.NoError(t, err)
assert.Equal(t, flaggerv1.CanaryPhaseProgressing, res.Status.Phase)
}

View File

@@ -156,12 +156,12 @@ func (c *ServiceController) Promote(cd *flaggerv1.Canary) error {
canary, err := c.kubeClient.CoreV1().Services(cd.Namespace).Get(targetName, metav1.GetOptions{})
if err != nil {
return fmt.Errorf("service %s.%s get query error %w", targetName, cd.Namespace, err)
return fmt.Errorf("service %s.%s get query error: %w", targetName, cd.Namespace, err)
}
primary, err := c.kubeClient.CoreV1().Services(cd.Namespace).Get(primaryName, metav1.GetOptions{})
if err != nil {
return fmt.Errorf("service %s.%s get query error %w", primaryName, cd.Namespace, err)
return fmt.Errorf("service %s.%s get query error: %w", primaryName, cd.Namespace, err)
}
primaryCopy := canary.DeepCopy()
@@ -187,7 +187,7 @@ func (c *ServiceController) HasTargetChanged(cd *flaggerv1.Canary) (bool, error)
targetName := cd.Spec.TargetRef.Name
canary, err := c.kubeClient.CoreV1().Services(cd.Namespace).Get(targetName, metav1.GetOptions{})
if err != nil {
return false, fmt.Errorf("service %s.%s get query error %w", targetName, cd.Namespace, err)
return false, fmt.Errorf("service %s.%s get query error: %w", targetName, cd.Namespace, err)
}
return hasSpecChanged(cd, canary.Spec)
}
@@ -204,7 +204,7 @@ func (c *ServiceController) ScaleFromZero(_ *flaggerv1.Canary) error {
func (c *ServiceController) SyncStatus(cd *flaggerv1.Canary, status flaggerv1.CanaryStatus) error {
dep, err := c.kubeClient.CoreV1().Services(cd.Namespace).Get(cd.Spec.TargetRef.Name, metav1.GetOptions{})
if err != nil {
return fmt.Errorf("service %s.%s get query error %w", cd.Spec.TargetRef.Name, cd.Namespace, err)
return fmt.Errorf("service %s.%s get query error: %w", cd.Spec.TargetRef.Name, cd.Namespace, err)
}
return syncCanaryStatus(c.flaggerClient, cd, status, dep.Spec, func(cdCopy *flaggerv1.Canary) {})