reader_test.go 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package buf_test
  2. import (
  3. "bytes"
  4. "io"
  5. "runtime"
  6. "testing"
  7. . "v2ray.com/core/common/buf"
  8. "v2ray.com/core/transport/pipe"
  9. . "v2ray.com/ext/assert"
  10. )
  11. func TestAdaptiveReader(t *testing.T) {
  12. if runtime.GOARCH != "amd64" {
  13. t.Skip("Smart reader only works on highend devices.")
  14. return
  15. }
  16. assert := With(t)
  17. reader := NewReader(bytes.NewReader(make([]byte, 1024*1024)))
  18. b, err := reader.ReadMultiBuffer()
  19. assert(err, IsNil)
  20. assert(b.Len(), Equals, int32(Size))
  21. b, err = reader.ReadMultiBuffer()
  22. assert(err, IsNil)
  23. assert(b.Len(), Equals, int32(8*1024))
  24. b, err = reader.ReadMultiBuffer()
  25. assert(err, IsNil)
  26. assert(b.Len(), Equals, int32(32*1024))
  27. b, err = reader.ReadMultiBuffer()
  28. assert(err, IsNil)
  29. assert(b.Len(), Equals, int32(128*1024))
  30. }
  31. func TestBytesReaderWriteTo(t *testing.T) {
  32. assert := With(t)
  33. pReader, pWriter := pipe.New(pipe.WithSizeLimit(1024))
  34. reader := &BufferedReader{Reader: pReader}
  35. b1 := New()
  36. b1.WriteBytes('a', 'b', 'c')
  37. b2 := New()
  38. b2.WriteBytes('e', 'f', 'g')
  39. assert(pWriter.WriteMultiBuffer(NewMultiBufferValue(b1, b2)), IsNil)
  40. pWriter.Close()
  41. pReader2, pWriter2 := pipe.New(pipe.WithSizeLimit(1024))
  42. writer := NewBufferedWriter(pWriter2)
  43. writer.SetBuffered(false)
  44. nBytes, err := io.Copy(writer, reader)
  45. assert(err, IsNil)
  46. assert(nBytes, Equals, int64(6))
  47. mb, err := pReader2.ReadMultiBuffer()
  48. assert(err, IsNil)
  49. assert(len(mb), Equals, 2)
  50. assert(mb[0].String(), Equals, "abc")
  51. assert(mb[1].String(), Equals, "efg")
  52. }
  53. func TestBytesReaderMultiBuffer(t *testing.T) {
  54. assert := With(t)
  55. pReader, pWriter := pipe.New(pipe.WithSizeLimit(1024))
  56. reader := &BufferedReader{Reader: pReader}
  57. b1 := New()
  58. b1.WriteBytes('a', 'b', 'c')
  59. b2 := New()
  60. b2.WriteBytes('e', 'f', 'g')
  61. assert(pWriter.WriteMultiBuffer(NewMultiBufferValue(b1, b2)), IsNil)
  62. pWriter.Close()
  63. mbReader := NewReader(reader)
  64. mb, err := mbReader.ReadMultiBuffer()
  65. assert(err, IsNil)
  66. assert(len(mb), Equals, 2)
  67. assert(mb[0].String(), Equals, "abc")
  68. assert(mb[1].String(), Equals, "efg")
  69. }
  70. func TestReaderInterface(t *testing.T) {
  71. assert := With(t)
  72. assert((*BytesToBufferReader)(nil), Implements, (*io.Reader)(nil))
  73. assert((*BytesToBufferReader)(nil), Implements, (*Reader)(nil))
  74. assert((*BufferedReader)(nil), Implements, (*Reader)(nil))
  75. assert((*BufferedReader)(nil), Implements, (*io.Reader)(nil))
  76. assert((*BufferedReader)(nil), Implements, (*io.ByteReader)(nil))
  77. assert((*BufferedReader)(nil), Implements, (*io.WriterTo)(nil))
  78. }