forked from jackc/pgx
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathchunkreader_test.go
More file actions
78 lines (65 loc) · 1.57 KB
/
Copy pathchunkreader_test.go
File metadata and controls
78 lines (65 loc) · 1.57 KB
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
package pgproto3
import (
"bytes"
"math/rand/v2"
"testing"
)
func TestChunkReaderNextDoesNotReadIfAlreadyBuffered(t *testing.T) {
server := &bytes.Buffer{}
r := newChunkReader(server, 4)
src := []byte{1, 2, 3, 4}
server.Write(src)
n1, err := r.Next(2)
if err != nil {
t.Fatal(err)
}
if !bytes.Equal(n1, src[0:2]) {
t.Fatalf("Expected read bytes to be %v, but they were %v", src[0:2], n1)
}
n2, err := r.Next(2)
if err != nil {
t.Fatal(err)
}
if !bytes.Equal(n2, src[2:4]) {
t.Fatalf("Expected read bytes to be %v, but they were %v", src[2:4], n2)
}
if !bytes.Equal((*r.buf)[:len(src)], src) {
t.Fatalf("Expected r.buf to be %v, but it was %v", src, r.buf)
}
_, err = r.Next(0) // Trigger the buffer reset.
if err != nil {
t.Fatal(err)
}
if r.rp != 0 {
t.Fatalf("Expected r.rp to be %v, but it was %v", 0, r.rp)
}
if r.wp != 0 {
t.Fatalf("Expected r.wp to be %v, but it was %v", 0, r.wp)
}
}
type randomReader struct {
rnd *rand.Rand
}
// Read reads a random number of random bytes.
func (r *randomReader) Read(p []byte) (n int, err error) {
n = r.rnd.IntN(len(p) + 1)
for i := 0; i < n; i++ {
p[i] = byte(r.rnd.Uint64())
}
return n, nil
}
func TestChunkReaderNextFuzz(t *testing.T) {
rr := &randomReader{rnd: rand.New(rand.NewPCG(1, 0))}
r := newChunkReader(rr, 8192)
randomSizes := rand.New(rand.NewPCG(0, 0))
for range 100000 {
size := randomSizes.IntN(16384) + 1
buf, err := r.Next(size)
if err != nil {
t.Fatal(err)
}
if len(buf) != size {
t.Fatalf("Expected to get %v bytes but got %v bytes", size, len(buf))
}
}
}