From 2663b971808458c922cb1204547f760bf10e07ed Mon Sep 17 00:00:00 2001 From: immanuwell Date: Wed, 1 Jul 2026 15:14:25 +0400 Subject: [PATCH] fix: return finalizer readiness errors Signed-off-by: immanuwell --- pkg/controller/finalizer.go | 2 +- pkg/controller/finalizer_test.go | 29 +++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/pkg/controller/finalizer.go b/pkg/controller/finalizer.go index 57ab0486..b3b3396d 100644 --- a/pkg/controller/finalizer.go +++ b/pkg/controller/finalizer.go @@ -80,7 +80,7 @@ func (c *Controller) finalize(old interface{}) error { Cap: canary.GetAnalysisInterval(), Steps: 4, } - retry.OnError(backoff, func(err error) bool { + err = retry.OnError(backoff, func(err error) bool { return err.Error() == "retriable error" }, func() error { retriable, err := canaryController.IsCanaryReady(canary) diff --git a/pkg/controller/finalizer_test.go b/pkg/controller/finalizer_test.go index 0d2827bf..1b6f24fb 100644 --- a/pkg/controller/finalizer_test.go +++ b/pkg/controller/finalizer_test.go @@ -17,10 +17,13 @@ limitations under the License. package controller import ( + "context" "fmt" "testing" "github.com/stretchr/testify/require" + appsv1 "k8s.io/api/apps/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" k8sTesting "k8s.io/client-go/testing" @@ -104,3 +107,29 @@ func TestFinalizer_removeFinalizer(t *testing.T) { } } } + +func TestFinalizer_finalizeReturnsReadinessError(t *testing.T) { + mocks := newDeploymentFixture(nil) + mocks.canary.Spec.Provider = flaggerv1.KubernetesProvider + + dep, err := mocks.kubeClient.AppsV1().Deployments("default").Get(context.TODO(), "podinfo", metav1.GetOptions{}) + require.NoError(t, err) + + dep.Status = appsv1.DeploymentStatus{ + ObservedGeneration: dep.Generation, + Conditions: []appsv1.DeploymentCondition{ + { + Type: appsv1.DeploymentProgressing, + Status: "False", + Reason: "ProgressDeadlineExceeded", + }, + }, + } + + _, err = mocks.kubeClient.AppsV1().Deployments("default").Update(context.TODO(), dep, metav1.UpdateOptions{}) + require.NoError(t, err) + + err = mocks.ctrl.finalize(mocks.canary) + require.Error(t, err) + require.ErrorContains(t, err, "canary not ready during finalizing") +}