-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathresp_test.go
85 lines (76 loc) · 1.53 KB
/
resp_test.go
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
package resp
import (
"bytes"
"io"
"testing"
)
var tests = []string{
"+OK\r\n",
"-ERR something\r\n",
":-1\r\n",
"$-1\r\n",
"$0\r\n\r\n",
":12345\r\n",
"*3\r\n:1\r\n:2\r\n:3\r\n",
"*2\r\n$3\r\nGET\r\n$4\r\ntest\r\n",
}
func TestParse(t *testing.T) {
for _, test := range tests {
length, err := parse([]byte(test))
if err != nil {
t.Errorf("%q error: %v", test, err)
}
if length != len(test) {
t.Errorf("%q wrong length, expected %d, got %d", test, len(test), length)
}
}
}
type perByteReader struct {
r io.Reader
}
func (r perByteReader) Read(p []byte) (n int, err error) {
if len(p) > 1 {
p = p[:1]
}
return r.r.Read(p)
}
func TestReaderPerByte(t *testing.T) {
readerTest(t, func(r io.Reader) io.Reader { return perByteReader{r: r} })
}
func TestReaderFullRead(t *testing.T) {
readerTest(t, func(r io.Reader) io.Reader { return r })
}
func readerTest(t *testing.T, f func(io.Reader) io.Reader) {
input := new(bytes.Buffer)
for _, test := range tests {
_, err := input.WriteString(test)
if err != nil {
t.Fatal(err)
}
}
r := NewReader(f(input))
for _, test := range tests {
data, err := r.Read()
if err != nil {
t.Error(err)
}
if string(data) != test {
t.Errorf("expected %q, got %q", test, string(data))
continue
}
}
}
func TestInvalid(t *testing.T) {
tests := []string{
":asdf\r\n",
":\r\n",
":9223372036854775809\r\n",
"hoi",
}
for _, test := range tests {
_, err := parse([]byte(test))
if err == nil {
t.Errorf("input %q expected error, got nil", test)
}
}
}