mirror of
https://github.com/fluxcd/flagger.git
synced 2026-04-15 06:57:34 +00:00
Add unit tests for canary phases
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user