|  | @@ -1,10 +1,13 @@
 | 
											
												
													
														|  |  package pipe_test
 |  |  package pipe_test
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  import (
 |  |  import (
 | 
											
												
													
														|  | 
 |  | +	"context"
 | 
											
												
													
														|  |  	"io"
 |  |  	"io"
 | 
											
												
													
														|  |  	"testing"
 |  |  	"testing"
 | 
											
												
													
														|  | 
 |  | +	"time"
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  	"v2ray.com/core/common/buf"
 |  |  	"v2ray.com/core/common/buf"
 | 
											
												
													
														|  | 
 |  | +	"v2ray.com/core/common/signal"
 | 
											
												
													
														|  |  	. "v2ray.com/core/transport/pipe"
 |  |  	. "v2ray.com/core/transport/pipe"
 | 
											
												
													
														|  |  	. "v2ray.com/ext/assert"
 |  |  	. "v2ray.com/ext/assert"
 | 
											
												
													
														|  |  )
 |  |  )
 | 
											
										
											
												
													
														|  | @@ -56,3 +59,35 @@ func TestPipeClose(t *testing.T) {
 | 
											
												
													
														|  |  	assert(err, Equals, io.EOF)
 |  |  	assert(err, Equals, io.EOF)
 | 
											
												
													
														|  |  	assert(rb.IsEmpty(), IsTrue)
 |  |  	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)
 | 
											
												
													
														|  | 
 |  | +}
 |