mirror of https://github.com/v2ray/v2ray-core
				
				
				
			test case for receiving queue
							parent
							
								
									6416c42bee
								
							
						
					
					
						commit
						951b278ac7
					
				| 
						 | 
				
			
			@ -65,13 +65,17 @@ type ReceivingQueue struct {
 | 
			
		|||
	timeout time.Time
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewReceivingQueue() *ReceivingQueue {
 | 
			
		||||
func NewReceivingQueue(size uint32) *ReceivingQueue {
 | 
			
		||||
	return &ReceivingQueue{
 | 
			
		||||
		queue: make(chan *alloc.Buffer, effectiveConfig.GetReceivingQueueSize()),
 | 
			
		||||
		queue: make(chan *alloc.Buffer, size),
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (this *ReceivingQueue) Read(buf []byte) (int, error) {
 | 
			
		||||
	if this.closed {
 | 
			
		||||
		return 0, io.EOF
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if this.cache.Len() > 0 {
 | 
			
		||||
		nBytes, err := this.cache.Read(buf)
 | 
			
		||||
		if this.cache.IsEmpty() {
 | 
			
		||||
| 
						 | 
				
			
			@ -230,7 +234,7 @@ func NewReceivingWorker(kcp *KCP) *ReceivingWorker {
 | 
			
		|||
	windowSize := effectiveConfig.GetReceivingWindowSize()
 | 
			
		||||
	worker := &ReceivingWorker{
 | 
			
		||||
		kcp:        kcp,
 | 
			
		||||
		queue:      NewReceivingQueue(),
 | 
			
		||||
		queue:      NewReceivingQueue(effectiveConfig.GetReceivingQueueSize()),
 | 
			
		||||
		window:     NewReceivingWindow(windowSize),
 | 
			
		||||
		windowSize: windowSize,
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,8 +1,11 @@
 | 
			
		|||
package kcp_test
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"io"
 | 
			
		||||
	"testing"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/v2ray/v2ray-core/common/alloc"
 | 
			
		||||
	"github.com/v2ray/v2ray-core/testing/assert"
 | 
			
		||||
	. "github.com/v2ray/v2ray-core/transport/internet/kcp"
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			@ -34,3 +37,40 @@ func TestRecivingWindow(t *testing.T) {
 | 
			
		|||
	assert.Pointer(window.Remove(1)).Equals(seg2)
 | 
			
		||||
	assert.Pointer(window.Remove(2)).Equals(seg3)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestRecivingQueue(t *testing.T) {
 | 
			
		||||
	assert := assert.On(t)
 | 
			
		||||
 | 
			
		||||
	queue := NewReceivingQueue(2)
 | 
			
		||||
	assert.Bool(queue.Put(alloc.NewSmallBuffer().Clear().AppendString("abcd"))).IsTrue()
 | 
			
		||||
	assert.Bool(queue.Put(alloc.NewSmallBuffer().Clear().AppendString("efg"))).IsTrue()
 | 
			
		||||
	assert.Bool(queue.Put(alloc.NewSmallBuffer().Clear().AppendString("more content"))).IsFalse()
 | 
			
		||||
 | 
			
		||||
	b := make([]byte, 1024)
 | 
			
		||||
	nBytes, err := queue.Read(b)
 | 
			
		||||
	assert.Error(err).IsNil()
 | 
			
		||||
	assert.Int(nBytes).Equals(7)
 | 
			
		||||
	assert.String(string(b[:nBytes])).Equals("abcdefg")
 | 
			
		||||
 | 
			
		||||
	assert.Bool(queue.Put(alloc.NewSmallBuffer().Clear().AppendString("1"))).IsTrue()
 | 
			
		||||
	queue.Close()
 | 
			
		||||
	nBytes, err = queue.Read(b)
 | 
			
		||||
	assert.Error(err).Equals(io.EOF)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestRecivingQueueTimeout(t *testing.T) {
 | 
			
		||||
	assert := assert.On(t)
 | 
			
		||||
 | 
			
		||||
	queue := NewReceivingQueue(2)
 | 
			
		||||
	assert.Bool(queue.Put(alloc.NewSmallBuffer().Clear().AppendString("abcd"))).IsTrue()
 | 
			
		||||
	queue.SetReadDeadline(time.Now().Add(time.Second))
 | 
			
		||||
 | 
			
		||||
	b := make([]byte, 1024)
 | 
			
		||||
	nBytes, err := queue.Read(b)
 | 
			
		||||
	assert.Error(err).IsNil()
 | 
			
		||||
	assert.Int(nBytes).Equals(4)
 | 
			
		||||
	assert.String(string(b[:nBytes])).Equals("abcd")
 | 
			
		||||
 | 
			
		||||
	nBytes, err = queue.Read(b)
 | 
			
		||||
	assert.Error(err).IsNotNil()
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue