Skip to content

Commit 1a524e4

Browse files
committed
increase test coverage for interceptor
1 parent a2c910c commit 1a524e4

File tree

1 file changed

+151
-1
lines changed

1 file changed

+151
-1
lines changed

Diff for: http/interceptor_test.go

+151-1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,75 @@ func TestWriteHeader(t *testing.T) {
4747
}
4848
}
4949

50+
func TestWrite(t *testing.T) {
51+
waf, err := coraza.NewWAF(coraza.NewWAFConfig())
52+
if err != nil {
53+
t.Fatal(err)
54+
}
55+
56+
tx := waf.NewTransaction()
57+
req, _ := http.NewRequest("GET", "", nil)
58+
res := httptest.NewRecorder()
59+
60+
rw, responseProcessor := wrap(res, req, tx)
61+
_, err = rw.Write([]byte("hello"))
62+
if err != nil {
63+
t.Errorf("unexpected error: %v", err)
64+
}
65+
66+
_, err = rw.Write([]byte("world"))
67+
if err != nil {
68+
t.Errorf("unexpected error: %v", err)
69+
}
70+
71+
err = responseProcessor(tx, req)
72+
if err != nil {
73+
t.Errorf("unexpected error: %v", err)
74+
}
75+
76+
if want, have := 200, res.Code; want != have {
77+
t.Errorf("unexpected status code, want %d, have %d", want, have)
78+
}
79+
}
80+
81+
func TestWriteWithWriteHeader(t *testing.T) {
82+
waf, err := coraza.NewWAF(coraza.NewWAFConfig())
83+
if err != nil {
84+
t.Fatal(err)
85+
}
86+
87+
tx := waf.NewTransaction()
88+
req, _ := http.NewRequest("GET", "", nil)
89+
res := httptest.NewRecorder()
90+
91+
rw, responseProcessor := wrap(res, req, tx)
92+
rw.WriteHeader(204)
93+
// although we called WriteHeader, status code should be applied until
94+
// responseProcessor is called.
95+
if unwanted, have := 204, res.Code; unwanted == have {
96+
t.Errorf("unexpected status code %d", have)
97+
}
98+
99+
_, err = rw.Write([]byte("hello"))
100+
if err != nil {
101+
t.Errorf("unexpected error: %v", err)
102+
}
103+
104+
_, err = rw.Write([]byte("world"))
105+
if err != nil {
106+
t.Errorf("unexpected error: %v", err)
107+
}
108+
109+
err = responseProcessor(tx, req)
110+
if err != nil {
111+
t.Errorf("unexpected error: %v", err)
112+
}
113+
114+
if want, have := 204, res.Code; want != have {
115+
t.Errorf("unexpected status code, want %d, have %d", want, have)
116+
}
117+
}
118+
50119
func TestFlush(t *testing.T) {
51120
waf, err := coraza.NewWAF(coraza.NewWAFConfig())
52121
if err != nil {
@@ -75,6 +144,14 @@ func TestFlush(t *testing.T) {
75144
}
76145
}
77146

147+
type testReaderFrom struct {
148+
io.Writer
149+
}
150+
151+
func (x *testReaderFrom) ReadFrom(r io.Reader) (n int64, err error) {
152+
return io.Copy(x, r)
153+
}
154+
78155
func TestReadFrom(t *testing.T) {
79156
waf, err := coraza.NewWAF(coraza.NewWAFConfig())
80157
if err != nil {
@@ -84,13 +161,86 @@ func TestReadFrom(t *testing.T) {
84161
tx := waf.NewTransaction()
85162
req, _ := http.NewRequest("GET", "", nil)
86163
res := httptest.NewRecorder()
87-
rw, _ := wrap(res, req, tx)
164+
165+
type responseWriter interface {
166+
http.ResponseWriter
167+
http.Flusher
168+
}
169+
170+
resWithReaderFrom := struct {
171+
responseWriter
172+
io.ReaderFrom
173+
}{
174+
res,
175+
&testReaderFrom{res},
176+
}
177+
178+
rw, responseProcessor := wrap(resWithReaderFrom, req, tx)
88179
rw.WriteHeader(204)
180+
// although we called WriteHeader, status code should be applied until
181+
// responseProcessor is called.
182+
if unwanted, have := 204, res.Code; unwanted == have {
183+
t.Errorf("unexpected status code %d", have)
184+
}
185+
89186
_, err = rw.(io.ReaderFrom).ReadFrom(bytes.NewBuffer([]byte("hello world")))
90187
if err != nil {
91188
t.Errorf("unexpected error: %v", err)
92189
}
93190

191+
err = responseProcessor(tx, req)
192+
if err != nil {
193+
t.Errorf("unexpected error: %v", err)
194+
}
195+
196+
if want, have := 204, res.Code; want != have {
197+
t.Errorf("unexpected status code, want %d, have %d", want, have)
198+
}
199+
}
200+
201+
type testPusher struct{}
202+
203+
func (x *testPusher) Push(target string, opts *http.PushOptions) error {
204+
return nil
205+
}
206+
207+
func TestPusher(t *testing.T) {
208+
waf, err := coraza.NewWAF(coraza.NewWAFConfig())
209+
if err != nil {
210+
t.Fatal(err)
211+
}
212+
213+
tx := waf.NewTransaction()
214+
req, _ := http.NewRequest("GET", "", nil)
215+
res := httptest.NewRecorder()
216+
217+
type responseWriter interface {
218+
http.ResponseWriter
219+
http.Flusher
220+
}
221+
222+
resWithPush := struct {
223+
responseWriter
224+
http.Pusher
225+
}{
226+
res,
227+
&testPusher{},
228+
}
229+
230+
rw, responseProcessor := wrap(resWithPush, req, tx)
231+
rw.WriteHeader(204)
232+
rw.(http.Pusher).Push("http://example.com", nil)
233+
// although we called WriteHeader, status code should be applied until
234+
// responseProcessor is called.
235+
if unwanted, have := 204, res.Code; unwanted == have {
236+
t.Errorf("unexpected status code %d", have)
237+
}
238+
239+
err = responseProcessor(tx, req)
240+
if err != nil {
241+
t.Errorf("unexpected error: %v", err)
242+
}
243+
94244
if want, have := 204, res.Code; want != have {
95245
t.Errorf("unexpected status code, want %d, have %d", want, have)
96246
}

0 commit comments

Comments
 (0)