MCPcopy
hub / github.com/grafana/dskit / TestClusterValidationMiddleware

Function TestClusterValidationMiddleware

middleware/http_cluster_test.go:164–331  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

162}
163
164func TestClusterValidationMiddleware(t *testing.T) {
165 const urlPath = "/Test/Me"
166 testCases := map[string]struct {
167 header func(r *http.Request)
168 serverClusters []string
169 route string
170 expectedStatusCode int
171 expectedErrorMsg string
172 expectedLogs string
173 expectedMetrics string
174 shouldPanic bool
175 }{
176 "empty server cluster makes ClusterUnaryServerInterceptor panic": {
177 serverClusters: []string{},
178 shouldPanic: true,
179 },
180 "equal request and server clusters give no error": {
181 header: func(r *http.Request) {
182 r.Header[clusterutil.ClusterValidationLabelHeader] = []string{"cluster"}
183 },
184 serverClusters: []string{"cluster"},
185 expectedStatusCode: http.StatusOK,
186 },
187 "different request and server clusters give rise to an error including the request route if soft validation disabled": {
188 header: func(r *http.Request) {
189 r.Header[clusterutil.ClusterValidationLabelHeader] = []string{"wrong-cluster"}
190 },
191 serverClusters: []string{"cluster"},
192 // Verify that the route from the request context is used.
193 route: "test_argument",
194 expectedLogs: `level=warn path=/Test/Me method=GET cluster_validation_labels=[cluster] soft_validation=%t tenant= user_agent= host= client_address= msg="request with wrong cluster validation label" request_cluster_validation_label=wrong-cluster`,
195 expectedMetrics: `
196 # HELP test_server_invalid_cluster_validation_label_requests_total Number of requests received by server with invalid cluster validation label.
197 # TYPE test_server_invalid_cluster_validation_label_requests_total counter
198 test_server_invalid_cluster_validation_label_requests_total{cluster_validation_label="cluster",method="test_argument",protocol="http",request_cluster_validation_label="wrong-cluster"} 1
199 `,
200 expectedStatusCode: http.StatusNetworkAuthenticationRequired,
201 expectedErrorMsg: `rejected request with wrong cluster validation label "wrong-cluster" - it should be one of [cluster]`,
202 },
203 "different request and server clusters give rise to an error handling an unknown request route if soft validation disabled": {
204 header: func(r *http.Request) {
205 r.Header[clusterutil.ClusterValidationLabelHeader] = []string{"wrong-cluster"}
206 },
207 serverClusters: []string{"cluster"},
208 // Verify that an empty route in the request context is handled.
209 route: "",
210 expectedLogs: `level=warn path=/Test/Me method=GET cluster_validation_labels=[cluster] soft_validation=%t tenant= user_agent= host= client_address= msg="request with wrong cluster validation label" request_cluster_validation_label=wrong-cluster`,
211 expectedMetrics: `
212 # HELP test_server_invalid_cluster_validation_label_requests_total Number of requests received by server with invalid cluster validation label.
213 # TYPE test_server_invalid_cluster_validation_label_requests_total counter
214 test_server_invalid_cluster_validation_label_requests_total{cluster_validation_label="cluster",method="<unknown-route>",protocol="http",request_cluster_validation_label="wrong-cluster"} 1
215 `,
216 expectedStatusCode: http.StatusNetworkAuthenticationRequired,
217 expectedErrorMsg: `rejected request with wrong cluster validation label "wrong-cluster" - it should be one of [cluster]`,
218 },
219 "empty request cluster and non-empty server cluster give an error including the request route if soft validation disabled": {
220 header: func(r *http.Request) {
221 r.Header[clusterutil.ClusterValidationLabelHeader] = []string{""}

Callers

nothing calls this directly

Calls 15

createLoggerFunction · 0.85
FuncFuncType · 0.85
WithRouteNameFunction · 0.85
MergeFunction · 0.85
RunMethod · 0.80
WrapMethod · 0.65
HandleMethod · 0.65
GetMethod · 0.65
StringMethod · 0.65
EqualMethod · 0.45

Tested by

no test coverage detected