/usr/share/gocode/src/github.com/alicebob/miniredis/server/proto_test.go is in golang-github-alicebob-miniredis-dev 2.2.1-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | package server
import (
"bufio"
"bytes"
"fmt"
"io"
"reflect"
"strings"
"testing"
)
func TestReadArray(t *testing.T) {
type cas struct {
payload string
err error
res []string
}
for i, c := range []cas{
{
payload: "*1\r\n$4\r\nPING\r\n",
res: []string{"PING"},
},
{
payload: "*2\r\n$4\r\nLLEN\r\n$6\r\nmylist\r\n",
res: []string{"LLEN", "mylist"},
},
{
payload: "*2\r\n$4\r\nLLEN\r\n$6\r\nmyl",
err: io.EOF,
},
{
payload: "PING",
err: io.EOF,
},
{
payload: "*0\r\n",
},
{
payload: "*-1\r\n", // not sure this is legal in a request
},
} {
res, err := readArray(bufio.NewReader(bytes.NewBufferString(c.payload)))
if have, want := err, c.err; have != want {
t.Errorf("err %d: have %v, want %v", i, have, want)
continue
}
if have, want := res, c.res; !reflect.DeepEqual(have, want) {
t.Errorf("case %d: have %v, want %v", i, have, want)
}
}
}
func TestReadString(t *testing.T) {
type cas struct {
payload string
err error
res string
}
bigPayload := strings.Repeat("X", 1<<24)
for i, c := range []cas{
{
payload: "+hello world\r\n",
res: "hello world",
},
{
payload: "-some error\r\n",
res: "some error",
},
{
payload: ":42\r\n",
res: "42",
},
{
payload: ":\r\n",
res: "",
},
{
payload: "$4\r\nabcd\r\n",
res: "abcd",
},
{
payload: fmt.Sprintf("$%d\r\n%s\r\n", len(bigPayload), bigPayload),
res: bigPayload,
},
{
payload: "",
err: io.EOF,
},
{
payload: ":42",
err: io.EOF,
},
{
payload: "XXX",
err: io.EOF,
},
{
payload: "XXXXXX",
err: io.EOF,
},
{
payload: "\r\n",
err: ErrProtocol,
},
{
payload: "XXXX\r\n",
err: ErrProtocol,
},
} {
res, err := readString(bufio.NewReader(bytes.NewBufferString(c.payload)))
if have, want := err, c.err; have != want {
t.Errorf("err %d: have %v, want %v", i, have, want)
continue
}
if have, want := res, c.res; !reflect.DeepEqual(have, want) {
t.Errorf("case %d: have %#v, want %#v", i, have, want)
}
}
}
|