| 
									
										
										
										
											2016-12-09 13:17:34 +01:00
										 |  |  | package buf_test | 
					
						
							| 
									
										
										
										
											2016-05-11 10:54:20 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							| 
									
										
										
										
											2017-04-17 22:35:20 +02:00
										 |  |  | 	"bufio" | 
					
						
							| 
									
										
										
										
											2016-05-11 10:54:20 -07:00
										 |  |  | 	"bytes" | 
					
						
							|  |  |  | 	"crypto/rand" | 
					
						
							|  |  |  | 	"testing" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-17 22:35:20 +02:00
										 |  |  | 	"context" | 
					
						
							|  |  |  | 	"io" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-04 01:33:35 +01:00
										 |  |  | 	"v2ray.com/core/common" | 
					
						
							| 
									
										
										
										
											2016-12-09 13:17:34 +01:00
										 |  |  | 	. "v2ray.com/core/common/buf" | 
					
						
							| 
									
										
										
										
											2017-04-17 22:35:20 +02:00
										 |  |  | 	"v2ray.com/core/transport/ray" | 
					
						
							| 
									
										
										
										
											2017-10-26 21:44:22 +02:00
										 |  |  | 	. "v2ray.com/ext/assert" | 
					
						
							| 
									
										
										
										
											2016-05-11 10:54:20 -07:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-09 13:17:34 +01:00
										 |  |  | func TestWriter(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2017-10-24 16:15:35 +02:00
										 |  |  | 	assert := With(t) | 
					
						
							| 
									
										
										
										
											2016-05-11 10:54:20 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-09 13:17:34 +01:00
										 |  |  | 	lb := New() | 
					
						
							| 
									
										
										
										
											2017-10-24 16:15:35 +02:00
										 |  |  | 	assert(lb.AppendSupplier(ReadFrom(rand.Reader)), IsNil) | 
					
						
							| 
									
										
										
										
											2016-05-11 10:54:20 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-06 11:03:42 +01:00
										 |  |  | 	expectedBytes := append([]byte(nil), lb.Bytes()...) | 
					
						
							| 
									
										
										
										
											2016-05-11 10:54:20 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-06 11:03:42 +01:00
										 |  |  | 	writeBuffer := bytes.NewBuffer(make([]byte, 0, 1024*1024)) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-09 22:33:15 +01:00
										 |  |  | 	writer := NewBufferedWriter(NewWriter(writeBuffer)) | 
					
						
							|  |  |  | 	writer.SetBuffered(false) | 
					
						
							|  |  |  | 	err := writer.WriteMultiBuffer(NewMultiBufferValue(lb)) | 
					
						
							| 
									
										
										
										
											2017-10-24 16:15:35 +02:00
										 |  |  | 	assert(err, IsNil) | 
					
						
							| 
									
										
										
										
											2017-11-09 22:33:15 +01:00
										 |  |  | 	assert(writer.Flush(), IsNil) | 
					
						
							| 
									
										
										
										
											2017-10-24 16:15:35 +02:00
										 |  |  | 	assert(expectedBytes, Equals, writeBuffer.Bytes()) | 
					
						
							| 
									
										
										
										
											2016-05-11 10:54:20 -07:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2017-04-17 22:35:20 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | func TestBytesWriterReadFrom(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2017-10-24 16:15:35 +02:00
										 |  |  | 	assert := With(t) | 
					
						
							| 
									
										
										
										
											2017-04-17 22:35:20 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	cache := ray.NewStream(context.Background()) | 
					
						
							|  |  |  | 	reader := bufio.NewReader(io.LimitReader(rand.Reader, 8192)) | 
					
						
							| 
									
										
										
										
											2017-11-09 22:33:15 +01:00
										 |  |  | 	writer := NewBufferedWriter(cache) | 
					
						
							|  |  |  | 	writer.SetBuffered(false) | 
					
						
							|  |  |  | 	_, err := reader.WriteTo(writer) | 
					
						
							| 
									
										
										
										
											2017-10-24 16:15:35 +02:00
										 |  |  | 	assert(err, IsNil) | 
					
						
							| 
									
										
										
										
											2017-04-17 22:35:20 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-09 22:33:15 +01:00
										 |  |  | 	mb, err := cache.ReadMultiBuffer() | 
					
						
							| 
									
										
										
										
											2017-10-24 16:15:35 +02:00
										 |  |  | 	assert(err, IsNil) | 
					
						
							|  |  |  | 	assert(mb.Len(), Equals, 8192) | 
					
						
							| 
									
										
										
										
											2017-04-17 22:35:20 +02:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2017-11-04 01:33:35 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | func TestDiscardBytes(t *testing.T) { | 
					
						
							|  |  |  | 	assert := With(t) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	b := New() | 
					
						
							| 
									
										
										
										
											2017-11-09 22:33:15 +01:00
										 |  |  | 	common.Must(b.Reset(ReadFullFrom(rand.Reader, Size))) | 
					
						
							| 
									
										
										
										
											2017-11-04 01:33:35 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	nBytes, err := io.Copy(DiscardBytes, b) | 
					
						
							|  |  |  | 	assert(nBytes, Equals, int64(Size)) | 
					
						
							|  |  |  | 	assert(err, IsNil) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestDiscardBytesMultiBuffer(t *testing.T) { | 
					
						
							|  |  |  | 	assert := With(t) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	const size = 10240*1024 + 1 | 
					
						
							|  |  |  | 	buffer := bytes.NewBuffer(make([]byte, 0, size)) | 
					
						
							|  |  |  | 	common.Must2(buffer.ReadFrom(io.LimitReader(rand.Reader, size))) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	r := NewReader(buffer) | 
					
						
							| 
									
										
										
										
											2017-11-09 22:33:15 +01:00
										 |  |  | 	nBytes, err := io.Copy(DiscardBytes, NewBufferedReader(r)) | 
					
						
							| 
									
										
										
										
											2017-11-04 01:33:35 +01:00
										 |  |  | 	assert(nBytes, Equals, int64(size)) | 
					
						
							|  |  |  | 	assert(err, IsNil) | 
					
						
							|  |  |  | } |