1
16
17 package tests
18
19 import (
20 "testing"
21
22 "k8s.io/apimachinery/pkg/types"
23
24 "sigs.k8s.io/gateway-api/conformance/utils/http"
25 "sigs.k8s.io/gateway-api/conformance/utils/kubernetes"
26 "sigs.k8s.io/gateway-api/conformance/utils/suite"
27 )
28
29 func init() {
30 ConformanceTests = append(ConformanceTests, HTTPRouteRequestMirror)
31 }
32
33 var HTTPRouteRequestMirror = suite.ConformanceTest{
34 ShortName: "HTTPRouteRequestMirror",
35 Description: "An HTTPRoute with request mirror filter",
36 Manifests: []string{"tests/httproute-request-mirror.yaml"},
37 Features: []suite.SupportedFeature{
38 suite.SupportGateway,
39 suite.SupportHTTPRoute,
40 suite.SupportHTTPRouteRequestMirror,
41 },
42 Test: func(t *testing.T, suite *suite.ConformanceTestSuite) {
43 ns := "gateway-conformance-infra"
44 routeNN := types.NamespacedName{Name: "request-mirror", Namespace: ns}
45 gwNN := types.NamespacedName{Name: "same-namespace", Namespace: ns}
46 gwAddr := kubernetes.GatewayAndHTTPRoutesMustBeAccepted(t, suite.Client, suite.TimeoutConfig, suite.ControllerName, kubernetes.NewGatewayRef(gwNN), routeNN)
47
48 testCases := []http.ExpectedResponse{
49 {
50 Request: http.Request{
51 Path: "/mirror",
52 },
53 ExpectedRequest: &http.ExpectedRequest{
54 Request: http.Request{
55 Path: "/mirror",
56 },
57 },
58 Backend: "infra-backend-v1",
59 MirroredTo: []http.BackendRef{{
60 Name: "infra-backend-v2",
61 Namespace: ns,
62 }},
63 Namespace: ns,
64 },
65 {
66 Request: http.Request{
67 Path: "/mirror-and-modify-headers",
68 Headers: map[string]string{
69 "X-Header-Remove": "remove-val",
70 "X-Header-Add-Append": "append-val-1",
71 },
72 },
73 ExpectedRequest: &http.ExpectedRequest{
74 Request: http.Request{
75 Path: "/mirror-and-modify-headers",
76 Headers: map[string]string{
77 "X-Header-Add": "header-val-1",
78 "X-Header-Add-Append": "append-val-1,header-val-2",
79 "X-Header-Set": "set-overwrites-values",
80 },
81 },
82 AbsentHeaders: []string{"X-Header-Remove"},
83 },
84 Namespace: ns,
85 Backend: "infra-backend-v1",
86 MirroredTo: []http.BackendRef{{
87 Name: "infra-backend-v2",
88 Namespace: ns,
89 }},
90 },
91 }
92 for i := range testCases {
93
94
95 tc := testCases[i]
96 t.Run(tc.GetTestCaseName(i), func(t *testing.T) {
97 t.Parallel()
98 http.MakeRequestAndExpectEventuallyConsistentResponse(t, suite.RoundTripper, suite.TimeoutConfig, gwAddr, tc)
99 http.ExpectMirroredRequest(t, suite.Client, suite.Clientset, tc.MirroredTo, tc.Request.Path)
100 })
101 }
102 },
103 }
104
View as plain text