From c7dad5b53242cf22ade0be4360aec1e0bdcfed40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Renato=20Vass=C3=A3o?= Date: Thu, 11 Sep 2025 13:07:47 -0300 Subject: [PATCH] Use BuildCookie function when setting cookie in Istio router MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Renato Vassão --- pkg/router/istio.go | 4 +--- pkg/router/istio_test.go | 22 ++++++++++++++++++++-- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/pkg/router/istio.go b/pkg/router/istio.go index 75b3701a..c588847f 100644 --- a/pkg/router/istio.go +++ b/pkg/router/istio.go @@ -532,9 +532,7 @@ func (ir *IstioRouter) SetRoutes( } } routeDest.Headers.Response.Add = map[string]string{ - setCookieHeader: fmt.Sprintf("%s; %s=%d", canary.Status.SessionAffinityCookie, maxAgeAttr, - canary.Spec.Analysis.SessionAffinity.GetMaxAge(), - ), + setCookieHeader: canary.Spec.Analysis.SessionAffinity.BuildCookie(canary.Status.SessionAffinityCookie), } } weightedRoute.Route[i] = routeDest diff --git a/pkg/router/istio_test.go b/pkg/router/istio_test.go index 9bebeb0e..fb2ce003 100644 --- a/pkg/router/istio_test.go +++ b/pkg/router/istio_test.go @@ -190,8 +190,14 @@ func TestIstioRouter_SetRoutes(t *testing.T) { cookieKey := "flagger-cookie" // enable session affinity and start canary run canary.Spec.Analysis.SessionAffinity = &v1beta1.SessionAffinity{ - CookieName: cookieKey, - MaxAge: 300, + CookieName: cookieKey, + Domain: "flagger.app", + HttpOnly: true, + MaxAge: 300, + Partitioned: true, + Path: "/app", + SameSite: "Strict", + Secure: true, } err := router.SetRoutes(canary, 0, 10, false) @@ -231,7 +237,13 @@ func TestIstioRouter_SetRoutes(t *testing.T) { val, ok := routeDest.Headers.Response.Add[setCookieHeader] assert.True(t, ok) assert.True(t, strings.HasPrefix(val, cookieKey)) + assert.True(t, strings.Contains(val, "Domain=flagger.app")) + assert.True(t, strings.Contains(val, "HttpOnly")) assert.True(t, strings.Contains(val, "Max-Age=300")) + assert.True(t, strings.Contains(val, "Partitioned")) + assert.True(t, strings.Contains(val, "Path=/app")) + assert.True(t, strings.Contains(val, "SameSite=Strict")) + assert.True(t, strings.Contains(val, "Secure")) } } assert.True(t, strings.HasPrefix(canary.Status.SessionAffinityCookie, cookieKey)) @@ -286,7 +298,13 @@ func TestIstioRouter_SetRoutes(t *testing.T) { val, ok := routeDest.Headers.Response.Add[setCookieHeader] assert.True(t, ok) assert.True(t, strings.HasPrefix(val, cookieKey)) + assert.True(t, strings.Contains(val, "Domain=flagger.app")) + assert.True(t, strings.Contains(val, "HttpOnly")) assert.True(t, strings.Contains(val, "Max-Age=300")) + assert.True(t, strings.Contains(val, "Partitioned")) + assert.True(t, strings.Contains(val, "Path=/app")) + assert.True(t, strings.Contains(val, "SameSite=Strict")) + assert.True(t, strings.Contains(val, "Secure")) } } assert.True(t, strings.HasPrefix(canary.Status.SessionAffinityCookie, cookieKey))