sending_test.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. package kcp_test
  2. import (
  3. "testing"
  4. "github.com/v2ray/v2ray-core/testing/assert"
  5. . "github.com/v2ray/v2ray-core/transport/internet/kcp"
  6. )
  7. func TestSendingQueue(t *testing.T) {
  8. assert := assert.On(t)
  9. queue := NewSendingQueue(3)
  10. seg0 := &DataSegment{}
  11. seg1 := &DataSegment{}
  12. seg2 := &DataSegment{}
  13. seg3 := &DataSegment{}
  14. assert.Bool(queue.IsEmpty()).IsTrue()
  15. assert.Bool(queue.IsFull()).IsFalse()
  16. queue.Push(seg0)
  17. assert.Bool(queue.IsEmpty()).IsFalse()
  18. queue.Push(seg1)
  19. queue.Push(seg2)
  20. assert.Bool(queue.IsFull()).IsTrue()
  21. assert.Pointer(queue.Pop()).Equals(seg0)
  22. queue.Push(seg3)
  23. assert.Bool(queue.IsFull()).IsTrue()
  24. assert.Pointer(queue.Pop()).Equals(seg1)
  25. assert.Pointer(queue.Pop()).Equals(seg2)
  26. assert.Pointer(queue.Pop()).Equals(seg3)
  27. assert.Int(int(queue.Len())).Equals(0)
  28. }
  29. func TestSendingQueueClear(t *testing.T) {
  30. assert := assert.On(t)
  31. queue := NewSendingQueue(3)
  32. seg0 := &DataSegment{}
  33. seg1 := &DataSegment{}
  34. seg2 := &DataSegment{}
  35. seg3 := &DataSegment{}
  36. queue.Push(seg0)
  37. assert.Bool(queue.IsEmpty()).IsFalse()
  38. queue.Clear()
  39. assert.Bool(queue.IsEmpty()).IsTrue()
  40. queue.Push(seg1)
  41. queue.Push(seg2)
  42. queue.Push(seg3)
  43. queue.Clear()
  44. assert.Bool(queue.IsEmpty()).IsTrue()
  45. }
  46. func TestSendingWindow(t *testing.T) {
  47. assert := assert.On(t)
  48. window := NewSendingWindow(5, nil, nil)
  49. window.Push(&DataSegment{
  50. Number: 0,
  51. })
  52. window.Push(&DataSegment{
  53. Number: 1,
  54. })
  55. window.Push(&DataSegment{
  56. Number: 2,
  57. })
  58. assert.Int(window.Len()).Equals(3)
  59. window.Remove(1)
  60. assert.Int(window.Len()).Equals(3)
  61. assert.Uint32(window.First().Number).Equals(0)
  62. window.Remove(0)
  63. assert.Int(window.Len()).Equals(1)
  64. assert.Uint32(window.First().Number).Equals(2)
  65. window.Remove(0)
  66. assert.Int(window.Len()).Equals(0)
  67. window.Push(&DataSegment{
  68. Number: 4,
  69. })
  70. assert.Int(window.Len()).Equals(1)
  71. assert.Uint32(window.First().Number).Equals(4)
  72. window.Push(&DataSegment{
  73. Number: 5,
  74. })
  75. assert.Int(window.Len()).Equals(2)
  76. window.Remove(1)
  77. assert.Int(window.Len()).Equals(2)
  78. window.Remove(0)
  79. assert.Int(window.Len()).Equals(0)
  80. }