Skip to content

Commit 25f575c

Browse files
Use BuildCookie function when setting cookie in Gateway API routers
Signed-off-by: Renato Vassão <[email protected]>
1 parent a27a19a commit 25f575c

File tree

4 files changed

+56
-16
lines changed

4 files changed

+56
-16
lines changed

pkg/router/gateway_api.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -482,10 +482,8 @@ func (gwr *GatewayAPIRouter) getSessionAffinityRouteRules(canary *flaggerv1.Cana
482482
ResponseHeaderModifier: &v1.HTTPHeaderFilter{
483483
Add: []v1.HTTPHeader{
484484
{
485-
Name: setCookieHeader,
486-
Value: fmt.Sprintf("%s; %s=%d", canary.Status.SessionAffinityCookie, maxAgeAttr,
487-
canary.Spec.Analysis.SessionAffinity.GetMaxAge(),
488-
),
485+
Name: setCookieHeader,
486+
Value: canary.Spec.Analysis.SessionAffinity.BuildCookie(canary.Status.SessionAffinityCookie),
489487
},
490488
},
491489
},

pkg/router/gateway_api_test.go

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,14 @@ func TestGatewayAPIRouter_Routes(t *testing.T) {
9999
cookieKey := "flagger-cookie"
100100
// enable session affinity and start canary run
101101
canary.Spec.Analysis.SessionAffinity = &flaggerv1.SessionAffinity{
102-
CookieName: cookieKey,
103-
MaxAge: 300,
102+
CookieName: cookieKey,
103+
Domain: "flagger.app",
104+
HttpOnly: true,
105+
MaxAge: 300,
106+
Partitioned: true,
107+
Path: "/app",
108+
SameSite: "Strict",
109+
Secure: true,
104110
}
105111
_, pSvcName, cSvcName := canary.GetServiceNames()
106112

@@ -137,10 +143,18 @@ func TestGatewayAPIRouter_Routes(t *testing.T) {
137143
if string(backendRef.Name) == cSvcName {
138144
found = true
139145
filter := backendRef.Filters[0]
146+
val := filter.ResponseHeaderModifier.Add[0].Value
140147
assert.Equal(t, filter.Type, v1.HTTPRouteFilterResponseHeaderModifier)
141148
assert.NotNil(t, filter.ResponseHeaderModifier)
142149
assert.Equal(t, string(filter.ResponseHeaderModifier.Add[0].Name), setCookieHeader)
143-
assert.Equal(t, filter.ResponseHeaderModifier.Add[0].Value, fmt.Sprintf("%s; %s=%d", canary.Status.SessionAffinityCookie, maxAgeAttr, 300))
150+
assert.True(t, strings.HasPrefix(val, cookieKey))
151+
assert.True(t, strings.Contains(val, "Domain=flagger.app"))
152+
assert.True(t, strings.Contains(val, "HttpOnly"))
153+
assert.True(t, strings.Contains(val, "Max-Age=300"))
154+
assert.True(t, strings.Contains(val, "Partitioned"))
155+
assert.True(t, strings.Contains(val, "Path=/app"))
156+
assert.True(t, strings.Contains(val, "SameSite=Strict"))
157+
assert.True(t, strings.Contains(val, "Secure"))
144158
assert.Equal(t, *backendRef.Weight, int32(10))
145159
}
146160
if string(backendRef.Name) == pSvcName {
@@ -193,10 +207,18 @@ func TestGatewayAPIRouter_Routes(t *testing.T) {
193207
if string(backendRef.Name) == cSvcName {
194208
found = true
195209
filter := backendRef.Filters[0]
210+
val := filter.ResponseHeaderModifier.Add[0].Value
196211
assert.Equal(t, filter.Type, v1.HTTPRouteFilterResponseHeaderModifier)
197212
assert.NotNil(t, filter.ResponseHeaderModifier)
198213
assert.Equal(t, string(filter.ResponseHeaderModifier.Add[0].Name), setCookieHeader)
199-
assert.Equal(t, filter.ResponseHeaderModifier.Add[0].Value, fmt.Sprintf("%s; %s=%d", canary.Status.SessionAffinityCookie, maxAgeAttr, 300))
214+
assert.True(t, strings.HasPrefix(val, cookieKey))
215+
assert.True(t, strings.Contains(val, "Domain=flagger.app"))
216+
assert.True(t, strings.Contains(val, "HttpOnly"))
217+
assert.True(t, strings.Contains(val, "Max-Age=300"))
218+
assert.True(t, strings.Contains(val, "Partitioned"))
219+
assert.True(t, strings.Contains(val, "Path=/app"))
220+
assert.True(t, strings.Contains(val, "SameSite=Strict"))
221+
assert.True(t, strings.Contains(val, "Secure"))
200222

201223
assert.Equal(t, *backendRef.Weight, int32(50))
202224
}

pkg/router/gateway_api_v1beta1.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -423,10 +423,8 @@ func (gwr *GatewayAPIV1Beta1Router) getSessionAffinityRouteRules(canary *flagger
423423
ResponseHeaderModifier: &v1beta1.HTTPHeaderFilter{
424424
Add: []v1beta1.HTTPHeader{
425425
{
426-
Name: setCookieHeader,
427-
Value: fmt.Sprintf("%s; %s=%d", canary.Status.SessionAffinityCookie, maxAgeAttr,
428-
canary.Spec.Analysis.SessionAffinity.GetMaxAge(),
429-
),
426+
Name: setCookieHeader,
427+
Value: canary.Spec.Analysis.SessionAffinity.BuildCookie(canary.Status.SessionAffinityCookie),
430428
},
431429
},
432430
},

pkg/router/gateway_api_v1beta1_test.go

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,14 @@ func TestGatewayAPIV1Beta1Router_Routes(t *testing.T) {
9696
cookieKey := "flagger-cookie"
9797
// enable session affinity and start canary run
9898
canary.Spec.Analysis.SessionAffinity = &flaggerv1.SessionAffinity{
99-
CookieName: cookieKey,
100-
MaxAge: 300,
99+
CookieName: cookieKey,
100+
Domain: "flagger.app",
101+
HttpOnly: true,
102+
MaxAge: 300,
103+
Partitioned: true,
104+
Path: "/app",
105+
SameSite: "Strict",
106+
Secure: true,
101107
}
102108
_, pSvcName, cSvcName := canary.GetServiceNames()
103109

@@ -133,10 +139,18 @@ func TestGatewayAPIV1Beta1Router_Routes(t *testing.T) {
133139
if string(backendRef.Name) == cSvcName {
134140
found = true
135141
filter := backendRef.Filters[0]
142+
val := filter.ResponseHeaderModifier.Add[0].Value
136143
assert.Equal(t, filter.Type, v1beta1.HTTPRouteFilterResponseHeaderModifier)
137144
assert.NotNil(t, filter.ResponseHeaderModifier)
138145
assert.Equal(t, string(filter.ResponseHeaderModifier.Add[0].Name), setCookieHeader)
139-
assert.Equal(t, filter.ResponseHeaderModifier.Add[0].Value, fmt.Sprintf("%s; %s=%d", canary.Status.SessionAffinityCookie, maxAgeAttr, 300))
146+
assert.True(t, strings.HasPrefix(val, cookieKey))
147+
assert.True(t, strings.Contains(val, "Domain=flagger.app"))
148+
assert.True(t, strings.Contains(val, "HttpOnly"))
149+
assert.True(t, strings.Contains(val, "Max-Age=300"))
150+
assert.True(t, strings.Contains(val, "Partitioned"))
151+
assert.True(t, strings.Contains(val, "Path=/app"))
152+
assert.True(t, strings.Contains(val, "SameSite=Strict"))
153+
assert.True(t, strings.Contains(val, "Secure"))
140154
assert.Equal(t, *backendRef.Weight, int32(10))
141155
}
142156
if string(backendRef.Name) == pSvcName {
@@ -189,10 +203,18 @@ func TestGatewayAPIV1Beta1Router_Routes(t *testing.T) {
189203
if string(backendRef.Name) == cSvcName {
190204
found = true
191205
filter := backendRef.Filters[0]
206+
val := filter.ResponseHeaderModifier.Add[0].Value
192207
assert.Equal(t, filter.Type, v1beta1.HTTPRouteFilterResponseHeaderModifier)
193208
assert.NotNil(t, filter.ResponseHeaderModifier)
194209
assert.Equal(t, string(filter.ResponseHeaderModifier.Add[0].Name), setCookieHeader)
195-
assert.Equal(t, filter.ResponseHeaderModifier.Add[0].Value, fmt.Sprintf("%s; %s=%d", canary.Status.SessionAffinityCookie, maxAgeAttr, 300))
210+
assert.True(t, strings.HasPrefix(val, cookieKey))
211+
assert.True(t, strings.Contains(val, "Domain=flagger.app"))
212+
assert.True(t, strings.Contains(val, "HttpOnly"))
213+
assert.True(t, strings.Contains(val, "Max-Age=300"))
214+
assert.True(t, strings.Contains(val, "Partitioned"))
215+
assert.True(t, strings.Contains(val, "Path=/app"))
216+
assert.True(t, strings.Contains(val, "SameSite=Strict"))
217+
assert.True(t, strings.Contains(val, "Secure"))
196218

197219
assert.Equal(t, *backendRef.Weight, int32(50))
198220
}

0 commit comments

Comments
 (0)