diff --git a/transport/pipe/pipe_test.go b/transport/pipe/pipe_test.go index beace25f9..10063ba1e 100644 --- a/transport/pipe/pipe_test.go +++ b/transport/pipe/pipe_test.go @@ -1,10 +1,13 @@ package pipe_test import ( + "context" "io" "testing" + "time" "v2ray.com/core/common/buf" + "v2ray.com/core/common/signal" . "v2ray.com/core/transport/pipe" . "v2ray.com/ext/assert" ) @@ -56,3 +59,35 @@ func TestPipeClose(t *testing.T) { assert(err, Equals, io.EOF) assert(rb.IsEmpty(), IsTrue) } + +func TestPipeLimitZero(t *testing.T) { + assert := With(t) + + pReader, pWriter := New(WithSizeLimit(0)) + bb := buf.New() + bb.Write([]byte{'a', 'b'}) + assert(pWriter.WriteMultiBuffer(buf.NewMultiBufferValue(bb)), IsNil) + + err := signal.ExecuteParallel(context.Background(), func() error { + b := buf.New() + b.Write([]byte{'c', 'd'}) + return pWriter.WriteMultiBuffer(buf.NewMultiBufferValue(b)) + }, func() error { + time.Sleep(time.Second) + + rb, err := pReader.ReadMultiBuffer() + if err != nil { + return err + } + assert(rb.String(), Equals, "ab") + + rb, err = pReader.ReadMultiBuffer() + if err != nil { + return err + } + assert(rb.String(), Equals, "cd") + return nil + }) + + assert(err, IsNil) +}