1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
package http
import (
"bytes"
"errors"
"github.com/spiral/roadrunner"
"github.com/stretchr/testify/assert"
"net/http"
"testing"
)
type testWriter struct {
h http.Header
buf bytes.Buffer
wroteHeader bool
code int
err error
}
func (tw *testWriter) Header() http.Header { return tw.h }
func (tw *testWriter) Write(p []byte) (int, error) {
if !tw.wroteHeader {
tw.WriteHeader(http.StatusOK)
}
n, e := tw.buf.Write(p)
if e == nil {
e = tw.err
}
return n, e
}
func (tw *testWriter) WriteHeader(code int) { tw.wroteHeader = true; tw.code = code }
func TestNewResponse_Error(t *testing.T) {
r, err := NewResponse(&roadrunner.Payload{Context: []byte(`invalid payload`)})
assert.Error(t, err)
assert.Nil(t, r)
}
func TestNewResponse_Write(t *testing.T) {
r, err := NewResponse(&roadrunner.Payload{
Context: []byte(`{"headers":{"key":["value"]},"status": 301}`),
Body: []byte(`sample body`),
})
assert.NoError(t, err)
assert.NotNil(t, r)
w := &testWriter{h: http.Header(make(map[string][]string))}
assert.NoError(t, r.Write(w))
assert.Equal(t, 301, w.code)
assert.Equal(t, "value", w.h.Get("key"))
assert.Equal(t, "sample body", w.buf.String())
}
func TestNewResponse_Stream(t *testing.T) {
r, err := NewResponse(&roadrunner.Payload{
Context: []byte(`{"headers":{"key":["value"]},"status": 301}`),
})
r.body = &bytes.Buffer{}
r.body.(*bytes.Buffer).WriteString("hello world")
assert.NoError(t, err)
assert.NotNil(t, r)
w := &testWriter{h: http.Header(make(map[string][]string))}
assert.NoError(t, r.Write(w))
assert.Equal(t, 301, w.code)
assert.Equal(t, "value", w.h.Get("key"))
assert.Equal(t, "hello world", w.buf.String())
}
func TestNewResponse_StreamError(t *testing.T) {
r, err := NewResponse(&roadrunner.Payload{
Context: []byte(`{"headers":{"key":["value"]},"status": 301}`),
})
r.body = &bytes.Buffer{}
r.body.(*bytes.Buffer).WriteString("hello world")
assert.NoError(t, err)
assert.NotNil(t, r)
w := &testWriter{h: http.Header(make(map[string][]string)), err: errors.New("error")}
assert.Error(t, r.Write(w))
}
|