chunk_test.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package crypto_test
  2. import (
  3. "bytes"
  4. "io"
  5. "testing"
  6. "v2ray.com/core/common"
  7. "v2ray.com/core/common/buf"
  8. . "v2ray.com/core/common/crypto"
  9. . "v2ray.com/ext/assert"
  10. )
  11. func TestChunkStreamIO(t *testing.T) {
  12. assert := With(t)
  13. cache := bytes.NewBuffer(make([]byte, 0, 8192))
  14. writer := NewChunkStreamWriter(PlainChunkSizeParser{}, cache)
  15. reader := NewChunkStreamReader(PlainChunkSizeParser{}, cache)
  16. b := buf.New()
  17. b.WriteBytes('a', 'b', 'c', 'd')
  18. common.Must(writer.WriteMultiBuffer(buf.NewMultiBufferValue(b)))
  19. b = buf.New()
  20. b.WriteBytes('e', 'f', 'g')
  21. common.Must(writer.WriteMultiBuffer(buf.NewMultiBufferValue(b)))
  22. common.Must(writer.WriteMultiBuffer(buf.MultiBuffer{}))
  23. if cache.Len() != 13 {
  24. t.Fatalf("Cache length is %d, want 13", cache.Len())
  25. }
  26. mb, err := reader.ReadMultiBuffer()
  27. common.Must(err)
  28. assert(mb.Len(), Equals, int32(4))
  29. assert(mb[0].Bytes(), Equals, []byte("abcd"))
  30. mb, err = reader.ReadMultiBuffer()
  31. assert(err, IsNil)
  32. assert(mb.Len(), Equals, int32(3))
  33. assert(mb[0].Bytes(), Equals, []byte("efg"))
  34. _, err = reader.ReadMultiBuffer()
  35. assert(err, Equals, io.EOF)
  36. }