Skip to content

Commit 383f64d

Browse files
Extend valueReader tests for both streaming and buffered
1 parent 7e44186 commit 383f64d

File tree

4 files changed

+792
-360
lines changed

4 files changed

+792
-360
lines changed

bson/buffered_value_reader.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ var _ valueReaderByteSrc = (*bufferedValueReader)(nil)
2323

2424
// Read reads up to len(p) bytes from the in-memory buffer, advancing the offset
2525
// by the number of bytes read.
26-
func (b *bufferedValueReader) Read(p []byte) (int, error) {
26+
func (b *bufferedValueReader) readExact(p []byte) (int, error) {
2727
if b.offset >= int64(len(b.buf)) {
2828
return 0, io.EOF
2929
}

bson/streaming_value_reader.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ package bson
88

99
import (
1010
"bufio"
11+
"io"
1112
)
1213

1314
// streamingValueReader reads from an ioReader wrapped in a bufio.Reader. It
@@ -25,9 +26,12 @@ var _ valueReaderByteSrc = (*streamingValueReader)(nil)
2526

2627
// Read reads up to len(p) bytes from the underlying bufio.Reader, advancing
2728
// the offset by the number of bytes read.
28-
func (s *streamingValueReader) Read(p []byte) (int, error) {
29-
n, err := s.br.Read(p)
30-
s.offset += int64(n)
29+
func (s *streamingValueReader) readExact(p []byte) (int, error) {
30+
n, err := io.ReadFull(s.br, p)
31+
if err == nil {
32+
s.offset += int64(n)
33+
}
34+
3135
return n, err
3236
}
3337

bson/value_reader.go

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,10 @@ import (
1717
)
1818

1919
type valueReaderByteSrc interface {
20-
io.Reader
2120
io.ByteReader
2221

22+
readExact(p []byte) (int, error)
23+
2324
// Peek returns the next n bytes without advancing the cursor. It must return
2425
// exactly n bytes or n error if fewer are available.
2526
peek(n int) ([]byte, error)
@@ -61,12 +62,6 @@ type vrState struct {
6162
end int64
6263
}
6364

64-
var bufioReaderPool = sync.Pool{
65-
New: func() interface{} {
66-
return bufio.NewReader(nil)
67-
},
68-
}
69-
7065
var vrPool = sync.Pool{
7166
New: func() interface{} {
7267
return &valueReader{
@@ -286,10 +281,7 @@ func peekNextValueSize(vr *valueReader) (int32, error) {
286281
func readBytes(src valueReaderByteSrc, n int) ([]byte, error) {
287282
if src.streamable() {
288283
data := make([]byte, n)
289-
if _, err := io.ReadFull(src, data); err != nil {
290-
if errors.Is(err, io.ErrUnexpectedEOF) {
291-
err = io.EOF // Convert io.ErrUnexpectedEOF to io.EOF for consistency.
292-
}
284+
if _, err := src.readExact(data); err != nil {
293285
return nil, err
294286
}
295287

@@ -315,6 +307,7 @@ func (vr *valueReader) readBytes(n int32) ([]byte, error) {
315307
return readBytes(vr.src, int(n))
316308
}
317309

310+
//nolint:unparam
318311
func (vr *valueReader) readValueBytes(dst []byte) (Type, []byte, error) {
319312
switch vr.stack[vr.frame].mode {
320313
case mTopLevel:

0 commit comments

Comments
 (0)