multi_buffer_test.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. package buf_test
  2. import (
  3. "crypto/rand"
  4. "io"
  5. "testing"
  6. "github.com/google/go-cmp/cmp"
  7. "v2ray.com/core/common"
  8. . "v2ray.com/core/common/buf"
  9. . "v2ray.com/ext/assert"
  10. )
  11. func TestMultiBufferRead(t *testing.T) {
  12. assert := With(t)
  13. b1 := New()
  14. b1.WriteString("ab")
  15. b2 := New()
  16. b2.WriteString("cd")
  17. mb := MultiBuffer{b1, b2}
  18. bs := make([]byte, 32)
  19. _, nBytes := SplitBytes(mb, bs)
  20. assert(nBytes, Equals, 4)
  21. assert(bs[:nBytes], Equals, []byte("abcd"))
  22. }
  23. func TestMultiBufferAppend(t *testing.T) {
  24. assert := With(t)
  25. var mb MultiBuffer
  26. b := New()
  27. b.WriteString("ab")
  28. mb = append(mb, b)
  29. assert(mb.Len(), Equals, int32(2))
  30. }
  31. func TestMultiBufferSliceBySizeLarge(t *testing.T) {
  32. lb := make([]byte, 8*1024)
  33. common.Must2(io.ReadFull(rand.Reader, lb))
  34. mb := MergeBytes(nil, lb)
  35. mb, mb2 := SplitSize(mb, 1024)
  36. if mb2.Len() != 1024 {
  37. t.Error("expect length 1024, but got ", mb2.Len())
  38. }
  39. if mb.Len() != 7*1024 {
  40. t.Error("expect length 7*1024, but got ", mb.Len())
  41. }
  42. mb, mb3 := SplitSize(mb, 7*1024)
  43. if mb3.Len() != 7*1024 {
  44. t.Error("expect length 7*1024, but got", mb.Len())
  45. }
  46. if !mb.IsEmpty() {
  47. t.Error("expect empty buffer, but got ", mb.Len())
  48. }
  49. }
  50. func TestMultiBufferSplitFirst(t *testing.T) {
  51. b1 := New()
  52. b1.WriteString("b1")
  53. b2 := New()
  54. b2.WriteString("b2")
  55. b3 := New()
  56. b3.WriteString("b3")
  57. var mb MultiBuffer
  58. mb = append(mb, b1, b2, b3)
  59. mb, c1 := SplitFirst(mb)
  60. if diff := cmp.Diff(b1.String(), c1.String()); diff != "" {
  61. t.Error(diff)
  62. }
  63. mb, c2 := SplitFirst(mb)
  64. if diff := cmp.Diff(b2.String(), c2.String()); diff != "" {
  65. t.Error(diff)
  66. }
  67. mb, c3 := SplitFirst(mb)
  68. if diff := cmp.Diff(b3.String(), c3.String()); diff != "" {
  69. t.Error(diff)
  70. }
  71. if !mb.IsEmpty() {
  72. t.Error("expect empty buffer, but got ", mb.String())
  73. }
  74. }