pkg/{canary,controller}: remove unused skipLivenessChecks

This commit is contained in:
mathetake
2020-03-28 18:13:00 +09:00
parent 9c46be131e
commit 65d4b28b58
18 changed files with 275 additions and 183 deletions
+4 -7
View File
@@ -15,8 +15,7 @@ func TestConfigTracker_ConfigMaps(t *testing.T) {
configMap := newDeploymentControllerTestConfigMap()
configMapProjected := newDeploymentControllerTestConfigProjected()
err := mocks.controller.Initialize(mocks.canary, true)
require.NoError(t, err)
mocks.initializeCanary(t)
depPrimary, err := mocks.kubeClient.AppsV1().Deployments("default").Get("podinfo-primary", metav1.GetOptions{})
require.NoError(t, err)
@@ -53,7 +52,7 @@ func TestConfigTracker_ConfigMaps(t *testing.T) {
configMap := newDaemonSetControllerTestConfigMap()
configMapProjected := newDaemonSetControllerTestConfigProjected()
err := mocks.controller.Initialize(mocks.canary, true)
err := mocks.controller.Initialize(mocks.canary)
require.NoError(t, err)
depPrimary, err := mocks.kubeClient.AppsV1().DaemonSets("default").Get("podinfo-primary", metav1.GetOptions{})
@@ -93,8 +92,7 @@ func TestConfigTracker_Secrets(t *testing.T) {
secret := newDeploymentControllerTestSecret()
secretProjected := newDeploymentControllerTestSecretProjected()
err := mocks.controller.Initialize(mocks.canary, true)
require.NoError(t, err)
mocks.initializeCanary(t)
depPrimary, err := mocks.kubeClient.AppsV1().Deployments("default").Get("podinfo-primary", metav1.GetOptions{})
if assert.NoError(t, err) {
@@ -131,8 +129,7 @@ func TestConfigTracker_Secrets(t *testing.T) {
secret := newDaemonSetControllerTestSecret()
secretProjected := newDaemonSetControllerTestSecretProjected()
err := mocks.controller.Initialize(mocks.canary, true)
require.NoError(t, err)
mocks.controller.Initialize(mocks.canary)
daePrimary, err := mocks.kubeClient.AppsV1().DaemonSets("default").Get("podinfo-primary", metav1.GetOptions{})
if assert.NoError(t, err) {
+1 -1
View File
@@ -13,7 +13,7 @@ type Controller interface {
SetStatusWeight(canary *flaggerv1.Canary, val int) error
SetStatusIterations(canary *flaggerv1.Canary, val int) error
SetStatusPhase(canary *flaggerv1.Canary, phase flaggerv1.CanaryPhase) error
Initialize(canary *flaggerv1.Canary, skipLivenessChecks bool) error
Initialize(canary *flaggerv1.Canary) error
Promote(canary *flaggerv1.Canary) error
HasTargetChanged(canary *flaggerv1.Canary) (bool, error)
HaveDependenciesChanged(canary *flaggerv1.Canary) (bool, error)
+2 -2
View File
@@ -74,14 +74,14 @@ func (c *DaemonSetController) ScaleFromZero(cd *flaggerv1.Canary) error {
// Initialize creates the primary DaemonSet, scales down the canary DaemonSet,
// and returns the pod selector label and container ports
func (c *DaemonSetController) Initialize(cd *flaggerv1.Canary, skipLivenessChecks bool) (err error) {
func (c *DaemonSetController) Initialize(cd *flaggerv1.Canary) (err error) {
err = c.createPrimaryDaemonSet(cd)
if err != nil {
return fmt.Errorf("createPrimaryDaemonSet failed: %w", err)
}
if cd.Status.Phase == "" || cd.Status.Phase == flaggerv1.CanaryPhaseInitializing {
if !skipLivenessChecks && !cd.SkipAnalysis() {
if !cd.SkipAnalysis() {
if err := c.IsPrimaryReady(cd); err != nil {
return fmt.Errorf("IsPrimaryReady failed: %w", err)
}
+7 -7
View File
@@ -15,7 +15,7 @@ import (
func TestDaemonSetController_Sync(t *testing.T) {
mocks := newDaemonSetFixture()
err := mocks.controller.Initialize(mocks.canary, true)
err := mocks.controller.Initialize(mocks.canary)
require.NoError(t, err)
daePrimary, err := mocks.kubeClient.AppsV1().DaemonSets("default").Get("podinfo-primary", metav1.GetOptions{})
@@ -29,7 +29,7 @@ func TestDaemonSetController_Sync(t *testing.T) {
func TestDaemonSetController_Promote(t *testing.T) {
mocks := newDaemonSetFixture()
err := mocks.controller.Initialize(mocks.canary, true)
err := mocks.controller.Initialize(mocks.canary)
require.NoError(t, err)
dae2 := newDaemonSetControllerTestPodInfoV2()
@@ -60,7 +60,7 @@ func TestDaemonSetController_NoConfigTracking(t *testing.T) {
mocks := newDaemonSetFixture()
mocks.controller.configTracker = &NopTracker{}
err := mocks.controller.Initialize(mocks.canary, true)
err := mocks.controller.Initialize(mocks.canary)
require.NoError(t, err)
daePrimary, err := mocks.kubeClient.AppsV1().DaemonSets("default").Get("podinfo-primary", metav1.GetOptions{})
@@ -75,7 +75,7 @@ func TestDaemonSetController_NoConfigTracking(t *testing.T) {
func TestDaemonSetController_HasTargetChanged(t *testing.T) {
mocks := newDaemonSetFixture()
err := mocks.controller.Initialize(mocks.canary, true)
err := mocks.controller.Initialize(mocks.canary)
require.NoError(t, err)
// save last applied hash
@@ -163,7 +163,7 @@ func TestDaemonSetController_HasTargetChanged(t *testing.T) {
func TestDaemonSetController_Scale(t *testing.T) {
t.Run("ScaleToZero", func(t *testing.T) {
mocks := newDaemonSetFixture()
err := mocks.controller.Initialize(mocks.canary, true)
err := mocks.controller.Initialize(mocks.canary)
require.NoError(t, err)
err = mocks.controller.ScaleToZero(mocks.canary)
@@ -179,7 +179,7 @@ func TestDaemonSetController_Scale(t *testing.T) {
})
t.Run("ScaleFromZeo", func(t *testing.T) {
mocks := newDaemonSetFixture()
err := mocks.controller.Initialize(mocks.canary, true)
err := mocks.controller.Initialize(mocks.canary)
require.NoError(t, err)
err = mocks.controller.ScaleFromZero(mocks.canary)
@@ -197,7 +197,7 @@ func TestDaemonSetController_Scale(t *testing.T) {
func TestDaemonSetController_Finalize(t *testing.T) {
mocks := newDaemonSetFixture()
err := mocks.controller.Initialize(mocks.canary, true)
err := mocks.controller.Initialize(mocks.canary)
require.NoError(t, err)
err = mocks.controller.Finalize(mocks.canary)
+2 -3
View File
@@ -4,7 +4,6 @@ import (
"strings"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
appsv1 "k8s.io/api/apps/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -14,8 +13,8 @@ import (
func TestDaemonSetController_IsReady(t *testing.T) {
mocks := newDaemonSetFixture()
err := mocks.controller.Initialize(mocks.canary, true)
assert.NoError(t, err, "Expected primary readiness check to fail")
err := mocks.controller.Initialize(mocks.canary)
require.NoError(t, err)
err = mocks.controller.IsPrimaryReady(mocks.canary)
require.NoError(t, err)
+3 -3
View File
@@ -12,7 +12,7 @@ import (
func TestDaemonSetController_SyncStatus(t *testing.T) {
mocks := newDaemonSetFixture()
err := mocks.controller.Initialize(mocks.canary, true)
err := mocks.controller.Initialize(mocks.canary)
require.NoError(t, err)
status := flaggerv1.CanaryStatus{
@@ -36,7 +36,7 @@ func TestDaemonSetController_SyncStatus(t *testing.T) {
func TestDaemonSetController_SetFailedChecks(t *testing.T) {
mocks := newDaemonSetFixture()
err := mocks.controller.Initialize(mocks.canary, true)
err := mocks.controller.Initialize(mocks.canary)
require.NoError(t, err)
err = mocks.controller.SetStatusFailedChecks(mocks.canary, 1)
@@ -49,7 +49,7 @@ func TestDaemonSetController_SetFailedChecks(t *testing.T) {
func TestDaemonSetController_SetState(t *testing.T) {
mocks := newDaemonSetFixture()
err := mocks.controller.Initialize(mocks.canary, true)
err := mocks.controller.Initialize(mocks.canary)
require.NoError(t, err)
err = mocks.controller.SetStatusPhase(mocks.canary, flaggerv1.CanaryPhaseProgressing)
+2 -2
View File
@@ -28,14 +28,14 @@ type DeploymentController struct {
// Initialize creates the primary deployment, hpa,
// scales to zero the canary deployment and returns the pod selector label and container ports
func (c *DeploymentController) Initialize(cd *flaggerv1.Canary, skipLivenessChecks bool) (err error) {
func (c *DeploymentController) Initialize(cd *flaggerv1.Canary) (err error) {
primaryName := fmt.Sprintf("%s-primary", cd.Spec.TargetRef.Name)
if err := c.createPrimaryDeployment(cd); err != nil {
return fmt.Errorf("createPrimaryDeployment failed: %w", err)
}
if cd.Status.Phase == "" || cd.Status.Phase == flaggerv1.CanaryPhaseInitializing {
if !skipLivenessChecks && !cd.SkipAnalysis() {
if !cd.SkipAnalysis() {
if err := c.IsPrimaryReady(cd); err != nil {
return fmt.Errorf("IsPrimaryReady failed: %w", err)
}
+21 -38
View File
@@ -15,8 +15,7 @@ import (
func TestDeploymentController_Sync(t *testing.T) {
mocks := newDeploymentFixture()
err := mocks.controller.Initialize(mocks.canary, true)
require.NoError(t, err)
mocks.initializeCanary(t)
depPrimary, err := mocks.kubeClient.AppsV1().Deployments("default").Get("podinfo-primary", metav1.GetOptions{})
require.NoError(t, err)
@@ -33,11 +32,10 @@ func TestDeploymentController_Sync(t *testing.T) {
func TestDeploymentController_Promote(t *testing.T) {
mocks := newDeploymentFixture()
err := mocks.controller.Initialize(mocks.canary, true)
require.NoError(t, err)
mocks.initializeCanary(t)
dep2 := newDeploymentControllerTestV2()
_, err = mocks.kubeClient.AppsV1().Deployments("default").Update(dep2)
_, err := mocks.kubeClient.AppsV1().Deployments("default").Update(dep2)
require.NoError(t, err)
config2 := newDeploymentControllerTestConfigMapV2()
@@ -74,10 +72,9 @@ func TestDeploymentController_Promote(t *testing.T) {
func TestDeploymentController_ScaleToZero(t *testing.T) {
mocks := newDeploymentFixture()
err := mocks.controller.Initialize(mocks.canary, true)
require.NoError(t, err)
mocks.initializeCanary(t)
err = mocks.controller.ScaleToZero(mocks.canary)
err := mocks.controller.ScaleToZero(mocks.canary)
require.NoError(t, err)
c, err := mocks.kubeClient.AppsV1().Deployments("default").Get("podinfo", metav1.GetOptions{})
@@ -88,9 +85,7 @@ func TestDeploymentController_ScaleToZero(t *testing.T) {
func TestDeploymentController_NoConfigTracking(t *testing.T) {
mocks := newDeploymentFixture()
mocks.controller.configTracker = &NopTracker{}
err := mocks.controller.Initialize(mocks.canary, true)
require.NoError(t, err)
mocks.initializeCanary(t)
depPrimary, err := mocks.kubeClient.AppsV1().Deployments("default").Get("podinfo-primary", metav1.GetOptions{})
require.NoError(t, err)
@@ -104,8 +99,7 @@ func TestDeploymentController_NoConfigTracking(t *testing.T) {
func TestDeploymentController_HasTargetChanged(t *testing.T) {
mocks := newDeploymentFixture()
err := mocks.controller.Initialize(mocks.canary, true)
require.NoError(t, err)
mocks.initializeCanary(t)
// save last applied hash
canary, err := mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Get("podinfo", metav1.GetOptions{})
@@ -190,46 +184,35 @@ func TestDeploymentController_HasTargetChanged(t *testing.T) {
}
func TestDeploymentController_Finalize(t *testing.T) {
mocks := newDeploymentFixture()
tables := []struct {
for _, tc := range []struct {
mocks deploymentControllerFixture
callInitialize bool
shouldError bool
expectedReplicas int32
canary *flaggerv1.Canary
}{
//Primary not found returns error
// primary not found returns error
{mocks, false, false, 1, mocks.canary},
//Happy path
// happy path
{mocks, true, false, 1, mocks.canary},
}
for _, table := range tables {
if table.callInitialize {
err := mocks.controller.Initialize(table.canary, true)
if err != nil {
t.Fatal(err.Error())
}
} {
if tc.callInitialize {
mocks.initializeCanary(t)
}
err := mocks.controller.Finalize(table.canary)
if table.shouldError && err == nil {
t.Error("Expected error while calling Finalize, but none was returned")
} else if !table.shouldError && err != nil {
t.Errorf("Expected no error would be returned while calling Finalize, but returned %s", err)
err := mocks.controller.Finalize(tc.canary)
if tc.shouldError {
require.Error(t, err)
} else {
require.NoError(t, err)
}
if table.expectedReplicas > 0 {
if tc.expectedReplicas > 0 {
c, err := mocks.kubeClient.AppsV1().Deployments(mocks.canary.Namespace).Get(mocks.canary.Name, metav1.GetOptions{})
if err != nil {
t.Fatal(err.Error())
}
if int32Default(c.Spec.Replicas) != table.expectedReplicas {
t.Errorf("Expected replicas %d recieved replicas %d", table.expectedReplicas, c.Spec.Replicas)
}
require.NoError(t, err)
require.Equal(t, tc.expectedReplicas, *c.Spec.Replicas)
}
}
}
+26
View File
@@ -1,6 +1,10 @@
package canary
import (
"fmt"
"testing"
"github.com/stretchr/testify/require"
"go.uber.org/zap"
appsv1 "k8s.io/api/apps/v1"
hpav2 "k8s.io/api/autoscaling/v2beta1"
@@ -24,6 +28,28 @@ type deploymentControllerFixture struct {
logger *zap.SugaredLogger
}
func (d deploymentControllerFixture) initializeCanary(t *testing.T) {
err := d.controller.Initialize(d.canary)
require.Error(t, err) // not ready yet
primaryName := fmt.Sprintf("%s-primary", d.canary.Spec.TargetRef.Name)
p, err := d.controller.kubeClient.AppsV1().
Deployments(d.canary.Namespace).Get(primaryName, metav1.GetOptions{})
require.NoError(t, err)
p.Status = appsv1.DeploymentStatus{
Replicas: 1,
UpdatedReplicas: 1,
ReadyReplicas: 1,
AvailableReplicas: 1,
}
_, err = d.controller.kubeClient.AppsV1().Deployments(d.canary.Namespace).Update(p)
require.NoError(t, err)
require.NoError(t, d.controller.Initialize(d.canary))
}
func newDeploymentFixture() deploymentControllerFixture {
// init canary
canary := newDeploymentControllerTestCanary()
+4 -3
View File
@@ -8,12 +8,13 @@ import (
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")
mocks.controller.Initialize(mocks.canary)
err = mocks.controller.IsPrimaryReady(mocks.canary)
err := mocks.controller.IsPrimaryReady(mocks.canary)
require.Error(t, err)
_, err = mocks.controller.IsCanaryReady(mocks.canary)
require.NoError(t, err)
}
// TODO: more detailed tests as daemonset
+6 -9
View File
@@ -12,14 +12,13 @@ import (
func TestDeploymentController_SyncStatus(t *testing.T) {
mocks := newDeploymentFixture()
err := mocks.controller.Initialize(mocks.canary, true)
require.NoError(t, err)
mocks.initializeCanary(t)
status := flaggerv1.CanaryStatus{
Phase: flaggerv1.CanaryPhaseProgressing,
FailedChecks: 2,
}
err = mocks.controller.SyncStatus(mocks.canary, status)
err := mocks.controller.SyncStatus(mocks.canary, status)
require.NoError(t, err)
res, err := mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Get("podinfo", metav1.GetOptions{})
@@ -36,10 +35,9 @@ func TestDeploymentController_SyncStatus(t *testing.T) {
func TestDeploymentController_SetFailedChecks(t *testing.T) {
mocks := newDeploymentFixture()
err := mocks.controller.Initialize(mocks.canary, true)
require.NoError(t, err)
mocks.initializeCanary(t)
err = mocks.controller.SetStatusFailedChecks(mocks.canary, 1)
err := mocks.controller.SetStatusFailedChecks(mocks.canary, 1)
require.NoError(t, err)
res, err := mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Get("podinfo", metav1.GetOptions{})
@@ -49,10 +47,9 @@ func TestDeploymentController_SetFailedChecks(t *testing.T) {
func TestDeploymentController_SetState(t *testing.T) {
mocks := newDeploymentFixture()
err := mocks.controller.Initialize(mocks.canary, true)
require.NoError(t, err)
mocks.initializeCanary(t)
err = mocks.controller.SetStatusPhase(mocks.canary, flaggerv1.CanaryPhaseProgressing)
err := mocks.controller.SetStatusPhase(mocks.canary, flaggerv1.CanaryPhaseProgressing)
require.NoError(t, err)
res, err := mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Get("podinfo", metav1.GetOptions{})
+1 -1
View File
@@ -47,7 +47,7 @@ func (c *ServiceController) GetMetadata(_ *flaggerv1.Canary) (string, map[string
}
// Initialize creates or updates the primary and canary services to prepare for the canary release process targeted on the K8s service
func (c *ServiceController) Initialize(cd *flaggerv1.Canary, _ bool) (err error) {
func (c *ServiceController) Initialize(cd *flaggerv1.Canary) (err error) {
targetName := cd.Spec.TargetRef.Name
primaryName := fmt.Sprintf("%s-primary", targetName)
canaryName := fmt.Sprintf("%s-canary", targetName)
+3 -4
View File
@@ -6,8 +6,7 @@ import "time"
type CanaryJob struct {
Name string
Namespace string
SkipTests bool
function func(name string, namespace string, skipTests bool)
function func(name string, namespace string)
done chan bool
ticker *time.Ticker
analysisInterval time.Duration
@@ -17,11 +16,11 @@ type CanaryJob struct {
func (j CanaryJob) Start() {
go func() {
// run the infra bootstrap on job creation
j.function(j.Name, j.Namespace, j.SkipTests)
j.function(j.Name, j.Namespace)
for {
select {
case <-j.ticker.C:
j.function(j.Name, j.Namespace, j.SkipTests)
j.function(j.Name, j.Namespace)
case <-j.done:
return
}
+7 -9
View File
@@ -83,7 +83,7 @@ func (c *Controller) scheduleCanaries() {
}
}
func (c *Controller) advanceCanary(name string, namespace string, skipLivenessChecks bool) {
func (c *Controller) advanceCanary(name string, namespace string) {
begin := time.Now()
// check if the canary exists
cd, err := c.flaggerClient.FlaggerV1beta1().Canaries(namespace).Get(name, metav1.GetOptions{})
@@ -115,7 +115,7 @@ func (c *Controller) advanceCanary(name string, namespace string, skipLivenessCh
}
// create primary
err = canaryController.Initialize(cd, skipLivenessChecks)
err = canaryController.Initialize(cd)
if err != nil {
c.recordEventWarningf(cd, "%v", err)
return
@@ -160,7 +160,7 @@ func (c *Controller) advanceCanary(name string, namespace string, skipLivenessCh
}
// check primary status
if !skipLivenessChecks && !cd.SkipAnalysis() {
if !cd.SkipAnalysis() {
if err := canaryController.IsPrimaryReady(cd); err != nil {
c.recordEventWarningf(cd, "%v", err)
return
@@ -209,12 +209,10 @@ func (c *Controller) advanceCanary(name string, namespace string, skipLivenessCh
// check canary status
var retriable = true
if !skipLivenessChecks {
retriable, err = canaryController.IsCanaryReady(cd)
if err != nil && retriable {
c.recordEventWarningf(cd, "%v", err)
return
}
retriable, err = canaryController.IsCanaryReady(cd)
if err != nil && retriable {
c.recordEventWarningf(cd, "%v", err)
return
}
// check if analysis should be skipped
+34 -34
View File
@@ -19,7 +19,7 @@ import (
func TestScheduler_DaemonSetInit(t *testing.T) {
mocks := newDaemonSetFixture(nil)
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
_, err := mocks.kubeClient.AppsV1().DaemonSets("default").Get("podinfo-primary", metav1.GetOptions{})
require.NoError(t, err)
@@ -27,7 +27,7 @@ func TestScheduler_DaemonSetInit(t *testing.T) {
func TestScheduler_DaemonSetNewRevision(t *testing.T) {
mocks := newDaemonSetFixture(nil)
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
// update
dae2 := newDaemonSetTestDaemonSetV2()
@@ -35,7 +35,7 @@ func TestScheduler_DaemonSetNewRevision(t *testing.T) {
require.NoError(t, err)
// detect changes
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
_, err = mocks.kubeClient.AppsV1().DaemonSets("default").Get("podinfo", metav1.GetOptions{})
require.NoError(t, err)
@@ -44,7 +44,7 @@ func TestScheduler_DaemonSetNewRevision(t *testing.T) {
func TestScheduler_DaemonSetRollback(t *testing.T) {
mocks := newDaemonSetFixture(nil)
// init
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
// update failed checks to max
err := mocks.deployer.SyncStatus(mocks.canary, flaggerv1.CanaryStatus{Phase: flaggerv1.CanaryPhaseProgressing, FailedChecks: 10})
@@ -68,10 +68,10 @@ func TestScheduler_DaemonSetRollback(t *testing.T) {
require.NoError(t, err)
// run metric checks
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
// finalise analysis
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
// check status
c, err = mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Get("podinfo", metav1.GetOptions{})
@@ -82,7 +82,7 @@ func TestScheduler_DaemonSetRollback(t *testing.T) {
func TestScheduler_DaemonSetSkipAnalysis(t *testing.T) {
mocks := newDaemonSetFixture(nil)
// init
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
// enable skip
cd, err := mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Get("podinfo", metav1.GetOptions{})
@@ -98,9 +98,9 @@ func TestScheduler_DaemonSetSkipAnalysis(t *testing.T) {
require.NoError(t, err)
// detect changes
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
// advance
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
c, err := mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Get("podinfo", metav1.GetOptions{})
require.NoError(t, err)
@@ -111,7 +111,7 @@ func TestScheduler_DaemonSetSkipAnalysis(t *testing.T) {
func TestScheduler_DaemonSetNewRevisionReset(t *testing.T) {
mocks := newDaemonSetFixture(nil)
// init
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
// first update
dae2 := newDaemonSetTestDaemonSetV2()
@@ -119,9 +119,9 @@ func TestScheduler_DaemonSetNewRevisionReset(t *testing.T) {
require.NoError(t, err)
// detect changes
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
// advance
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
primaryWeight, canaryWeight, mirrored, err := mocks.router.GetRoutes(mocks.canary)
require.NoError(t, err)
@@ -135,7 +135,7 @@ func TestScheduler_DaemonSetNewRevisionReset(t *testing.T) {
require.NoError(t, err)
// detect changes
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
primaryWeight, canaryWeight, mirrored, err = mocks.router.GetRoutes(mocks.canary)
require.NoError(t, err)
@@ -148,7 +148,7 @@ func TestScheduler_DaemonSetPromotion(t *testing.T) {
mocks := newDaemonSetFixture(nil)
// init
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
// check initialized status
c, err := mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Get("podinfo", metav1.GetOptions{})
@@ -161,7 +161,7 @@ func TestScheduler_DaemonSetPromotion(t *testing.T) {
require.NoError(t, err)
// detect pod spec changes
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
config2 := newDaemonSetTestConfigMapV2()
_, err = mocks.kubeClient.CoreV1().ConfigMaps("default").Update(config2)
@@ -172,7 +172,7 @@ func TestScheduler_DaemonSetPromotion(t *testing.T) {
require.NoError(t, err)
// detect configs changes
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
primaryWeight, canaryWeight, mirrored, err := mocks.router.GetRoutes(mocks.canary)
require.NoError(t, err)
@@ -183,7 +183,7 @@ func TestScheduler_DaemonSetPromotion(t *testing.T) {
require.NoError(t, err)
// advance
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
// check progressing status
c, err = mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Get("podinfo", metav1.GetOptions{})
@@ -191,7 +191,7 @@ func TestScheduler_DaemonSetPromotion(t *testing.T) {
assert.Equal(t, flaggerv1.CanaryPhaseProgressing, c.Status.Phase)
// promote
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
// check promoting status
c, err = mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Get("podinfo", metav1.GetOptions{})
@@ -199,7 +199,7 @@ func TestScheduler_DaemonSetPromotion(t *testing.T) {
assert.Equal(t, flaggerv1.CanaryPhasePromoting, c.Status.Phase)
// finalise
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
primaryWeight, canaryWeight, mirrored, err = mocks.router.GetRoutes(mocks.canary)
require.NoError(t, err)
@@ -228,7 +228,7 @@ func TestScheduler_DaemonSetPromotion(t *testing.T) {
assert.Equal(t, flaggerv1.CanaryPhaseFinalising, c.Status.Phase)
// scale canary to zero
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
c, err = mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Get("podinfo", metav1.GetOptions{})
require.NoError(t, err)
@@ -238,7 +238,7 @@ func TestScheduler_DaemonSetPromotion(t *testing.T) {
func TestScheduler_DaemonSetMirroring(t *testing.T) {
mocks := newDaemonSetFixture(newDaemonSetTestCanaryMirror())
// init
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
// update
dae2 := newDaemonSetTestDaemonSetV2()
@@ -246,10 +246,10 @@ func TestScheduler_DaemonSetMirroring(t *testing.T) {
require.NoError(t, err)
// detect pod spec changes
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
// advance
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
// check if traffic is mirrored to canary
primaryWeight, canaryWeight, mirrored, err := mocks.router.GetRoutes(mocks.canary)
@@ -259,7 +259,7 @@ func TestScheduler_DaemonSetMirroring(t *testing.T) {
assert.True(t, mirrored)
// advance
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
// check if traffic is mirrored to canary
primaryWeight, canaryWeight, mirrored, err = mocks.router.GetRoutes(mocks.canary)
@@ -272,7 +272,7 @@ func TestScheduler_DaemonSetMirroring(t *testing.T) {
func TestScheduler_DaemonSetABTesting(t *testing.T) {
mocks := newDaemonSetFixture(newDaemonSetTestCanaryAB())
// init
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
// update
dae2 := newDaemonSetTestDaemonSetV2()
@@ -280,10 +280,10 @@ func TestScheduler_DaemonSetABTesting(t *testing.T) {
require.NoError(t, err)
// detect pod spec changes
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
// advance
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
// check if traffic is routed to canary
primaryWeight, canaryWeight, mirrored, err := mocks.router.GetRoutes(mocks.canary)
@@ -300,10 +300,10 @@ func TestScheduler_DaemonSetABTesting(t *testing.T) {
require.NoError(t, err)
// advance
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
// finalising
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
// check finalising status
c, err := mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Get("podinfo", metav1.GetOptions{})
@@ -319,7 +319,7 @@ func TestScheduler_DaemonSetABTesting(t *testing.T) {
assert.Equal(t, canaryImage, primaryImage)
// shutdown canary
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
// check rollout status
c, err = mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Get("podinfo", metav1.GetOptions{})
@@ -337,7 +337,7 @@ func TestScheduler_DaemonSetPortDiscovery(t *testing.T) {
_, err = mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Update(cd)
require.NoError(t, err)
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
canarySvc, err := mocks.kubeClient.CoreV1().Services("default").Get("podinfo-canary", metav1.GetOptions{})
require.NoError(t, err)
@@ -370,7 +370,7 @@ func TestScheduler_DaemonSetTargetPortNumber(t *testing.T) {
_, err = mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Update(cd)
require.NoError(t, err)
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
canarySvc, err := mocks.kubeClient.CoreV1().Services("default").Get("podinfo-canary", metav1.GetOptions{})
require.NoError(t, err)
@@ -403,7 +403,7 @@ func TestScheduler_DaemonSetTargetPortName(t *testing.T) {
_, err = mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Update(cd)
require.NoError(t, err)
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
canarySvc, err := mocks.kubeClient.CoreV1().Services("default").Get("podinfo-canary", metav1.GetOptions{})
require.NoError(t, err)
@@ -464,5 +464,5 @@ func TestScheduler_DaemonSetAlerts(t *testing.T) {
require.NoError(t, err)
// init canary and send alerts
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
}
@@ -1,9 +1,12 @@
package controller
import (
"fmt"
"sync"
"testing"
"time"
"github.com/stretchr/testify/require"
"go.uber.org/zap"
appsv1 "k8s.io/api/apps/v1"
hpav2 "k8s.io/api/autoscaling/v2beta1"
@@ -40,6 +43,28 @@ type fixture struct {
router router.Interface
}
func (f fixture) makePrimaryReady(t *testing.T) {
primaryName := fmt.Sprintf("%s-primary", f.canary.Spec.TargetRef.Name)
f.makeReady(t, primaryName)
}
func (f fixture) makeCanaryReady(t *testing.T) {
f.makeReady(t, f.canary.Spec.TargetRef.Name)
}
func (f fixture) makeReady(t *testing.T, name string) {
p, err := f.kubeClient.AppsV1().
Deployments("default").
Get(name, metav1.GetOptions{})
require.NoError(t, err)
p.Status = appsv1.DeploymentStatus{Replicas: 1, UpdatedReplicas: 1,
ReadyReplicas: 1, AvailableReplicas: 1}
_, err = f.kubeClient.AppsV1().Deployments("default").Update(p)
require.NoError(t, err)
}
func newDeploymentFixture(c *flaggerv1.Canary) fixture {
if c == nil {
c = newDeploymentTestCanary()
+121 -54
View File
@@ -19,7 +19,7 @@ import (
func TestScheduler_DeploymentInit(t *testing.T) {
mocks := newDeploymentFixture(nil)
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
_, err := mocks.kubeClient.AppsV1().Deployments("default").Get("podinfo-primary", metav1.GetOptions{})
require.NoError(t, err)
@@ -27,7 +27,15 @@ func TestScheduler_DeploymentInit(t *testing.T) {
func TestScheduler_DeploymentNewRevision(t *testing.T) {
mocks := newDeploymentFixture(nil)
mocks.ctrl.advanceCanary("podinfo", "default", true)
// initializing ...
mocks.ctrl.advanceCanary("podinfo", "default")
// make primary ready
mocks.makePrimaryReady(t)
// initialization done
mocks.ctrl.advanceCanary("podinfo", "default")
// update
dep2 := newDeploymentTestDeploymentV2()
@@ -35,7 +43,7 @@ func TestScheduler_DeploymentNewRevision(t *testing.T) {
require.NoError(t, err)
// detect changes
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
c, err := mocks.kubeClient.AppsV1().Deployments("default").Get("podinfo", metav1.GetOptions{})
require.NoError(t, err)
@@ -44,8 +52,14 @@ func TestScheduler_DeploymentNewRevision(t *testing.T) {
func TestScheduler_DeploymentRollback(t *testing.T) {
mocks := newDeploymentFixture(nil)
// init
mocks.ctrl.advanceCanary("podinfo", "default", true)
// initializing
mocks.ctrl.advanceCanary("podinfo", "default")
// make primary ready
mocks.makePrimaryReady(t)
// initialized
mocks.ctrl.advanceCanary("podinfo", "default")
// update failed checks to max
err := mocks.deployer.SyncStatus(mocks.canary, flaggerv1.CanaryStatus{Phase: flaggerv1.CanaryPhaseProgressing, FailedChecks: 10})
@@ -68,11 +82,11 @@ func TestScheduler_DeploymentRollback(t *testing.T) {
require.NoError(t, err)
// run metric checks
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
require.NoError(t, err)
// finalise analysis
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
require.NoError(t, err)
// check status
@@ -84,8 +98,14 @@ func TestScheduler_DeploymentRollback(t *testing.T) {
func TestScheduler_DeploymentSkipAnalysis(t *testing.T) {
mocks := newDeploymentFixture(nil)
// init
mocks.ctrl.advanceCanary("podinfo", "default", true)
// initializing
mocks.ctrl.advanceCanary("podinfo", "default")
// make primary ready
mocks.makePrimaryReady(t)
// initialized
mocks.ctrl.advanceCanary("podinfo", "default")
// enable skip
cd, err := mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Get("podinfo", metav1.GetOptions{})
@@ -100,9 +120,11 @@ func TestScheduler_DeploymentSkipAnalysis(t *testing.T) {
require.NoError(t, err)
// detect changes
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
mocks.makeCanaryReady(t)
// advance
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
c, err := mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Get("podinfo", metav1.GetOptions{})
require.NoError(t, err)
@@ -118,8 +140,14 @@ func TestScheduler_DeploymentAnalysisPhases(t *testing.T) {
}
mocks := newDeploymentFixture(cd)
// init
mocks.ctrl.advanceCanary("podinfo", "default", true)
// initializing
mocks.ctrl.advanceCanary("podinfo", "default")
// make primary ready
mocks.makePrimaryReady(t)
// initialized
mocks.ctrl.advanceCanary("podinfo", "default")
require.NoError(t, assertPhase(mocks.flaggerClient, "podinfo", flaggerv1.CanaryPhaseInitialized))
// update
@@ -128,23 +156,24 @@ func TestScheduler_DeploymentAnalysisPhases(t *testing.T) {
require.NoError(t, err)
// detect changes
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
require.NoError(t, assertPhase(mocks.flaggerClient, "podinfo", flaggerv1.CanaryPhaseProgressing))
mocks.makeCanaryReady(t)
// progressing
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
require.NoError(t, assertPhase(mocks.flaggerClient, "podinfo", flaggerv1.CanaryPhaseProgressing))
// promoting
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
require.NoError(t, assertPhase(mocks.flaggerClient, "podinfo", flaggerv1.CanaryPhasePromoting))
// finalising
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
require.NoError(t, assertPhase(mocks.flaggerClient, "podinfo", flaggerv1.CanaryPhaseFinalising))
// succeeded
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
require.NoError(t, assertPhase(mocks.flaggerClient, "podinfo", flaggerv1.CanaryPhaseSucceeded))
}
@@ -156,8 +185,14 @@ func TestScheduler_DeploymentBlueGreenAnalysisPhases(t *testing.T) {
}
mocks := newDeploymentFixture(cd)
// init
mocks.ctrl.advanceCanary("podinfo", "default", true)
// initializing
mocks.ctrl.advanceCanary("podinfo", "default")
// make primary ready
mocks.makePrimaryReady(t)
// initialized
mocks.ctrl.advanceCanary("podinfo", "default")
require.NoError(t, assertPhase(mocks.flaggerClient, "podinfo", flaggerv1.CanaryPhaseInitialized))
// update
@@ -166,34 +201,42 @@ func TestScheduler_DeploymentBlueGreenAnalysisPhases(t *testing.T) {
require.NoError(t, err)
// detect changes (progressing)
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
require.NoError(t, assertPhase(mocks.flaggerClient, "podinfo", flaggerv1.CanaryPhaseProgressing))
mocks.makeCanaryReady(t)
// advance (progressing)
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
require.NoError(t, assertPhase(mocks.flaggerClient, "podinfo", flaggerv1.CanaryPhaseProgressing))
// route traffic to primary (progressing)
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
require.NoError(t, assertPhase(mocks.flaggerClient, "podinfo", flaggerv1.CanaryPhaseProgressing))
// promoting
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
require.NoError(t, assertPhase(mocks.flaggerClient, "podinfo", flaggerv1.CanaryPhasePromoting))
// finalising
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
require.NoError(t, assertPhase(mocks.flaggerClient, "podinfo", flaggerv1.CanaryPhaseFinalising))
// succeeded
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
require.NoError(t, assertPhase(mocks.flaggerClient, "podinfo", flaggerv1.CanaryPhaseSucceeded))
}
func TestScheduler_DeploymentNewRevisionReset(t *testing.T) {
mocks := newDeploymentFixture(nil)
// init
mocks.ctrl.advanceCanary("podinfo", "default", true)
// initializing
mocks.ctrl.advanceCanary("podinfo", "default")
// make primary ready
mocks.makePrimaryReady(t)
// initialized
mocks.ctrl.advanceCanary("podinfo", "default")
// first update
dep2 := newDeploymentTestDeploymentV2()
@@ -201,9 +244,11 @@ func TestScheduler_DeploymentNewRevisionReset(t *testing.T) {
require.NoError(t, err)
// detect changes
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
mocks.makeCanaryReady(t)
// advance
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
primaryWeight, canaryWeight, mirrored, err := mocks.router.GetRoutes(mocks.canary)
require.NoError(t, err)
@@ -217,7 +262,7 @@ func TestScheduler_DeploymentNewRevisionReset(t *testing.T) {
require.NoError(t, err)
// detect changes
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
primaryWeight, canaryWeight, mirrored, err = mocks.router.GetRoutes(mocks.canary)
require.NoError(t, err)
@@ -229,8 +274,14 @@ func TestScheduler_DeploymentNewRevisionReset(t *testing.T) {
func TestScheduler_DeploymentPromotion(t *testing.T) {
mocks := newDeploymentFixture(nil)
// init
mocks.ctrl.advanceCanary("podinfo", "default", true)
// initializing
mocks.ctrl.advanceCanary("podinfo", "default")
// make primary ready
mocks.makePrimaryReady(t)
// initialized
mocks.ctrl.advanceCanary("podinfo", "default")
// check initialized status
c, err := mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Get("podinfo", metav1.GetOptions{})
@@ -243,7 +294,8 @@ func TestScheduler_DeploymentPromotion(t *testing.T) {
require.NoError(t, err)
// detect pod spec changes
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
mocks.makeCanaryReady(t)
config2 := newDeploymentTestConfigMapV2()
_, err = mocks.kubeClient.CoreV1().ConfigMaps("default").Update(config2)
@@ -254,7 +306,7 @@ func TestScheduler_DeploymentPromotion(t *testing.T) {
require.NoError(t, err)
// detect configs changes
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
primaryWeight, canaryWeight, mirrored, err := mocks.router.GetRoutes(mocks.canary)
require.NoError(t, err)
@@ -265,7 +317,7 @@ func TestScheduler_DeploymentPromotion(t *testing.T) {
require.NoError(t, err)
// advance
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
// check progressing status
c, err = mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Get("podinfo", metav1.GetOptions{})
@@ -273,7 +325,7 @@ func TestScheduler_DeploymentPromotion(t *testing.T) {
assert.Equal(t, flaggerv1.CanaryPhaseProgressing, c.Status.Phase)
// promote
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
// check promoting status
c, err = mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Get("podinfo", metav1.GetOptions{})
@@ -281,7 +333,7 @@ func TestScheduler_DeploymentPromotion(t *testing.T) {
assert.Equal(t, flaggerv1.CanaryPhasePromoting, c.Status.Phase)
// finalise
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
primaryWeight, canaryWeight, mirrored, err = mocks.router.GetRoutes(mocks.canary)
require.NoError(t, err)
@@ -310,7 +362,7 @@ func TestScheduler_DeploymentPromotion(t *testing.T) {
assert.Equal(t, flaggerv1.CanaryPhaseFinalising, c.Status.Phase)
// scale canary to zero
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
c, err = mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Get("podinfo", metav1.GetOptions{})
require.NoError(t, err)
@@ -319,8 +371,15 @@ func TestScheduler_DeploymentPromotion(t *testing.T) {
func TestScheduler_DeploymentMirroring(t *testing.T) {
mocks := newDeploymentFixture(newDeploymentTestCanaryMirror())
// init
mocks.ctrl.advanceCanary("podinfo", "default", true)
// initializing
mocks.ctrl.advanceCanary("podinfo", "default")
// make primary ready
mocks.makePrimaryReady(t)
// initialized
mocks.ctrl.advanceCanary("podinfo", "default")
// update
dep2 := newDeploymentTestDeploymentV2()
@@ -328,10 +387,11 @@ func TestScheduler_DeploymentMirroring(t *testing.T) {
require.NoError(t, err)
// detect pod spec changes
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
mocks.makeCanaryReady(t)
// advance
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
// check if traffic is mirrored to canary
primaryWeight, canaryWeight, mirrored, err := mocks.router.GetRoutes(mocks.canary)
@@ -341,7 +401,7 @@ func TestScheduler_DeploymentMirroring(t *testing.T) {
assert.True(t, mirrored)
// advance
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
// check if traffic is mirrored to canary
primaryWeight, canaryWeight, mirrored, err = mocks.router.GetRoutes(mocks.canary)
@@ -353,8 +413,14 @@ func TestScheduler_DeploymentMirroring(t *testing.T) {
func TestScheduler_DeploymentABTesting(t *testing.T) {
mocks := newDeploymentFixture(newDeploymentTestCanaryAB())
// init
mocks.ctrl.advanceCanary("podinfo", "default", true)
// initializing
mocks.ctrl.advanceCanary("podinfo", "default")
// make primary ready
mocks.makePrimaryReady(t)
// initialized
mocks.ctrl.advanceCanary("podinfo", "default")
// update
dep2 := newDeploymentTestDeploymentV2()
@@ -362,10 +428,11 @@ func TestScheduler_DeploymentABTesting(t *testing.T) {
require.NoError(t, err)
// detect pod spec changes
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
mocks.makeCanaryReady(t)
// advance
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
// check if traffic is routed to canary
primaryWeight, canaryWeight, mirrored, err := mocks.router.GetRoutes(mocks.canary)
@@ -382,10 +449,10 @@ func TestScheduler_DeploymentABTesting(t *testing.T) {
require.NoError(t, err)
// advance
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
// finalising
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
// check finalising status
c, err := mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Get("podinfo", metav1.GetOptions{})
@@ -401,7 +468,7 @@ func TestScheduler_DeploymentABTesting(t *testing.T) {
assert.Equal(t, canaryImage, primaryImage)
// shutdown canary
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
// check rollout status
c, err = mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Get("podinfo", metav1.GetOptions{})
@@ -419,7 +486,7 @@ func TestScheduler_DeploymentPortDiscovery(t *testing.T) {
_, err = mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Update(cd)
require.NoError(t, err)
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
canarySvc, err := mocks.kubeClient.CoreV1().Services("default").Get("podinfo-canary", metav1.GetOptions{})
require.NoError(t, err)
@@ -452,7 +519,7 @@ func TestScheduler_DeploymentTargetPortNumber(t *testing.T) {
_, err = mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Update(cd)
require.NoError(t, err)
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
canarySvc, err := mocks.kubeClient.CoreV1().Services("default").Get("podinfo-canary", metav1.GetOptions{})
require.NoError(t, err)
@@ -485,7 +552,7 @@ func TestScheduler_DeploymentTargetPortName(t *testing.T) {
_, err = mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Update(cd)
require.NoError(t, err)
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
canarySvc, err := mocks.kubeClient.CoreV1().Services("default").Get("podinfo-canary", metav1.GetOptions{})
require.NoError(t, err)
@@ -546,5 +613,5 @@ func TestScheduler_DeploymentAlerts(t *testing.T) {
require.NoError(t, err)
// init canary and send alerts
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
}
+6 -6
View File
@@ -14,7 +14,7 @@ func TestScheduler_ServicePromotion(t *testing.T) {
mocks := newDeploymentFixture(newTestServiceCanary())
// init
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
// check initialized status
c, err := mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Get("podinfo", metav1.GetOptions{})
@@ -27,7 +27,7 @@ func TestScheduler_ServicePromotion(t *testing.T) {
require.NoError(t, err)
// detect service spec changes
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
primaryWeight, canaryWeight, mirrored, err := mocks.router.GetRoutes(mocks.canary)
require.NoError(t, err)
@@ -38,7 +38,7 @@ func TestScheduler_ServicePromotion(t *testing.T) {
require.NoError(t, err)
// advance
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
// check progressing status
c, err = mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Get("podinfo", metav1.GetOptions{})
@@ -46,7 +46,7 @@ func TestScheduler_ServicePromotion(t *testing.T) {
assert.Equal(t, flaggerv1.CanaryPhaseProgressing, c.Status.Phase)
// promote
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
// check promoting status
c, err = mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Get("podinfo", metav1.GetOptions{})
@@ -54,7 +54,7 @@ func TestScheduler_ServicePromotion(t *testing.T) {
assert.Equal(t, flaggerv1.CanaryPhasePromoting, c.Status.Phase)
// finalise
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
primaryWeight, canaryWeight, mirrored, err = mocks.router.GetRoutes(mocks.canary)
require.NoError(t, err)
@@ -75,7 +75,7 @@ func TestScheduler_ServicePromotion(t *testing.T) {
assert.Equal(t, flaggerv1.CanaryPhaseFinalising, c.Status.Phase)
// scale canary to zero
mocks.ctrl.advanceCanary("podinfo", "default", true)
mocks.ctrl.advanceCanary("podinfo", "default")
c, err = mocks.flaggerClient.FlaggerV1beta1().Canaries("default").Get("podinfo", metav1.GetOptions{})
require.NoError(t, err)