1 package chunkreader
2
3 import (
4 "bytes"
5 "testing"
6 )
7
8 func TestChunkReaderNextDoesNotReadIfAlreadyBuffered(t *testing.T) {
9 server := &bytes.Buffer{}
10 r, err := NewConfig(server, Config{MinBufLen: 4})
11 if err != nil {
12 t.Fatal(err)
13 }
14
15 src := []byte{1, 2, 3, 4}
16 server.Write(src)
17
18 n1, err := r.Next(2)
19 if err != nil {
20 t.Fatal(err)
21 }
22 if bytes.Compare(n1, src[0:2]) != 0 {
23 t.Fatalf("Expected read bytes to be %v, but they were %v", src[0:2], n1)
24 }
25
26 n2, err := r.Next(2)
27 if err != nil {
28 t.Fatal(err)
29 }
30 if bytes.Compare(n2, src[2:4]) != 0 {
31 t.Fatalf("Expected read bytes to be %v, but they were %v", src[2:4], n2)
32 }
33
34 if bytes.Compare(r.buf, src) != 0 {
35 t.Fatalf("Expected r.buf to be %v, but it was %v", src, r.buf)
36 }
37 if r.rp != 4 {
38 t.Fatalf("Expected r.rp to be %v, but it was %v", 4, r.rp)
39 }
40 if r.wp != 4 {
41 t.Fatalf("Expected r.wp to be %v, but it was %v", 4, r.wp)
42 }
43 }
44
45 func TestChunkReaderNextExpandsBufAsNeeded(t *testing.T) {
46 server := &bytes.Buffer{}
47 r, err := NewConfig(server, Config{MinBufLen: 4})
48 if err != nil {
49 t.Fatal(err)
50 }
51
52 src := []byte{1, 2, 3, 4, 5, 6, 7, 8}
53 server.Write(src)
54
55 n1, err := r.Next(5)
56 if err != nil {
57 t.Fatal(err)
58 }
59 if bytes.Compare(n1, src[0:5]) != 0 {
60 t.Fatalf("Expected read bytes to be %v, but they were %v", src[0:5], n1)
61 }
62 if len(r.buf) != 5 {
63 t.Fatalf("Expected len(r.buf) to be %v, but it was %v", 5, len(r.buf))
64 }
65 }
66
67 func TestChunkReaderDoesNotReuseBuf(t *testing.T) {
68 server := &bytes.Buffer{}
69 r, err := NewConfig(server, Config{MinBufLen: 4})
70 if err != nil {
71 t.Fatal(err)
72 }
73
74 src := []byte{1, 2, 3, 4, 5, 6, 7, 8}
75 server.Write(src)
76
77 n1, err := r.Next(4)
78 if err != nil {
79 t.Fatal(err)
80 }
81 if bytes.Compare(n1, src[0:4]) != 0 {
82 t.Fatalf("Expected read bytes to be %v, but they were %v", src[0:4], n1)
83 }
84
85 n2, err := r.Next(4)
86 if err != nil {
87 t.Fatal(err)
88 }
89 if bytes.Compare(n2, src[4:8]) != 0 {
90 t.Fatalf("Expected read bytes to be %v, but they were %v", src[4:8], n2)
91 }
92
93 if bytes.Compare(n1, src[0:4]) != 0 {
94 t.Fatalf("Expected KeepLast to prevent Next from overwriting buf, expected %v but it was %v", src[0:4], n1)
95 }
96 }
97
View as plain text