Files
mostlymatter/plugin/rpcplugin/io_test.go
Chris 402491b7e5 PLT-7407: Back-end plugins (#7409)
* tie back-end plugins together

* fix comment typo

* add tests and a bit of polish

* tests and polish

* add test, don't let backend executable paths escape the plugin directory
2017-09-11 10:02:02 -05:00

74 строки
1.3 KiB
Go

package rpcplugin
import (
"io/ioutil"
"os"
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestNewAsyncReadCloser(t *testing.T) {
rf, w, err := os.Pipe()
require.NoError(t, err)
r := NewAsyncReadCloser(rf)
defer r.Close()
go func() {
w.Write([]byte("foo"))
w.Close()
}()
foo, err := ioutil.ReadAll(r)
require.NoError(t, err)
assert.Equal(t, "foo", string(foo))
}
func TestNewAsyncReadCloser_CloseDuringRead(t *testing.T) {
rf, w, err := os.Pipe()
require.NoError(t, err)
defer w.Close()
r := NewAsyncReadCloser(rf)
go func() {
time.Sleep(time.Millisecond * 200)
r.Close()
}()
r.Read(make([]byte, 10))
}
func TestNewAsyncWriteCloser(t *testing.T) {
r, wf, err := os.Pipe()
require.NoError(t, err)
w := NewAsyncWriteCloser(wf)
defer w.Close()
go func() {
foo, err := ioutil.ReadAll(r)
require.NoError(t, err)
assert.Equal(t, "foo", string(foo))
r.Close()
}()
n, err := w.Write([]byte("foo"))
require.NoError(t, err)
assert.Equal(t, 3, n)
}
func TestNewAsyncWriteCloser_CloseDuringWrite(t *testing.T) {
r, wf, err := os.Pipe()
require.NoError(t, err)
defer r.Close()
w := NewAsyncWriteCloser(wf)
go func() {
time.Sleep(time.Millisecond * 200)
w.Close()
}()
w.Write(make([]byte, 10))
}