reader_test.go 2.9 KB

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