uplink/app/pubsub/pubsubwriter_test.go

91 lines
1.8 KiB
Go

package pubsub
import (
"io"
"testing"
. "github.com/smartystreets/goconvey/convey"
)
func Test_PubSubWriter(t *testing.T) {
Convey("PubSubWriter", t, func() {
Convey("without subscribers", func() {
psw := NewPubSubWriter()
n, err := psw.Write([]byte{})
So(err, ShouldBeNil)
So(n, ShouldEqual, 0)
n, err = psw.Write([]byte{0, 0, 0, 0})
So(err, ShouldBeNil)
So(n, ShouldEqual, 4)
So(psw.Close(), ShouldBeNil)
})
Convey("with subscribers (writer-side close)", func() {
buf := make([]byte, 2)
psw := NewPubSubWriter()
psr := psw.Sub()
n, err := psw.Write([]byte{})
So(err, ShouldBeNil)
So(n, ShouldEqual, 0)
n, err = psr.Read(buf)
So(err, ShouldBeNil)
So(n, ShouldEqual, 0)
n, err = psw.Write([]byte{0, 0, 0, 0})
So(err, ShouldBeNil)
So(n, ShouldEqual, 4)
n, err = psr.Read(buf)
So(err, ShouldBeNil)
So(n, ShouldEqual, 2)
So(psr.(*PubSubReader).buf, ShouldHaveLength, 2)
n, err = psr.Read(buf)
So(err, ShouldBeNil)
So(n, ShouldEqual, 2)
So(psw.Close(), ShouldBeNil)
n, err = psr.Read(buf)
So(err, ShouldEqual, io.EOF)
So(n, ShouldEqual, 0)
})
Convey("with subscribers (reader-side close)", func() {
buf := make([]byte, 2)
psw := NewPubSubWriter()
psr := psw.Sub()
n, err := psw.Write([]byte{0, 0, 0, 0})
So(err, ShouldBeNil)
So(n, ShouldEqual, 4)
n, err = psr.Read(buf)
So(err, ShouldBeNil)
So(n, ShouldEqual, 2)
So(psr.(*PubSubReader).buf, ShouldHaveLength, 2)
n, err = psr.Read(buf)
So(err, ShouldBeNil)
So(n, ShouldEqual, 2)
So(psr.Close(), ShouldBeNil)
n, err = psw.Write([]byte{0, 0, 0, 0})
So(err, ShouldBeNil)
So(n, ShouldEqual, 4)
n, err = psr.Read(buf)
So(err, ShouldEqual, io.EOF)
So(n, ShouldEqual, 0)
})
})
}