Skip to content

Commit 8a7e95f

Browse files
petroavStebalien
authored andcommitted
test: expand tests for msgio readers and writers
1 parent d932b56 commit 8a7e95f

File tree

2 files changed

+107
-1
lines changed

2 files changed

+107
-1
lines changed

limit_test.go

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package msgio
2+
3+
import (
4+
"bytes"
5+
"testing"
6+
)
7+
8+
func TestLimitReader(t *testing.T) {
9+
buf := bytes.NewBuffer(nil)
10+
reader, _ := LimitedReader(buf) // limit is set to 0
11+
n, err := reader.Read([]byte{})
12+
if n != 0 || err.Error() != "EOF" {
13+
t.Fatal("Expected not to read anything")
14+
}
15+
}
16+
17+
func TestLimitWriter(t *testing.T) {
18+
buf := bytes.NewBuffer(nil)
19+
writer := NewLimitedWriter(buf)
20+
n, err := writer.Write([]byte{1, 2, 3})
21+
if n != 3 || err != nil {
22+
t.Fatal("Expected to write 3 bytes with no errors")
23+
}
24+
err = writer.Flush()
25+
}

msgio_test.go

+82-1
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@ package msgio
22

33
import (
44
"bytes"
5+
"errors"
56
"fmt"
67
"io"
78
"math/rand"
9+
str "strings"
810
"sync"
911
"testing"
1012
"time"
@@ -47,6 +49,45 @@ func TestWriteClose(t *testing.T) {
4749
SubtestWriteClose(t, writer, reader)
4850
}
4951

52+
type testIoReadWriter struct {
53+
io.Reader
54+
io.Writer
55+
}
56+
57+
func TestReadWriterClose(t *testing.T) {
58+
r, w := io.Pipe()
59+
var rw ReadWriteCloser
60+
rw = NewReadWriter(testIoReadWriter{r, w})
61+
SubtestReaderWriterClose(t, rw)
62+
}
63+
64+
func TestReadWriterCombine(t *testing.T) {
65+
r, w := io.Pipe()
66+
writer := NewWriter(w)
67+
reader := NewReader(r)
68+
rw := Combine(writer, reader)
69+
rw.Close()
70+
}
71+
72+
func TestMultiError(t *testing.T) {
73+
emptyError := multiErr([]error{})
74+
if emptyError.Error() != "no errors" {
75+
t.Fatal("Expected no errors")
76+
}
77+
78+
twoErrors := multiErr([]error{errors.New("one"), errors.New("two")})
79+
if eStr := twoErrors.Error(); !str.Contains(eStr, "one") && !str.Contains(eStr, "two") {
80+
t.Fatal("Expected error messages not included")
81+
}
82+
}
83+
84+
func TestShortBufferError(t *testing.T) {
85+
buf := bytes.NewBuffer(nil)
86+
writer := NewWriter(buf)
87+
reader := NewReader(buf)
88+
SubtestReadShortBuffer(t, writer, reader)
89+
}
90+
5091
func SubtestReadWrite(t *testing.T, writer WriteCloser, reader ReadCloser) {
5192
msgs := [1000][]byte{}
5293

@@ -240,7 +281,47 @@ func SubtestWriteClose(t *testing.T, writer WriteCloser, reader ReadCloser) {
240281
}()
241282
n, err := writer.Write(buf[:])
242283
if n != 0 || err == nil {
243-
t.Error("expected to read nothing")
284+
t.Error("expected to write nothing")
244285
}
245286
<-done
246287
}
288+
289+
func SubtestReaderWriterClose(t *testing.T, rw ReadWriteCloser) {
290+
buf := [10]byte{}
291+
done := make(chan struct{})
292+
go func() {
293+
defer close(done)
294+
time.Sleep(10 * time.Millisecond)
295+
buf := [10]byte{}
296+
rw.Read(buf[:])
297+
rw.Close()
298+
}()
299+
n, err := rw.Write(buf[:])
300+
if n != 10 || err != nil {
301+
t.Error("Expected to write 10 bytes")
302+
}
303+
<-done
304+
}
305+
306+
func SubtestReadShortBuffer(t *testing.T, writer WriteCloser, reader ReadCloser) {
307+
defer reader.Close()
308+
shortReadBuf := [1]byte{}
309+
done := make(chan struct{})
310+
311+
go func() {
312+
defer writer.Close()
313+
defer close(done)
314+
time.Sleep(10 * time.Millisecond)
315+
largeWriteBuf := [10]byte{}
316+
writer.Write(largeWriteBuf[:])
317+
}()
318+
<-done
319+
n, _ := reader.NextMsgLen()
320+
if n != 10 {
321+
t.Fatal("Expected next message to have length of 10")
322+
}
323+
_, err := reader.Read(shortReadBuf[:])
324+
if err != io.ErrShortBuffer {
325+
t.Fatal("Expected short buffer error")
326+
}
327+
}

0 commit comments

Comments
 (0)