Skip to content

Commit c2f2195

Browse files
committed
Use port from json body and go.mod replace
Signed-off-by: Daneyon Hansen <daneyon.hansen@solo.io>
1 parent bb64f3a commit c2f2195

File tree

4 files changed

+28
-39
lines changed

4 files changed

+28
-39
lines changed

conformance/resources/base.yaml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ spec:
7777
spec:
7878
containers:
7979
- name: echoserver
80-
image: gcr.io/k8s-staging-gateway-api/echo-basic:v20240412-v1.0.0-394-g40c666fd
80+
image: gcr.io/k8s-staging-gateway-api/echo-basic:v20251106-v1.3.0-263-g47c3435c
8181
ports:
8282
- containerPort: 3000
8383
readinessProbe:
@@ -121,7 +121,7 @@ spec:
121121
spec:
122122
containers:
123123
- name: echoserver
124-
image: gcr.io/k8s-staging-gateway-api/echo-basic:v20240412-v1.0.0-394-g40c666fd
124+
image: gcr.io/k8s-staging-gateway-api/echo-basic:v20251106-v1.3.0-263-g47c3435c
125125
ports:
126126
- containerPort: 3000
127127
readinessProbe:
@@ -360,7 +360,7 @@ spec:
360360
spec:
361361
containers:
362362
- name: echoserver-3000
363-
image: gcr.io/k8s-staging-gateway-api/echo-basic:v20240412-v1.0.0-394-g40c666fd
363+
image: gcr.io/k8s-staging-gateway-api/echo-basic:v20251106-v1.3.0-263-g47c3435c
364364
ports:
365365
- containerPort: 3000
366366
readinessProbe:
@@ -390,7 +390,7 @@ spec:
390390
fieldRef:
391391
fieldPath: status.podIP
392392
- name: echoserver-3002
393-
image: gcr.io/k8s-staging-gateway-api/echo-basic:v20240412-v1.0.0-394-g40c666fd
393+
image: gcr.io/k8s-staging-gateway-api/echo-basic:v20251106-v1.3.0-263-g47c3435c
394394
ports:
395395
- containerPort: 3002
396396
readinessProbe:
@@ -420,7 +420,7 @@ spec:
420420
fieldRef:
421421
fieldPath: status.podIP
422422
- name: echoserver-3004
423-
image: gcr.io/k8s-staging-gateway-api/echo-basic:v20240412-v1.0.0-394-g40c666fd
423+
image: gcr.io/k8s-staging-gateway-api/echo-basic:v20251106-v1.3.0-263-g47c3435c
424424
ports:
425425
- containerPort: 3004
426426
readinessProbe:

conformance/tests/gateway_following_epp_routing_dp.go

Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -208,38 +208,37 @@ func assertTrafficOnlyReachesToExpectedPodsDP(
208208
if err := gwhttp.CompareRoundTrip(t, &r, cReq, cRes, expected); err != nil {
209209
return fmt.Errorf("expectation failed: %w", err)
210210
}
211-
// Enforce no leakage to non-selected pods (ports/ranks are internal).
211+
// Enforce no leakage to non-selected pods.
212212
if !slices.Contains(expectedPodNames, cReq.Pod) {
213213
return fmt.Errorf("unexpected pod %q (expected one of %v)", cReq.Pod, expectedPodNames)
214214
}
215215

216-
// Validate X-Echo-HTTP-Port vs EPP intent for the pod's IP.
217-
portHdr := getHeaderValue(cRes.Headers, "X-Echo-HTTP-Port") // Header set by backend echo server
218-
if portHdr == "" {
219-
return errors.New("missing X-Echo-HTTP-Port response header")
216+
// Validate httpPort from JSON response body vs EPP intent.
217+
if cReq.HTTPPort == "" {
218+
return errors.New("missing httpPort in echo JSON body response")
220219
}
221220
ip := podNameToIP[cReq.Pod]
222221
allowed, ok := ipToAllowedPorts[ip]
223222
if !ok {
224223
return fmt.Errorf("pod %q (IP %s) not present in EPP selection", cReq.Pod, ip)
225224
}
226225
if len(allowed) > 0 {
227-
if _, ok := allowed[portHdr]; !ok {
228-
return fmt.Errorf("unexpected X-Echo-HTTP-Port %q for IP %s (allowed: %v)", portHdr, ip, keys(allowed))
226+
if _, ok := allowed[cReq.HTTPPort]; !ok {
227+
return fmt.Errorf("unexpected httpPort %q for IP %s (allowed: %v)", cReq.HTTPPort, ip, keys(allowed))
229228
}
230229
} else {
231-
if _, ok := dpPorts[portHdr]; !ok {
232-
return fmt.Errorf("unexpected X-Echo-HTTP-Port %q for IP %s (expected one of DP ports %v)", portHdr, ip, keys(dpPorts))
230+
if _, ok := dpPorts[cReq.HTTPPort]; !ok {
231+
return fmt.Errorf("unexpected httpPort %q for IP %s (expected one of ports %v)", cReq.HTTPPort, ip, keys(dpPorts))
233232
}
234233
}
235234

236235
return nil
237236
})
238237
}
239238
if err := g.Wait(); err != nil {
240-
t.Fatalf("Requests were not confined to expected pods (DP) or failed port-header checks: %v", err)
239+
t.Fatalf("Requests were not confined to expected pods or failed port checks: %v", err)
241240
}
242-
t.Logf("DP traffic restricted to %v and port header validated against EPP selection", expectedPodNames)
241+
t.Logf("Traffic restricted to %v and httpPort validated against EPP selection", expectedPodNames)
243242
}
244243

