github.com/v2fly/v2ray-core/v5@v5.16.2-0.20240507031116-8191faa6e095/common/buf/reader_test.go (about) 1 package buf_test 2 3 import ( 4 "bytes" 5 "io" 6 "strings" 7 "testing" 8 9 "github.com/v2fly/v2ray-core/v5/common" 10 . "github.com/v2fly/v2ray-core/v5/common/buf" 11 "github.com/v2fly/v2ray-core/v5/transport/pipe" 12 ) 13 14 func TestBytesReaderWriteTo(t *testing.T) { 15 pReader, pWriter := pipe.New(pipe.WithSizeLimit(1024)) 16 reader := &BufferedReader{Reader: pReader} 17 b1 := New() 18 b1.WriteString("abc") 19 b2 := New() 20 b2.WriteString("efg") 21 common.Must(pWriter.WriteMultiBuffer(MultiBuffer{b1, b2})) 22 pWriter.Close() 23 24 pReader2, pWriter2 := pipe.New(pipe.WithSizeLimit(1024)) 25 writer := NewBufferedWriter(pWriter2) 26 writer.SetBuffered(false) 27 28 nBytes, err := io.Copy(writer, reader) 29 common.Must(err) 30 if nBytes != 6 { 31 t.Error("copy: ", nBytes) 32 } 33 34 mb, err := pReader2.ReadMultiBuffer() 35 common.Must(err) 36 if s := mb.String(); s != "abcefg" { 37 t.Error("content: ", s) 38 } 39 } 40 41 func TestBytesReaderMultiBuffer(t *testing.T) { 42 pReader, pWriter := pipe.New(pipe.WithSizeLimit(1024)) 43 reader := &BufferedReader{Reader: pReader} 44 b1 := New() 45 b1.WriteString("abc") 46 b2 := New() 47 b2.WriteString("efg") 48 common.Must(pWriter.WriteMultiBuffer(MultiBuffer{b1, b2})) 49 pWriter.Close() 50 51 mbReader := NewReader(reader) 52 mb, err := mbReader.ReadMultiBuffer() 53 common.Must(err) 54 if s := mb.String(); s != "abcefg" { 55 t.Error("content: ", s) 56 } 57 } 58 59 func TestReadByte(t *testing.T) { 60 sr := strings.NewReader("abcd") 61 reader := &BufferedReader{ 62 Reader: NewReader(sr), 63 } 64 b, err := reader.ReadByte() 65 common.Must(err) 66 if b != 'a' { 67 t.Error("unexpected byte: ", b, " want a") 68 } 69 if reader.BufferedBytes() != 3 { // 3 bytes left in buffer 70 t.Error("unexpected buffered Bytes: ", reader.BufferedBytes()) 71 } 72 73 nBytes, err := reader.WriteTo(DiscardBytes) 74 common.Must(err) 75 if nBytes != 3 { 76 t.Error("unexpect bytes written: ", nBytes) 77 } 78 } 79 80 func TestReadBuffer(t *testing.T) { 81 { 82 sr := strings.NewReader("abcd") 83 buf, err := ReadBuffer(sr) 84 common.Must(err) 85 86 if s := buf.String(); s != "abcd" { 87 t.Error("unexpected str: ", s, " want abcd") 88 } 89 buf.Release() 90 } 91 } 92 93 func TestReadAtMost(t *testing.T) { 94 sr := strings.NewReader("abcd") 95 reader := &BufferedReader{ 96 Reader: NewReader(sr), 97 } 98 99 mb, err := reader.ReadAtMost(3) 100 common.Must(err) 101 if s := mb.String(); s != "abc" { 102 t.Error("unexpected read result: ", s) 103 } 104 105 nBytes, err := reader.WriteTo(DiscardBytes) 106 common.Must(err) 107 if nBytes != 1 { 108 t.Error("unexpect bytes written: ", nBytes) 109 } 110 } 111 112 func TestPacketReader_ReadMultiBuffer(t *testing.T) { 113 const alpha = "abcefg" 114 buf := bytes.NewBufferString(alpha) 115 reader := &PacketReader{buf} 116 mb, err := reader.ReadMultiBuffer() 117 common.Must(err) 118 if s := mb.String(); s != alpha { 119 t.Error("content: ", s) 120 } 121 } 122 123 func TestReaderInterface(t *testing.T) { 124 _ = (io.Reader)(new(ReadVReader)) 125 _ = (Reader)(new(ReadVReader)) 126 127 _ = (Reader)(new(BufferedReader)) 128 _ = (io.Reader)(new(BufferedReader)) 129 _ = (io.ByteReader)(new(BufferedReader)) 130 _ = (io.WriterTo)(new(BufferedReader)) 131 }