github.com/cloudwego/kitex@v0.9.0/pkg/remote/trans/netpoll/bytebuf_test.go (about) 1 /* 2 * Copyright 2021 CloudWeGo Authors 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package netpoll 18 19 import ( 20 "bufio" 21 "bytes" 22 "strings" 23 "testing" 24 25 "github.com/cloudwego/netpoll" 26 27 "github.com/cloudwego/kitex/internal/test" 28 "github.com/cloudwego/kitex/pkg/remote" 29 ) 30 31 // TestByteBuffer test bytebuf write and read success 32 func TestByteBuffer(t *testing.T) { 33 // 1. prepare mock data 34 msg := "hello world" 35 reader := bufio.NewReader(strings.NewReader(msg + msg + msg + msg + msg)) 36 writer := bufio.NewWriter(bytes.NewBufferString(msg + msg + msg + msg + msg)) 37 bufRW := bufio.NewReadWriter(reader, writer) 38 39 // 2. test 40 rw := netpoll.NewReadWriter(bufRW) 41 42 buf1 := NewReaderWriterByteBuffer(rw) 43 // check writable 44 checkWritable(t, buf1) 45 // check readable 46 checkReadable(t, buf1) 47 48 buf2 := buf1.NewBuffer() 49 // check writable 50 checkWritable(t, buf2) 51 // check unreadable 52 checkUnreadable(t, buf2) 53 54 err := buf1.AppendBuffer(buf2) 55 test.Assert(t, err == nil) 56 } 57 58 // TestWriterBuffer test writerbytebufferr return writedirect err 59 func TestWriterBuffer(t *testing.T) { 60 // 1. prepare mock data 61 msg := "hello world" 62 wi := bytes.NewBufferString(msg + msg + msg + msg + msg) 63 nbp := &netpollByteBuffer{} 64 65 // 2. test 66 w := netpoll.NewWriter(wi) 67 68 buf := NewWriterByteBuffer(w) 69 // check writable 70 checkWritable(t, buf) 71 // check unreadable 72 checkUnreadable(t, buf) 73 74 err := nbp.WriteDirect([]byte(msg), 11) 75 // check err not nil 76 test.Assert(t, err != nil, err) 77 } 78 79 // TestReaderBuffer test readerbytebufferr success 80 func TestReaderBuffer(t *testing.T) { 81 // 1. prepare mock data 82 msg := "hello world" 83 ri := strings.NewReader(msg + msg + msg + msg + msg) 84 r := netpoll.NewReader(ri) 85 86 buf := NewReaderByteBuffer(r) 87 // check unwritable 88 checkUnwritable(t, buf) 89 // check readable 90 checkReadable(t, buf) 91 } 92 93 func checkWritable(t *testing.T, buf remote.ByteBuffer) { 94 msg := "hello world" 95 96 p, err := buf.Malloc(len(msg)) 97 test.Assert(t, err == nil, err) 98 test.Assert(t, len(p) == len(msg)) 99 copy(p, msg) 100 101 l := buf.MallocLen() 102 test.Assert(t, l == len(msg)) 103 104 l, err = buf.WriteString(msg) 105 test.Assert(t, err == nil, err) 106 test.Assert(t, l == len(msg)) 107 108 l, err = buf.WriteBinary([]byte(msg)) 109 test.Assert(t, err == nil, err) 110 test.Assert(t, l == len(msg)) 111 112 err = buf.Flush() 113 test.Assert(t, err == nil, err) 114 } 115 116 func checkReadable(t *testing.T, buf remote.ByteBuffer) { 117 msg := "hello world" 118 var s string 119 120 p, err := buf.Peek(len(msg)) 121 test.Assert(t, err == nil, err) 122 test.Assert(t, string(p) == msg) 123 124 err = buf.Skip(1 + len(msg)) 125 test.Assert(t, err == nil, err) 126 127 p, err = buf.Next(len(msg) - 1) 128 test.Assert(t, err == nil, err) 129 test.Assert(t, string(p) == msg[1:]) 130 131 n := buf.ReadableLen() 132 test.Assert(t, n == 3*len(msg), n) 133 134 n = buf.ReadLen() 135 test.Assert(t, n == len(msg)-1, n) 136 137 s, err = buf.ReadString(len(msg)) 138 test.Assert(t, err == nil, err) 139 test.Assert(t, s == msg) 140 141 p, err = buf.ReadBinary(len(msg)) 142 test.Assert(t, err == nil, err) 143 test.Assert(t, string(p) == msg) 144 } 145 146 func checkUnwritable(t *testing.T, buf remote.ByteBuffer) { 147 msg := "hello world" 148 var n int 149 150 _, err := buf.Malloc(len(msg)) 151 test.Assert(t, err != nil) 152 153 l := buf.MallocLen() 154 test.Assert(t, l == -1, l) 155 156 _, err = buf.WriteString(msg) 157 test.Assert(t, err != nil) 158 159 _, err = buf.WriteBinary([]byte(msg)) 160 test.Assert(t, err != nil) 161 162 err = buf.Flush() 163 test.Assert(t, err != nil) 164 165 n, err = buf.Write([]byte(msg)) 166 test.Assert(t, err != nil) 167 test.Assert(t, n == -1, n) 168 169 _, err = buf.Write(nil) 170 test.Assert(t, err != nil) 171 } 172 173 func checkUnreadable(t *testing.T, buf remote.ByteBuffer) { 174 msg := "hello world" 175 p := make([]byte, len(msg)) 176 var n int 177 178 _, err := buf.Peek(len(msg)) 179 test.Assert(t, err != nil) 180 181 err = buf.Skip(1) 182 test.Assert(t, err != nil) 183 184 _, err = buf.Next(len(msg) - 1) 185 test.Assert(t, err != nil) 186 187 n = buf.ReadableLen() 188 test.Assert(t, n == -1) 189 190 n = buf.ReadLen() 191 test.Assert(t, n == 0) 192 193 _, err = buf.ReadString(len(msg)) 194 test.Assert(t, err != nil) 195 196 _, err = buf.ReadBinary(len(msg)) 197 test.Assert(t, err != nil) 198 199 n, err = buf.Read(p) 200 test.Assert(t, err != nil) 201 test.Assert(t, n == -1, n) 202 203 _, err = buf.Read(nil) 204 test.Assert(t, err != nil) 205 }