nmdc-webfrontend/vendor/github.com/googollee/go-engine.io/parser/limit_reader_test.go

59 lines
1.1 KiB
Go

package parser
import (
"bytes"
"errors"
"io"
"testing"
. "github.com/smartystreets/goconvey/convey"
)
func TestLimitReader(t *testing.T) {
Convey("Read to limit", t, func() {
b := bytes.NewBufferString("1234567890")
r := newLimitReader(b, 5)
p := make([]byte, 1024)
n, err := r.Read(p)
So(err, ShouldBeNil)
So(string(p[:n]), ShouldEqual, "12345")
n, err = r.Read(p)
So(err, ShouldEqual, io.EOF)
err = r.Close()
So(err, ShouldBeNil)
So(b.String(), ShouldEqual, "67890")
})
Convey("Read some and close", t, func() {
b := bytes.NewBufferString("1234567890")
r := newLimitReader(b, 5)
p := make([]byte, 3)
n, err := r.Read(p)
So(err, ShouldBeNil)
So(string(p[:n]), ShouldEqual, "123")
err = r.Close()
So(err, ShouldBeNil)
So(b.String(), ShouldEqual, "67890")
err = r.Close()
So(err, ShouldBeNil)
})
Convey("Close with error", t, func() {
er := errorReader{}
r := newLimitReader(er, 5)
err := r.Close()
So(err, ShouldNotBeNil)
})
}
type errorReader struct{}
func (r errorReader) Read(p []byte) (int, error) {
return 0, errors.New("error")
}
func (r errorReader) Close() error {
return errors.New("error")
}