chunk_test.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package crypto_test
  2. import (
  3. "bytes"
  4. "io"
  5. "testing"
  6. "github.com/xtls/xray-core/common"
  7. "github.com/xtls/xray-core/common/buf"
  8. . "github.com/xtls/xray-core/common/crypto"
  9. )
  10. func TestChunkStreamIO(t *testing.T) {
  11. cache := bytes.NewBuffer(make([]byte, 0, 8192))
  12. writer := NewChunkStreamWriter(PlainChunkSizeParser{}, cache)
  13. reader := NewChunkStreamReader(PlainChunkSizeParser{}, cache)
  14. b := buf.New()
  15. b.WriteString("abcd")
  16. common.Must(writer.WriteMultiBuffer(buf.MultiBuffer{b}))
  17. b = buf.New()
  18. b.WriteString("efg")
  19. common.Must(writer.WriteMultiBuffer(buf.MultiBuffer{b}))
  20. common.Must(writer.WriteMultiBuffer(buf.MultiBuffer{}))
  21. if cache.Len() != 13 {
  22. t.Fatalf("Cache length is %d, want 13", cache.Len())
  23. }
  24. mb, err := reader.ReadMultiBuffer()
  25. common.Must(err)
  26. if s := mb.String(); s != "abcd" {
  27. t.Error("content: ", s)
  28. }
  29. mb, err = reader.ReadMultiBuffer()
  30. common.Must(err)
  31. if s := mb.String(); s != "efg" {
  32. t.Error("content: ", s)
  33. }
  34. _, err = reader.ReadMultiBuffer()
  35. if err != io.EOF {
  36. t.Error("error: ", err)
  37. }
  38. }