| Index: logdog/client/butler/streamserver/base_test.go
|
| diff --git a/logdog/client/butler/streamserver/base_test.go b/logdog/client/butler/streamserver/base_test.go
|
| index 1510af6ce722be57fecd7b6ad26d829c4ba9f28e..fc42853636922aaa162479fcf3043b9d8a8225ed 100644
|
| --- a/logdog/client/butler/streamserver/base_test.go
|
| +++ b/logdog/client/butler/streamserver/base_test.go
|
| @@ -13,9 +13,14 @@ import (
|
| "testing"
|
| "time"
|
|
|
| + "github.com/luci/luci-go/common/clock/clockflag"
|
| + "github.com/luci/luci-go/common/clock/testclock"
|
| + "github.com/luci/luci-go/logdog/client/butlerlib/streamclient"
|
| "github.com/luci/luci-go/logdog/client/butlerlib/streamproto"
|
| - . "github.com/smartystreets/goconvey/convey"
|
| +
|
| "golang.org/x/net/context"
|
| +
|
| + . "github.com/smartystreets/goconvey/convey"
|
| )
|
|
|
| type testAddr string
|
| @@ -228,3 +233,49 @@ func TestListenerStreamServer(t *testing.T) {
|
| })
|
| })
|
| }
|
| +
|
| +// testClientServer tests to ensure that a client can create streams with a
|
| +// server.
|
| +//
|
| +// svr must be in listening state when this is called.
|
| +func testClientServer(t *testing.T, svr StreamServer, client streamclient.Client) {
|
| + flags := streamproto.Flags{
|
| + Name: "foo/bar",
|
| + Timestamp: clockflag.Time(testclock.TestTimeLocal),
|
| + }
|
| + data := []byte("ohaithere")
|
| +
|
| + clientDoneC := make(chan error)
|
| + go func() {
|
| + var err error
|
| + defer func() {
|
| + clientDoneC <- err
|
| + }()
|
| +
|
| + var stream streamclient.Stream
|
| + if stream, err = client.NewStream(flags); err != nil {
|
| + return
|
| + }
|
| + defer func() {
|
| + if closeErr := stream.Close(); closeErr != nil && err == nil {
|
| + err = closeErr
|
| + }
|
| + }()
|
| +
|
| + if _, err = stream.Write(data); err != nil {
|
| + return
|
| + }
|
| + }()
|
| +
|
| + rc, props := svr.Next()
|
| + defer rc.Close()
|
| +
|
| + So(props, ShouldResemble, flags.Properties())
|
| +
|
| + var buf bytes.Buffer
|
| + _, err := buf.ReadFrom(rc)
|
| + So(err, ShouldBeNil)
|
| + So(buf.Bytes(), ShouldResemble, data)
|
| +
|
| + So(<-clientDoneC, ShouldBeNil)
|
| +}
|
|
|