OLD | NEW |
| (Empty) |
1 package server | |
2 | |
3 import ( | |
4 "encoding/base64" | |
5 "encoding/json" | |
6 "net/http" | |
7 "net/http/httptest" | |
8 "net/url" | |
9 "reflect" | |
10 "strconv" | |
11 "testing" | |
12 ) | |
13 | |
14 func composeQuery(path string, code int, headers http.Header, body []byte) (stri
ng, error) { | |
15 u, err := url.Parse(path) | |
16 if err != nil { | |
17 return "", err | |
18 } | |
19 q := u.Query() | |
20 if code > 0 { | |
21 q.Set("respStatus", strconv.Itoa(code)) | |
22 } | |
23 if headers != nil { | |
24 h, err := json.Marshal(headers) | |
25 if err != nil { | |
26 return "", err | |
27 } | |
28 q.Set("respHeader", base64.URLEncoding.EncodeToString(h)) | |
29 } | |
30 if len(body) > 0 { | |
31 q.Set("respBody", base64.URLEncoding.EncodeToString(body)) | |
32 } | |
33 u.RawQuery = q.Encode() | |
34 return u.String(), nil | |
35 } | |
36 | |
37 func TestResponseOverride(t *testing.T) { | |
38 tests := []struct { | |
39 name string | |
40 code int | |
41 headers http.Header | |
42 body []byte | |
43 }{ | |
44 {name: "code", code: 204}, | |
45 {name: "body", body: []byte("new body")}, | |
46 { | |
47 name: "headers", | |
48 headers: http.Header{ | |
49 "Via": []string{"Via1", "Via2"}, | |
50 "Content-Type": []string{"random content"}, | |
51 }, | |
52 }, | |
53 { | |
54 name: "everything", | |
55 code: 204, | |
56 body: []byte("new body"), | |
57 headers: http.Header{ | |
58 "Via": []string{"Via1", "Via2"}, | |
59 "Content-Type": []string{"random content"}, | |
60 }, | |
61 }, | |
62 } | |
63 | |
64 for _, test := range tests { | |
65 u, err := composeQuery("http://test.com/override", test.code, te
st.headers, test.body) | |
66 if err != nil { | |
67 t.Errorf("%s: composeQuery: %v", test.name, err) | |
68 return | |
69 } | |
70 req, err := http.NewRequest("GET", u, nil) | |
71 if err != nil { | |
72 t.Errorf("%s: http.NewRequest: %v", test.name, err) | |
73 return | |
74 } | |
75 w := httptest.NewRecorder() | |
76 defaultResponse(w, req) | |
77 if test.code > 0 { | |
78 if got, want := w.Code, test.code; got != want { | |
79 t.Errorf("%s: response code: got %d want %d", te
st.name, got, want) | |
80 return | |
81 } | |
82 } | |
83 if test.headers != nil { | |
84 for k, want := range test.headers { | |
85 got, ok := w.HeaderMap[k] | |
86 if !ok || !reflect.DeepEqual(got, want) { | |
87 t.Errorf("%s: header %s: code: got %v wa
nt %v", test.name, k, got, want) | |
88 return | |
89 } | |
90 } | |
91 } | |
92 if test.body != nil { | |
93 if got, want := string(w.Body.Bytes()), string(test.body
); got != want { | |
94 t.Errorf("%s: body: got %s want %s", test.name,
got, want) | |
95 return | |
96 } | |
97 } | |
98 } | |
99 } | |
OLD | NEW |