54 lines
1.2 KiB
Go
54 lines
1.2 KiB
Go
|
|
package stario
|
||
|
|
|
||
|
|
import (
|
||
|
|
"bytes"
|
||
|
|
"errors"
|
||
|
|
"io"
|
||
|
|
"testing"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestStarPipeRoundTrip(t *testing.T) {
|
||
|
|
reader, writer, err := NewStarPipe(16)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
want := []byte("hello world")
|
||
|
|
go func() {
|
||
|
|
_, _ = writer.Write(want)
|
||
|
|
_ = writer.Close()
|
||
|
|
}()
|
||
|
|
|
||
|
|
got, err := io.ReadAll(reader)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("ReadAll failed: %v", err)
|
||
|
|
}
|
||
|
|
if !bytes.Equal(got, want) {
|
||
|
|
t.Fatalf("unexpected payload: got %q want %q", got, want)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestStarPipeReaderCloseAbortsWriter(t *testing.T) {
|
||
|
|
reader, writer, err := NewStarPipe(4)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
if err := reader.Close(); err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
if _, err := writer.Write([]byte("x")); !errors.Is(err, ErrStarBufferClosed) {
|
||
|
|
t.Fatalf("unexpected writer error after reader close: %v", err)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestStarPipeNilEndsReportClosedPipe(t *testing.T) {
|
||
|
|
var reader *StarPipeReader
|
||
|
|
var writer *StarPipeWriter
|
||
|
|
|
||
|
|
if _, err := reader.Read(make([]byte, 1)); !errors.Is(err, io.ErrClosedPipe) {
|
||
|
|
t.Fatalf("unexpected nil reader error: %v", err)
|
||
|
|
}
|
||
|
|
if _, err := writer.Write([]byte("x")); !errors.Is(err, io.ErrClosedPipe) {
|
||
|
|
t.Fatalf("unexpected nil writer error: %v", err)
|
||
|
|
}
|
||
|
|
}
|