chunk_test.go 1.1 KB

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