245244
type portSet map[string]struct{}
@@ -258,19 +257,8 @@ func keys(m portSet) []string {
258257
return out
259258
}
260259

261-
// getHeaderValue is a case-insensitive header lookup on headers using the key.
262-
func getHeaderValue(headers map[string][]string, key string) string {
263-
for k, v := range headers {
264-
if strings.EqualFold(k, key) && len(v) > 0 {
265-
return v[0]
266-
}
267-
}
268-
return ""
269-
}
270-
271-
// buildEPPHeader builds the test EPP header (HeaderTestEppEndPointSelectionKey) from ip->ports.
272-
// Empty portSet => emit just "IP". Non-empty => emit "IP:port" for each port.
273-
// Sorted for determinism.
260+
// buildEPPHeader builds the test EPP header from ip->ports. AN empty portSet => emit just "IP".
261+
// A non-empty => emit "IP:port" for each port. Sorted for determinism.
274262
func buildEPPHeader(ipToPorts map[string]portSet) string {
275263
ips := make([]string, 0, len(ipToPorts))
276264
for ip := range ipToPorts {

go.mod

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,13 @@ require (
3636
sigs.k8s.io/controller-runtime v0.22.4
3737
// Update the CONTROLLER_TOOLS_VERSION in Makefile when bumping controller-tools.
3838
sigs.k8s.io/controller-tools v0.19.0
39-
sigs.k8s.io/gateway-api v1.4.0
39+
sigs.k8s.io/gateway-api v1.3.1-0.20251106052652-079e4774d76b
4040
sigs.k8s.io/structured-merge-diff/v6 v6.3.0
4141
sigs.k8s.io/yaml v1.6.0
4242
)
4343

44+
require github.com/go-logr/zapr v1.3.0
45+
4446
require (
4547
cel.dev/expr v0.24.0 // indirect
4648
github.com/Masterminds/goutils v1.1.1 // indirect
@@ -61,7 +63,6 @@ require (
6163
github.com/fsnotify/fsnotify v1.9.0 // indirect
6264
github.com/fxamacker/cbor/v2 v2.9.0 // indirect
6365
github.com/go-logr/stdr v1.2.2 // indirect
64-
github.com/go-logr/zapr v1.3.0 // indirect
6566
github.com/go-openapi/jsonpointer v0.21.2 // indirect
6667
github.com/go-openapi/jsonreference v0.21.0 // indirect
6768
github.com/go-openapi/swag v0.23.1 // indirect
@@ -108,14 +109,14 @@ require (
108109
go.yaml.in/yaml/v3 v3.0.4 // indirect
109110
golang.org/x/crypto v0.43.0 // indirect
110111
golang.org/x/exp v0.0.0-20250808145144-a408d31f581a // indirect
111-
golang.org/x/mod v0.28.0 // indirect
112+
golang.org/x/mod v0.29.0 // indirect
112113
golang.org/x/net v0.46.0 // indirect
113114
golang.org/x/oauth2 v0.32.0 // indirect
114115
golang.org/x/sys v0.37.0 // indirect
115116
golang.org/x/term v0.36.0 // indirect
116117
golang.org/x/text v0.30.0 // indirect
117118
golang.org/x/time v0.13.0 // indirect
118-
golang.org/x/tools v0.37.0 // indirect
119+
golang.org/x/tools v0.38.0 // indirect
119120
gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect
120121
google.golang.org/genproto/googleapis/api v0.0.0-20250929231259-57b25ae835d4 // indirect
121122
google.golang.org/genproto/googleapis/rpc v0.0.0-20250922171735-9219d122eba9 // indirect

go.sum

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -311,8 +311,8 @@ golang.org/x/exp v0.0.0-20250808145144-a408d31f581a h1:Y+7uR/b1Mw2iSXZ3G//1haIiS
311311
golang.org/x/exp v0.0.0-20250808145144-a408d31f581a/go.mod h1:rT6SFzZ7oxADUDx58pcaKFTcZ+inxAa9fTrYx/uVYwg=
312312
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
313313
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
314-
golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U=
315-
golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=
314+
golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
315+
golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
316316
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
317317
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
318318
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
@@ -343,8 +343,8 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm
343343
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
344344
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
345345
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
346-
golang.org/x/tools v0.37.0 h1:DVSRzp7FwePZW356yEAChSdNcQo6Nsp+fex1SUW09lE=
347-
golang.org/x/tools v0.37.0/go.mod h1:MBN5QPQtLMHVdvsbtarmTNukZDdgwdwlO5qGacAzF0w=
346+
golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
347+
golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
348348
golang.org/x/tools/go/expect v0.1.1-deprecated h1:jpBZDwmgPhXsKZC6WhL20P4b/wmnpsEAGHaNy0n/rJM=
349349
golang.org/x/tools/go/expect v0.1.1-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
350350
golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated h1:1h2MnaIAIXISqTFKdENegdpAgUXz6NrPEsbIeWaBRvM=
@@ -409,8 +409,8 @@ sigs.k8s.io/controller-runtime v0.22.4 h1:GEjV7KV3TY8e+tJ2LCTxUTanW4z/FmNB7l327U
409409
sigs.k8s.io/controller-runtime v0.22.4/go.mod h1:+QX1XUpTXN4mLoblf4tqr5CQcyHPAki2HLXqQMY6vh8=
410410
sigs.k8s.io/controller-tools v0.19.0 h1:OU7jrPPiZusryu6YK0jYSjPqg8Vhf8cAzluP9XGI5uk=
411411
sigs.k8s.io/controller-tools v0.19.0/go.mod h1:y5HY/iNDFkmFla2CfQoVb2AQXMsBk4ad84iR1PLANB0=
412-
sigs.k8s.io/gateway-api v1.4.0 h1:ZwlNM6zOHq0h3WUX2gfByPs2yAEsy/EenYJB78jpQfQ=
413-
sigs.k8s.io/gateway-api v1.4.0/go.mod h1:AR5RSqciWP98OPckEjOjh2XJhAe2Na4LHyXD2FUY7Qk=
412+
sigs.k8s.io/gateway-api v1.3.1-0.20251106052652-079e4774d76b h1:CoVExRHGK0xoewqKEtip+CXa/PPIxiEKeNJaKdEz5o0=
413+
sigs.k8s.io/gateway-api v1.3.1-0.20251106052652-079e4774d76b/go.mod h1:eEYVpDGr0WPqR/35ZTBIWWpwKL7uUzOqlT92mmv3fus=
414414
sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 h1:IpInykpT6ceI+QxKBbEflcR5EXP7sU1kvOlxwZh5txg=
415415
sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg=
416416
sigs.k8s.io/randfill v1.0.0 h1:JfjMILfT8A6RbawdsK2JXGBR5AQVfd+9TbzrlneTyrU=

0 commit comments

Comments
 (0)