Skip to content

Commit edb78ff

Browse files
committed
support multiple status codes
Signed-off-by: Huabing (Robin) Zhao <[email protected]>
1 parent 2975eee commit edb78ff

File tree

2 files changed

+61
-32
lines changed

2 files changed

+61
-32
lines changed

conformance/tests/httproute-cors.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ var HTTPRouteCORS = suite.ConformanceTest{
7575
},
7676
Namespace: "",
7777
Response: http.Response{
78-
StatusCode: 200,
78+
StatusCodes: []int{200, 204},
7979
Headers: map[string]string{
8080
"access-control-allow-origin": "https://www.foo.com",
8181
"access-control-allow-methods": "GET, OPTIONS",
@@ -114,7 +114,7 @@ var HTTPRouteCORS = suite.ConformanceTest{
114114
},
115115
Namespace: "",
116116
Response: http.Response{
117-
StatusCode: 200,
117+
StatusCodes: []int{200, 204},
118118
Headers: map[string]string{
119119
"access-control-allow-origin": "https://www.bar.com",
120120
"access-control-allow-methods": "GET, OPTIONS",
@@ -170,7 +170,7 @@ var HTTPRouteCORS = suite.ConformanceTest{
170170
},
171171
},
172172
Response: http.Response{
173-
StatusCode: 200,
173+
StatusCodes: []int{200, 204},
174174
Headers: map[string]string{
175175
"access-control-allow-origin": "https://www.foo.com",
176176
},
@@ -189,7 +189,7 @@ var HTTPRouteCORS = suite.ConformanceTest{
189189
},
190190
},
191191
Response: http.Response{
192-
StatusCode: 200,
192+
StatusCodes: []int{200, 204},
193193
Headers: map[string]string{
194194
"access-control-allow-origin": "https://www.bar.com",
195195
},
@@ -236,7 +236,7 @@ var HTTPRouteCORS = suite.ConformanceTest{
236236
},
237237
Namespace: "",
238238
Response: http.Response{
239-
StatusCode: 200,
239+
StatusCodes: []int{200, 204},
240240
Headers: map[string]string{
241241
"access-control-allow-origin": "https://www.foo.com",
242242
"access-control-allow-methods": "POST",

conformance/utils/http/http.go

Lines changed: 56 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -332,43 +332,72 @@ func CompareRoundTrip(t *testing.T, req *roundtripper.Request, cReq *roundtrippe
332332
expected.ExpectedRequest = &ExpectedRequest{Request: expected.Request}
333333
}
334334

335-
if expected.ExpectedRequest.Method == "" {
336-
expected.ExpectedRequest.Method = "GET"
337-
}
335+
if cRes.StatusCode == 200 || cRes.StatusCode == 204 {
336+
if cRes.StatusCode == 200 {
337+
// The request expected to arrive at the backend is
338+
// the same as the request made, unless otherwise
339+
// specified.
340+
if expected.ExpectedRequest == nil {
341+
expected.ExpectedRequest = &ExpectedRequest{Request: expected.Request}
342+
}
338343

339-
if expected.ExpectedRequest.Host != "" && expected.ExpectedRequest.Host != cReq.Host {
340-
return fmt.Errorf("expected host to be %s, got %s", expected.ExpectedRequest.Host, cReq.Host)
341-
}
344+
if expected.ExpectedRequest.Method == "" {
345+
expected.ExpectedRequest.Method = "GET"
346+
}
342347

343-
if expected.ExpectedRequest.Path != cReq.Path {
344-
return fmt.Errorf("expected path to be %s, got %s", expected.ExpectedRequest.Path, cReq.Path)
345-
}
346-
if expected.ExpectedRequest.Method != cReq.Method {
347-
return fmt.Errorf("expected method to be %s, got %s", expected.ExpectedRequest.Method, cReq.Method)
348-
}
349-
if expected.Namespace != cReq.Namespace {
350-
return fmt.Errorf("expected namespace to be %s, got %s", expected.Namespace, cReq.Namespace)
351-
}
352-
if expected.ExpectedRequest.Headers != nil {
353-
if cReq.Headers == nil {
354-
return fmt.Errorf("no headers captured, expected %v", len(expected.ExpectedRequest.Headers))
348+
if expected.ExpectedRequest.Host != "" && expected.ExpectedRequest.Host != cReq.Host {
349+
return fmt.Errorf("expected host to be %s, got %s", expected.ExpectedRequest.Host, cReq.Host)
355350
}
356-
for name, val := range cReq.Headers {
357-
cReq.Headers[strings.ToLower(name)] = val
351+
352+
if expected.ExpectedRequest.Path != cReq.Path {
353+
return fmt.Errorf("expected path to be %s, got %s", expected.ExpectedRequest.Path, cReq.Path)
358354
}
359-
for name, expectedVal := range expected.ExpectedRequest.Headers {
360-
actualVal, ok := cReq.Headers[strings.ToLower(name)]
361-
if !ok {
362-
return fmt.Errorf("expected %s header to be set, actual headers: %v", name, cReq.Headers)
363-
} else if strings.Join(actualVal, ",") != expectedVal {
364-
return fmt.Errorf("expected %s header to be set to %s, got %s", name, expectedVal, strings.Join(actualVal, ","))
355+
if expected.ExpectedRequest.Method != cReq.Method {
356+
return fmt.Errorf("expected method to be %s, got %s", expected.ExpectedRequest.Method, cReq.Method)
357+
}
358+
if expected.Namespace != cReq.Namespace {
359+
return fmt.Errorf("expected namespace to be %s, got %s", expected.Namespace, cReq.Namespace)
360+
}
361+
if expected.ExpectedRequest.Headers != nil {
362+
if cReq.Headers == nil {
363+
return fmt.Errorf("no headers captured, expected %v", len(expected.ExpectedRequest.Headers))
364+
}
365+
for name, val := range cReq.Headers {
366+
cReq.Headers[strings.ToLower(name)] = val
365367
}
368+
for name, expectedVal := range expected.ExpectedRequest.Headers {
369+
actualVal, ok := cReq.Headers[strings.ToLower(name)]
370+
if !ok {
371+
return fmt.Errorf("expected %s header to be set, actual headers: %v", name, cReq.Headers)
372+
} else if strings.Join(actualVal, ",") != expectedVal {
373+
return fmt.Errorf("expected %s header to be set to %s, got %s", name, expectedVal, strings.Join(actualVal, ","))
374+
}
375+
}
376+
}
377+
378+
// Verify that headers expected *not* to be present on the
379+
// request are actually not present.
380+
if len(expected.ExpectedRequest.AbsentHeaders) > 0 {
381+
for name, val := range cReq.Headers {
382+
cReq.Headers[strings.ToLower(name)] = val
383+
}
384+
385+
for _, name := range expected.ExpectedRequest.AbsentHeaders {
386+
val, ok := cReq.Headers[strings.ToLower(name)]
387+
if ok {
388+
return fmt.Errorf("expected %s header to not be set, got %s", name, val)
389+
}
390+
}
391+
}
392+
393+
if !strings.HasPrefix(cReq.Pod, expected.Backend) {
394+
return fmt.Errorf("expected pod name to start with %s, got %s", expected.Backend, cReq.Pod)
366395
}
367396
}
368397

369398
if expected.Response.Headers != nil {
370399
if cRes.Headers == nil {
371-
return fmt.Errorf("no headers captured, expected %v", len(expected.ExpectedRequest.Headers))
400+
return fmt.Errorf("no headers captured, expected %v", len(expected.Response.Headers))
372401
}
373402
for name, val := range cRes.Headers {
374403
cRes.Headers[strings.ToLower(name)] = val

0 commit comments

Comments
 (0)