Add unit tests for canary phases

This commit is contained in:
stefanprodan
2020-02-28 11:31:47 +02:00
parent 82660e23da
commit 3e0867040f
2 changed files with 130 additions and 0 deletions
+20
View File
@@ -1,5 +1,25 @@
package controller
import (
"fmt"
flaggerv1 "github.com/weaveworks/flagger/pkg/apis/flagger/v1beta1"
clientset "github.com/weaveworks/flagger/pkg/client/clientset/versioned"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
func assertPhase(flaggerClient clientset.Interface, canary string, phase flaggerv1.CanaryPhase) error {
c, err := flaggerClient.FlaggerV1beta1().Canaries("default").Get(canary, metav1.GetOptions{})
if err != nil {
return err
}
if c.Status.Phase != phase {
return fmt.Errorf("Got canary state %v wanted %v", c.Status.Phase, phase)
}
return nil
}
func alwaysReady() bool {
return true
}
+110
View File
@@ -144,6 +144,116 @@ func TestScheduler_DeploymentSkipAnalysis(t *testing.T) {
}
}
func TestScheduler_DeploymentAnalysisPhases(t *testing.T) {
cd := newDeploymentTestCanary()
cd.Spec.Analysis = &flaggerv1.CanaryAnalysis{
Interval: "1m",
StepWeight: 100,
}
mocks := newDeploymentFixture(cd)
// init
mocks.ctrl.advanceCanary("podinfo", "default", true)
if err := assertPhase(mocks.flaggerClient, "podinfo", flaggerv1.CanaryPhaseInitialized); err != nil {
t.Fatal(err.Error())
}
// update
dep2 := newDeploymentTestDeploymentV2()
_, err := mocks.kubeClient.AppsV1().Deployments("default").Update(dep2)
if err != nil {
t.Fatal(err.Error())
}
// detect changes
mocks.ctrl.advanceCanary("podinfo", "default", true)
if err := assertPhase(mocks.flaggerClient, "podinfo", flaggerv1.CanaryPhaseProgressing); err != nil {
t.Fatal(err.Error())
}
// progressing
mocks.ctrl.advanceCanary("podinfo", "default", true)
if err := assertPhase(mocks.flaggerClient, "podinfo", flaggerv1.CanaryPhaseProgressing); err != nil {
t.Fatal(err.Error())
}
// promoting
mocks.ctrl.advanceCanary("podinfo", "default", true)
if err := assertPhase(mocks.flaggerClient, "podinfo", flaggerv1.CanaryPhasePromoting); err != nil {
t.Fatal(err.Error())
}
// finalising
mocks.ctrl.advanceCanary("podinfo", "default", true)
if err := assertPhase(mocks.flaggerClient, "podinfo", flaggerv1.CanaryPhaseFinalising); err != nil {
t.Fatal(err.Error())
}
// succeeded
mocks.ctrl.advanceCanary("podinfo", "default", true)
if err := assertPhase(mocks.flaggerClient, "podinfo", flaggerv1.CanaryPhaseSucceeded); err != nil {
t.Fatal(err.Error())
}
}
func TestScheduler_DeploymentBlueGreenAnalysisPhases(t *testing.T) {
cd := newDeploymentTestCanary()
cd.Spec.Analysis = &flaggerv1.CanaryAnalysis{
Interval: "1m",
Iterations: 1,
}
mocks := newDeploymentFixture(cd)
// init
mocks.ctrl.advanceCanary("podinfo", "default", true)
if err := assertPhase(mocks.flaggerClient, "podinfo", flaggerv1.CanaryPhaseInitialized); err != nil {
t.Fatal(err.Error())
}
// update
dep2 := newDeploymentTestDeploymentV2()
_, err := mocks.kubeClient.AppsV1().Deployments("default").Update(dep2)
if err != nil {
t.Fatal(err.Error())
}
// detect changes (progressing)
mocks.ctrl.advanceCanary("podinfo", "default", true)
if err := assertPhase(mocks.flaggerClient, "podinfo", flaggerv1.CanaryPhaseProgressing); err != nil {
t.Fatal(err.Error())
}
// advance (progressing)
mocks.ctrl.advanceCanary("podinfo", "default", true)
if err := assertPhase(mocks.flaggerClient, "podinfo", flaggerv1.CanaryPhaseProgressing); err != nil {
t.Fatal(err.Error())
}
// route traffic to primary (progressing)
mocks.ctrl.advanceCanary("podinfo", "default", true)
if err := assertPhase(mocks.flaggerClient, "podinfo", flaggerv1.CanaryPhaseProgressing); err != nil {
t.Fatal(err.Error())
}
// promoting
mocks.ctrl.advanceCanary("podinfo", "default", true)
if err := assertPhase(mocks.flaggerClient, "podinfo", flaggerv1.CanaryPhasePromoting); err != nil {
t.Fatal(err.Error())
}
// finalising
mocks.ctrl.advanceCanary("podinfo", "default", true)
if err := assertPhase(mocks.flaggerClient, "podinfo", flaggerv1.CanaryPhaseFinalising); err != nil {
t.Fatal(err.Error())
}
// succeeded
mocks.ctrl.advanceCanary("podinfo", "default", true)
if err := assertPhase(mocks.flaggerClient, "podinfo", flaggerv1.CanaryPhaseSucceeded); err != nil {
t.Fatal(err.Error())
}
}
func TestScheduler_DeploymentNewRevisionReset(t *testing.T) {
mocks := newDeploymentFixture(nil)
// init