writer_test.go 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package buf_test
  2. import (
  3. "bufio"
  4. "bytes"
  5. "crypto/rand"
  6. "io"
  7. "testing"
  8. "v2ray.com/core/common"
  9. . "v2ray.com/core/common/buf"
  10. "v2ray.com/core/transport/pipe"
  11. . "v2ray.com/ext/assert"
  12. )
  13. func TestWriter(t *testing.T) {
  14. assert := With(t)
  15. lb := New()
  16. common.Must2(lb.ReadFrom(rand.Reader))
  17. expectedBytes := append([]byte(nil), lb.Bytes()...)
  18. writeBuffer := bytes.NewBuffer(make([]byte, 0, 1024*1024))
  19. writer := NewBufferedWriter(NewWriter(writeBuffer))
  20. writer.SetBuffered(false)
  21. err := writer.WriteMultiBuffer(MultiBuffer{lb})
  22. common.Must(err)
  23. assert(writer.Flush(), IsNil)
  24. assert(expectedBytes, Equals, writeBuffer.Bytes())
  25. }
  26. func TestBytesWriterReadFrom(t *testing.T) {
  27. assert := With(t)
  28. const size = 50000
  29. pReader, pWriter := pipe.New(pipe.WithSizeLimit(size))
  30. reader := bufio.NewReader(io.LimitReader(rand.Reader, size))
  31. writer := NewBufferedWriter(pWriter)
  32. writer.SetBuffered(false)
  33. nBytes, err := reader.WriteTo(writer)
  34. assert(nBytes, Equals, int64(size))
  35. if err != nil {
  36. t.Fatal("expect success, but actually error: ", err.Error())
  37. }
  38. mb, err := pReader.ReadMultiBuffer()
  39. common.Must(err)
  40. assert(mb.Len(), Equals, int32(size))
  41. }
  42. func TestDiscardBytes(t *testing.T) {
  43. assert := With(t)
  44. b := New()
  45. common.Must2(b.ReadFullFrom(rand.Reader, Size))
  46. nBytes, err := io.Copy(DiscardBytes, b)
  47. assert(nBytes, Equals, int64(Size))
  48. common.Must(err)
  49. }
  50. func TestDiscardBytesMultiBuffer(t *testing.T) {
  51. assert := With(t)
  52. const size = 10240*1024 + 1
  53. buffer := bytes.NewBuffer(make([]byte, 0, size))
  54. common.Must2(buffer.ReadFrom(io.LimitReader(rand.Reader, size)))
  55. r := NewReader(buffer)
  56. nBytes, err := io.Copy(DiscardBytes, &BufferedReader{Reader: r})
  57. assert(nBytes, Equals, int64(size))
  58. common.Must(err)
  59. }
  60. func TestWriterInterface(t *testing.T) {
  61. {
  62. var writer interface{} = (*BufferToBytesWriter)(nil)
  63. switch writer.(type) {
  64. case Writer, io.Writer, io.ReaderFrom:
  65. default:
  66. t.Error("BufferToBytesWriter is not Writer, io.Writer or io.ReaderFrom")
  67. }
  68. }
  69. {
  70. var writer interface{} = (*BufferedWriter)(nil)
  71. switch writer.(type) {
  72. case Writer, io.Writer, io.ReaderFrom, io.ByteWriter:
  73. default:
  74. t.Error("BufferedWriter is not Writer, io.Writer, io.ReaderFrom or io.ByteWriter")
  75. }
  76. }
  77. }