segment_test.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. package kcp_test
  2. import (
  3. "testing"
  4. "github.com/google/go-cmp/cmp"
  5. "github.com/google/go-cmp/cmp/cmpopts"
  6. . "v2ray.com/core/transport/internet/kcp"
  7. )
  8. func TestBadSegment(t *testing.T) {
  9. seg, buf := ReadSegment(nil)
  10. if seg != nil {
  11. t.Error("non-nil seg")
  12. }
  13. if len(buf) != 0 {
  14. t.Error("buf len: ", len(buf))
  15. }
  16. }
  17. func TestDataSegment(t *testing.T) {
  18. seg := &DataSegment{
  19. Conv: 1,
  20. Timestamp: 3,
  21. Number: 4,
  22. SendingNext: 5,
  23. }
  24. seg.Data().Write([]byte{'a', 'b', 'c', 'd'})
  25. nBytes := seg.ByteSize()
  26. bytes := make([]byte, nBytes)
  27. seg.Serialize(bytes)
  28. iseg, _ := ReadSegment(bytes)
  29. seg2 := iseg.(*DataSegment)
  30. if r := cmp.Diff(seg2, seg, cmpopts.IgnoreUnexported(DataSegment{})); r != "" {
  31. t.Error(r)
  32. }
  33. if r := cmp.Diff(seg2.Data().Bytes(), seg.Data().Bytes()); r != "" {
  34. t.Error(r)
  35. }
  36. }
  37. func Test1ByteDataSegment(t *testing.T) {
  38. seg := &DataSegment{
  39. Conv: 1,
  40. Timestamp: 3,
  41. Number: 4,
  42. SendingNext: 5,
  43. }
  44. seg.Data().WriteByte('a')
  45. nBytes := seg.ByteSize()
  46. bytes := make([]byte, nBytes)
  47. seg.Serialize(bytes)
  48. iseg, _ := ReadSegment(bytes)
  49. seg2 := iseg.(*DataSegment)
  50. if r := cmp.Diff(seg2, seg, cmpopts.IgnoreUnexported(DataSegment{})); r != "" {
  51. t.Error(r)
  52. }
  53. if r := cmp.Diff(seg2.Data().Bytes(), seg.Data().Bytes()); r != "" {
  54. t.Error(r)
  55. }
  56. }
  57. func TestACKSegment(t *testing.T) {
  58. seg := &AckSegment{
  59. Conv: 1,
  60. ReceivingWindow: 2,
  61. ReceivingNext: 3,
  62. Timestamp: 10,
  63. NumberList: []uint32{1, 3, 5, 7, 9},
  64. }
  65. nBytes := seg.ByteSize()
  66. bytes := make([]byte, nBytes)
  67. seg.Serialize(bytes)
  68. iseg, _ := ReadSegment(bytes)
  69. seg2 := iseg.(*AckSegment)
  70. if r := cmp.Diff(seg2, seg); r != "" {
  71. t.Error(r)
  72. }
  73. }
  74. func TestCmdSegment(t *testing.T) {
  75. seg := &CmdOnlySegment{
  76. Conv: 1,
  77. Cmd: CommandPing,
  78. Option: SegmentOptionClose,
  79. SendingNext: 11,
  80. ReceivingNext: 13,
  81. PeerRTO: 15,
  82. }
  83. nBytes := seg.ByteSize()
  84. bytes := make([]byte, nBytes)
  85. seg.Serialize(bytes)
  86. iseg, _ := ReadSegment(bytes)
  87. seg2 := iseg.(*CmdOnlySegment)
  88. if r := cmp.Diff(seg2, seg); r != "" {
  89. t.Error(r)
  90. }
  91. }