From 6215c9159acb85033616d2937edf3d87ef7ca79b Mon Sep 17 00:00:00 2001 From: Chris Date: Mon, 28 Aug 2017 11:27:18 -0500 Subject: add plugin http handler (#7289) --- plugin/rpcplugin/muxer_test.go | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'plugin/rpcplugin/muxer_test.go') diff --git a/plugin/rpcplugin/muxer_test.go b/plugin/rpcplugin/muxer_test.go index 7bb63d4f8..795a4fb1d 100644 --- a/plugin/rpcplugin/muxer_test.go +++ b/plugin/rpcplugin/muxer_test.go @@ -129,6 +129,34 @@ func TestMuxer_StreamCloseDuringRead(t *testing.T) { assert.Equal(t, io.EOF, err) } +// Closing a stream during a read should unblock and return io.EOF since this is the way for the +// remote to gracefully close a connection. +func TestMuxer_RemoteStreamCloseDuringRead(t *testing.T) { + r1, w1 := io.Pipe() + r2, w2 := io.Pipe() + + alice := NewMuxer(NewReadWriteCloser(r1, w2), false) + defer func() { assert.NoError(t, alice.Close()) }() + + bob := NewMuxer(NewReadWriteCloser(r2, w1), true) + defer func() { assert.NoError(t, bob.Close()) }() + + id, as := alice.Serve() + bs := bob.Connect(id) + + go func() { + as.Write([]byte("foo")) + as.Close() + }() + buf := make([]byte, 20) + n, err := bs.Read(buf) + assert.Equal(t, 3, n) + assert.Equal(t, "foo", string(buf[:n])) + n, err = bs.Read(buf) + assert.Equal(t, 0, n) + assert.Equal(t, io.EOF, err) +} + // Closing a muxer during a write should unblock, but return an error. func TestMuxer_CloseDuringWrite(t *testing.T) { r1, w1 := io.Pipe() -- cgit v1.2.3-1-g7c22