reader_test.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. package buf_test
  2. import (
  3. "bytes"
  4. "io"
  5. "io/ioutil"
  6. "os"
  7. "strings"
  8. "testing"
  9. "github.com/google/go-cmp/cmp"
  10. "v2ray.com/core/common"
  11. . "v2ray.com/core/common/buf"
  12. "v2ray.com/core/transport/pipe"
  13. )
  14. func TestBytesReaderWriteTo(t *testing.T) {
  15. pReader, pWriter := pipe.New(pipe.WithSizeLimit(1024))
  16. reader := &BufferedReader{Reader: pReader}
  17. b1 := New()
  18. b1.WriteString("abc")
  19. b2 := New()
  20. b2.WriteString("efg")
  21. common.Must(pWriter.WriteMultiBuffer(MultiBuffer{b1, b2}))
  22. pWriter.Close()
  23. pReader2, pWriter2 := pipe.New(pipe.WithSizeLimit(1024))
  24. writer := NewBufferedWriter(pWriter2)
  25. writer.SetBuffered(false)
  26. nBytes, err := io.Copy(writer, reader)
  27. common.Must(err)
  28. if nBytes != 6 {
  29. t.Error("copy: ", nBytes)
  30. }
  31. mb, err := pReader2.ReadMultiBuffer()
  32. common.Must(err)
  33. if s := mb.String(); s != "abcefg" {
  34. t.Error("content: ", s)
  35. }
  36. }
  37. func TestBytesReaderMultiBuffer(t *testing.T) {
  38. pReader, pWriter := pipe.New(pipe.WithSizeLimit(1024))
  39. reader := &BufferedReader{Reader: pReader}
  40. b1 := New()
  41. b1.WriteString("abc")
  42. b2 := New()
  43. b2.WriteString("efg")
  44. common.Must(pWriter.WriteMultiBuffer(MultiBuffer{b1, b2}))
  45. pWriter.Close()
  46. mbReader := NewReader(reader)
  47. mb, err := mbReader.ReadMultiBuffer()
  48. common.Must(err)
  49. if s := mb.String(); s != "abcefg" {
  50. t.Error("content: ", s)
  51. }
  52. }
  53. func TestReadByte(t *testing.T) {
  54. sr := strings.NewReader("abcd")
  55. reader := &BufferedReader{
  56. Reader: NewReader(sr),
  57. }
  58. b, err := reader.ReadByte()
  59. common.Must(err)
  60. if b != 'a' {
  61. t.Error("unexpected byte: ", b, " want a")
  62. }
  63. if reader.BufferedBytes() != 3 { // 3 bytes left in buffer
  64. t.Error("unexpected buffered Bytes: ", reader.BufferedBytes())
  65. }
  66. nBytes, err := reader.WriteTo(DiscardBytes)
  67. common.Must(err)
  68. if nBytes != 3 {
  69. t.Error("unexpect bytes written: ", nBytes)
  70. }
  71. }
  72. func TestReadBuffer(t *testing.T) {
  73. {
  74. sr := strings.NewReader("abcd")
  75. buf, err := ReadBuffer(sr)
  76. common.Must(err)
  77. if s := buf.String(); s != "abcd" {
  78. t.Error("unexpected str: ", s, " want abcd")
  79. }
  80. buf.Release()
  81. }
  82. {
  83. const dat = "data/test_ReadBuffer.dat"
  84. f, err := os.Open(dat)
  85. common.Must(err)
  86. defer f.Close()
  87. buf2, err := ReadBuffer(f)
  88. common.Must(err)
  89. cnt, err := ioutil.ReadFile(dat)
  90. common.Must(err)
  91. if cmp.Diff(buf2.Bytes(), cnt) != "" {
  92. t.Error("fail to read from file")
  93. }
  94. buf2.Release()
  95. }
  96. }
  97. func TestReadAtMost(t *testing.T) {
  98. sr := strings.NewReader("abcd")
  99. reader := &BufferedReader{
  100. Reader: NewReader(sr),
  101. }
  102. mb, err := reader.ReadAtMost(3)
  103. common.Must(err)
  104. if s := mb.String(); s != "abc" {
  105. t.Error("unexpected read result: ", s)
  106. }
  107. nBytes, err := reader.WriteTo(DiscardBytes)
  108. common.Must(err)
  109. if nBytes != 1 {
  110. t.Error("unexpect bytes written: ", nBytes)
  111. }
  112. }
  113. func TestPacketReader_ReadMultiBuffer(t *testing.T) {
  114. const alpha = "abcefg"
  115. buf := bytes.NewBufferString(alpha)
  116. reader := &PacketReader{buf}
  117. mb, err := reader.ReadMultiBuffer()
  118. common.Must(err)
  119. if s := mb.String(); s != alpha {
  120. t.Error("content: ", s)
  121. }
  122. }
  123. func TestReaderInterface(t *testing.T) {
  124. _ = (io.Reader)(new(ReadVReader))
  125. _ = (Reader)(new(ReadVReader))
  126. _ = (Reader)(new(BufferedReader))
  127. _ = (io.Reader)(new(BufferedReader))
  128. _ = (io.ByteReader)(new(BufferedReader))
  129. _ = (io.WriterTo)(new(BufferedReader))
  130. }