github.com/cloudwego/kitex@v0.9.0/pkg/remote/trans/netpollmux/mux_transport_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 netpollmux 18 19 import ( 20 "encoding/binary" 21 "testing" 22 23 "github.com/cloudwego/netpoll" 24 25 "github.com/cloudwego/kitex/internal/test" 26 "github.com/cloudwego/kitex/pkg/remote/codec" 27 ) 28 29 func TestParseHeader(t *testing.T) { 30 s := "hello world" 31 seqID := int32(1) 32 reader := mockHeader(seqID, s) 33 34 l, id, err := parseHeader(reader) 35 test.Assert(t, err == nil, err) 36 test.Assert(t, id == seqID, id, seqID) 37 38 rl := reader.Len() 39 test.Assert(t, l == rl, l, rl) 40 } 41 42 // TestParseHeaderErr test parseHeader return err 43 func TestParseHeaderErr(t *testing.T) { 44 s := "hello world" 45 46 reader := netpoll.NewLinkBuffer() 47 buf, _ := reader.Malloc(1 * codec.Size32) 48 // length 49 binary.BigEndian.PutUint32(buf[:codec.Size32], uint32(0)) 50 51 reader.WriteString(s) 52 reader.Flush() 53 54 _, _, err := parseHeader(reader) 55 test.Assert(t, err != nil, err) 56 57 reader = netpoll.NewLinkBuffer() 58 buf, _ = reader.Malloc(1 * codec.Size32) 59 // length 60 binary.BigEndian.PutUint32(buf[:codec.Size32], uint32(1)) 61 // TTHeader 62 binary.BigEndian.PutUint32(buf[:codec.Size32], uint32(1)) 63 64 reader.WriteString(s) 65 reader.Flush() 66 _, _, err = parseHeader(reader) 67 test.Assert(t, err != nil, err) 68 } 69 70 // 0-4Byte length, 4-8Byte version check, 8-12Byte seqID 71 func mockHeader(seqID int32, body string) *netpoll.LinkBuffer { 72 reader := netpoll.NewLinkBuffer() 73 buf, _ := reader.Malloc(3 * codec.Size32) 74 // length 75 binary.BigEndian.PutUint32(buf[:codec.Size32], uint32(len(body))+(2*codec.Size32)) 76 // TTHeader 77 binary.BigEndian.PutUint32(buf[codec.Size32:2*codec.Size32], codec.TTHeaderMagic) 78 // seqID 79 binary.BigEndian.PutUint32(buf[2*codec.Size32:3*codec.Size32], uint32(seqID)) 80 reader.WriteString(body) 81 reader.Flush() 82 return reader 83 }