90 lines
1.4 KiB
Go
90 lines
1.4 KiB
Go
package polling
|
|
|
|
import (
|
|
"bytes"
|
|
"testing"
|
|
|
|
. "github.com/smartystreets/goconvey/convey"
|
|
)
|
|
|
|
func TestWriter(t *testing.T) {
|
|
p := &Polling{
|
|
state: stateNormal,
|
|
sendChan: MakeSendChan(),
|
|
}
|
|
sendChan := p.sendChan
|
|
|
|
Convey("Wait close", t, func() {
|
|
w := newFakeWriteCloser()
|
|
|
|
select {
|
|
case <-sendChan:
|
|
panic("should not run here")
|
|
default:
|
|
}
|
|
|
|
writer := NewWriter(w, p)
|
|
err := writer.Close()
|
|
So(err, ShouldBeNil)
|
|
|
|
select {
|
|
case <-sendChan:
|
|
default:
|
|
panic("should not run here")
|
|
}
|
|
|
|
select {
|
|
case <-sendChan:
|
|
panic("should not run here")
|
|
default:
|
|
}
|
|
})
|
|
|
|
Convey("Many writer with close", t, func() {
|
|
for i := 0; i < 10; i++ {
|
|
w := newFakeWriteCloser()
|
|
writer := NewWriter(w, p)
|
|
err := writer.Close()
|
|
So(err, ShouldBeNil)
|
|
}
|
|
|
|
select {
|
|
case <-sendChan:
|
|
default:
|
|
panic("should not run here")
|
|
}
|
|
|
|
select {
|
|
case <-sendChan:
|
|
panic("should not run here")
|
|
default:
|
|
}
|
|
})
|
|
|
|
Convey("Close with not normal", t, func() {
|
|
p := &Polling{
|
|
state: stateClosing,
|
|
sendChan: MakeSendChan(),
|
|
}
|
|
|
|
w := newFakeWriteCloser()
|
|
writer := NewWriter(w, p)
|
|
err := writer.Close()
|
|
So(err, ShouldNotBeNil)
|
|
})
|
|
}
|
|
|
|
type fakeWriteCloser struct {
|
|
*bytes.Buffer
|
|
}
|
|
|
|
func newFakeWriteCloser() *fakeWriteCloser {
|
|
return &fakeWriteCloser{
|
|
Buffer: bytes.NewBuffer(nil),
|
|
}
|
|
}
|
|
|
|
func (f *fakeWriteCloser) Close() error {
|
|
return nil
|
|
}
|