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) }) }) }