91 lines
1.8 KiB
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)
|
|
})
|
|
})
|
|
}
|