123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- package buf_test
- import (
- "bytes"
- "io"
- "strings"
- "testing"
- "github.com/xtls/xray-core/common"
- . "github.com/xtls/xray-core/common/buf"
- "github.com/xtls/xray-core/transport/pipe"
- )
- func TestBytesReaderWriteTo(t *testing.T) {
- pReader, pWriter := pipe.New(pipe.WithSizeLimit(1024))
- reader := &BufferedReader{Reader: pReader}
- b1 := New()
- b1.WriteString("abc")
- b2 := New()
- b2.WriteString("efg")
- common.Must(pWriter.WriteMultiBuffer(MultiBuffer{b1, b2}))
- pWriter.Close()
- pReader2, pWriter2 := pipe.New(pipe.WithSizeLimit(1024))
- writer := NewBufferedWriter(pWriter2)
- writer.SetBuffered(false)
- nBytes, err := io.Copy(writer, reader)
- common.Must(err)
- if nBytes != 6 {
- t.Error("copy: ", nBytes)
- }
- mb, err := pReader2.ReadMultiBuffer()
- common.Must(err)
- if s := mb.String(); s != "abcefg" {
- t.Error("content: ", s)
- }
- }
- func TestBytesReaderMultiBuffer(t *testing.T) {
- pReader, pWriter := pipe.New(pipe.WithSizeLimit(1024))
- reader := &BufferedReader{Reader: pReader}
- b1 := New()
- b1.WriteString("abc")
- b2 := New()
- b2.WriteString("efg")
- common.Must(pWriter.WriteMultiBuffer(MultiBuffer{b1, b2}))
- pWriter.Close()
- mbReader := NewReader(reader)
- mb, err := mbReader.ReadMultiBuffer()
- common.Must(err)
- if s := mb.String(); s != "abcefg" {
- t.Error("content: ", s)
- }
- }
- func TestReadByte(t *testing.T) {
- sr := strings.NewReader("abcd")
- reader := &BufferedReader{
- Reader: NewReader(sr),
- }
- b, err := reader.ReadByte()
- common.Must(err)
- if b != 'a' {
- t.Error("unexpected byte: ", b, " want a")
- }
- if reader.BufferedBytes() != 3 { // 3 bytes left in buffer
- t.Error("unexpected buffered Bytes: ", reader.BufferedBytes())
- }
- nBytes, err := reader.WriteTo(DiscardBytes)
- common.Must(err)
- if nBytes != 3 {
- t.Error("unexpect bytes written: ", nBytes)
- }
- }
- func TestReadBuffer(t *testing.T) {
- {
- sr := strings.NewReader("abcd")
- buf, err := ReadBuffer(sr)
- common.Must(err)
- if s := buf.String(); s != "abcd" {
- t.Error("unexpected str: ", s, " want abcd")
- }
- buf.Release()
- }
- }
- func TestReadAtMost(t *testing.T) {
- sr := strings.NewReader("abcd")
- reader := &BufferedReader{
- Reader: NewReader(sr),
- }
- mb, err := reader.ReadAtMost(3)
- common.Must(err)
- if s := mb.String(); s != "abc" {
- t.Error("unexpected read result: ", s)
- }
- nBytes, err := reader.WriteTo(DiscardBytes)
- common.Must(err)
- if nBytes != 1 {
- t.Error("unexpect bytes written: ", nBytes)
- }
- }
- func TestPacketReader_ReadMultiBuffer(t *testing.T) {
- const alpha = "abcefg"
- buf := bytes.NewBufferString(alpha)
- reader := &PacketReader{buf}
- mb, err := reader.ReadMultiBuffer()
- common.Must(err)
- if s := mb.String(); s != alpha {
- t.Error("content: ", s)
- }
- }
- func TestReaderInterface(t *testing.T) {
- _ = (io.Reader)(new(ReadVReader))
- _ = (Reader)(new(ReadVReader))
- _ = (Reader)(new(BufferedReader))
- _ = (io.Reader)(new(BufferedReader))
- _ = (io.ByteReader)(new(BufferedReader))
- _ = (io.WriterTo)(new(BufferedReader))
- }
|