receiving_test.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package kcp_test
  2. import (
  3. "io"
  4. "testing"
  5. "time"
  6. "github.com/v2ray/v2ray-core/common/alloc"
  7. "github.com/v2ray/v2ray-core/testing/assert"
  8. . "github.com/v2ray/v2ray-core/transport/internet/kcp"
  9. )
  10. func TestRecivingWindow(t *testing.T) {
  11. assert := assert.On(t)
  12. window := NewReceivingWindow(3)
  13. seg0 := &DataSegment{}
  14. seg1 := &DataSegment{}
  15. seg2 := &DataSegment{}
  16. seg3 := &DataSegment{}
  17. assert.Bool(window.Set(0, seg0)).IsTrue()
  18. assert.Pointer(window.RemoveFirst()).Equals(seg0)
  19. e := window.RemoveFirst()
  20. if e != nil {
  21. assert.Fail("Expecting nil.")
  22. }
  23. assert.Bool(window.Set(1, seg1)).IsTrue()
  24. assert.Bool(window.Set(2, seg2)).IsTrue()
  25. window.Advance()
  26. assert.Bool(window.Set(2, seg3)).IsTrue()
  27. assert.Pointer(window.RemoveFirst()).Equals(seg1)
  28. assert.Pointer(window.Remove(1)).Equals(seg2)
  29. assert.Pointer(window.Remove(2)).Equals(seg3)
  30. }
  31. func TestRecivingQueue(t *testing.T) {
  32. assert := assert.On(t)
  33. queue := NewReceivingQueue(2)
  34. assert.Bool(queue.Put(alloc.NewSmallBuffer().Clear().AppendString("abcd"))).IsTrue()
  35. assert.Bool(queue.Put(alloc.NewSmallBuffer().Clear().AppendString("efg"))).IsTrue()
  36. assert.Bool(queue.Put(alloc.NewSmallBuffer().Clear().AppendString("more content"))).IsFalse()
  37. b := make([]byte, 1024)
  38. nBytes, err := queue.Read(b)
  39. assert.Error(err).IsNil()
  40. assert.Int(nBytes).Equals(7)
  41. assert.String(string(b[:nBytes])).Equals("abcdefg")
  42. assert.Bool(queue.Put(alloc.NewSmallBuffer().Clear().AppendString("1"))).IsTrue()
  43. queue.Close()
  44. nBytes, err = queue.Read(b)
  45. assert.Error(err).Equals(io.EOF)
  46. }
  47. func TestRecivingQueueTimeout(t *testing.T) {
  48. assert := assert.On(t)
  49. queue := NewReceivingQueue(2)
  50. assert.Bool(queue.Put(alloc.NewSmallBuffer().Clear().AppendString("abcd"))).IsTrue()
  51. queue.SetReadDeadline(time.Now().Add(time.Second))
  52. b := make([]byte, 1024)
  53. nBytes, err := queue.Read(b)
  54. assert.Error(err).IsNil()
  55. assert.Int(nBytes).Equals(4)
  56. assert.String(string(b[:nBytes])).Equals("abcd")
  57. nBytes, err = queue.Read(b)
  58. assert.Error(err).IsNotNil()
  59. }