Skip to content

Commit b6645e3

Browse files
committed
feat: grid buffer tests
1 parent 83a2233 commit b6645e3

File tree

2 files changed

+55
-27
lines changed

2 files changed

+55
-27
lines changed

protocol/thrift/gridbuf.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ func (p GridBufferProtocol) Skip(b *gridbuf.ReadBuffer, t TType, unknownFields [
3232
return p.skipType(b, t, defaultRecursionDepth, unknownFields, receiveUnknownFields)
3333
}
3434

35-
func (p GridBufferProtocol) skipType(b *gridbuf.ReadBuffer, t TType, maxdepth int, unknownFields []byte, receiveUnknownFields bool, ) ([]byte, error) {
35+
func (p GridBufferProtocol) skipType(b *gridbuf.ReadBuffer, t TType, maxdepth int, unknownFields []byte, receiveUnknownFields bool) ([]byte, error) {
3636
if maxdepth == 0 {
3737
return unknownFields, errDepthLimitExceeded
3838
}

protocol/thrift/gridbuf_test.go

Lines changed: 54 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,19 @@
1+
/*
2+
* Copyright 2025 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+
117
package thrift
218

319
import (
@@ -63,52 +79,64 @@ func TestGridBufferSkip(t *testing.T) {
6379
b = Binary.AppendI32(b, 1)
6480
b = Binary.AppendFieldStop(b)
6581

66-
gbuf := gridbuf.NewReadBuffer([][]byte{b})
82+
tf := func(gbuf *gridbuf.ReadBuffer) {
83+
var ufs []byte
6784

68-
var ufs []byte
85+
ufs, err := GridBuffer.Skip(gbuf, BYTE, ufs, true)
86+
require.NoError(t, err)
6987

70-
ufs, err := GridBuffer.Skip(gbuf, BYTE, ufs, true)
71-
require.NoError(t, err)
88+
ufs, err = GridBuffer.Skip(gbuf, STRING, ufs, true)
89+
require.NoError(t, err)
7290

73-
ufs, err = GridBuffer.Skip(gbuf, STRING, ufs, true)
74-
require.NoError(t, err)
91+
ufs, err = GridBuffer.Skip(gbuf, LIST, ufs, true) // list<i32>
92+
require.NoError(t, err)
7593

76-
ufs, err = GridBuffer.Skip(gbuf, LIST, ufs, true) // list<i32>
77-
require.NoError(t, err)
94+
ufs, err = GridBuffer.Skip(gbuf, LIST, ufs, true) // list<string>
95+
require.NoError(t, err)
7896

79-
ufs, err = GridBuffer.Skip(gbuf, LIST, ufs, true) // list<string>
80-
require.NoError(t, err)
97+
ufs, err = GridBuffer.Skip(gbuf, LIST, ufs, true) // list<list<i32>>
98+
require.NoError(t, err)
8199

82-
ufs, err = GridBuffer.Skip(gbuf, LIST, ufs, true) // list<list<i32>>
83-
require.NoError(t, err)
100+
ufs, err = GridBuffer.Skip(gbuf, MAP, ufs, true) // map<i32, i64>
101+
require.NoError(t, err)
84102

85-
ufs, err = GridBuffer.Skip(gbuf, MAP, ufs, true) // map<i32, i64>
86-
require.NoError(t, err)
103+
ufs, err = GridBuffer.Skip(gbuf, MAP, ufs, true) // map<i32, string>
104+
require.NoError(t, err)
87105

88-
ufs, err = GridBuffer.Skip(gbuf, MAP, ufs, true) // map<i32, string>
89-
require.NoError(t, err)
106+
ufs, err = GridBuffer.Skip(gbuf, MAP, ufs, true) // map<string, i64>
107+
require.NoError(t, err)
90108

91-
ufs, err = GridBuffer.Skip(gbuf, MAP, ufs, true) // map<string, i64>
92-
require.NoError(t, err)
109+
ufs, err = GridBuffer.Skip(gbuf, MAP, ufs, true) // map<i32, list<i32>>
110+
require.NoError(t, err)
93111

94-
ufs, err = GridBuffer.Skip(gbuf, MAP, ufs, true) // map<i32, list<i32>>
95-
require.NoError(t, err)
112+
ufs, err = GridBuffer.Skip(gbuf, MAP, ufs, true) // map<list<i32>, i32>
113+
require.NoError(t, err)
96114

97-
ufs, err = GridBuffer.Skip(gbuf, MAP, ufs, true) // map<list<i32>, i32>
98-
require.NoError(t, err)
115+
ufs, err = GridBuffer.Skip(gbuf, STRUCT, ufs, true) // struct i32, list<i32>
116+
require.NoError(t, err)
99117

100-
ufs, err = GridBuffer.Skip(gbuf, STRUCT, ufs, true) // struct i32, list<i32>
101-
require.NoError(t, err)
118+
require.Equal(t, b, ufs)
119+
}
102120

103-
require.Equal(t, b, ufs)
121+
// test split bytes
122+
var nbuf [][]byte
123+
for _, byt := range b {
124+
nbuf = append(nbuf, []byte{byt})
125+
}
126+
gbuf := gridbuf.NewReadBuffer(nbuf)
127+
tf(gbuf)
128+
129+
// test merge bytes
130+
gbuf = gridbuf.NewReadBuffer([][]byte{b})
131+
tf(gbuf)
104132

105133
// errDepthLimitExceeded
106134
b = b[:0]
107135
for i := 0; i < defaultRecursionDepth+1; i++ {
108136
b = Binary.AppendFieldBegin(b, STRUCT, 1)
109137
}
110138
gbuf = gridbuf.NewReadBuffer([][]byte{b})
111-
_, err = GridBuffer.Skip(gbuf, STRUCT, nil, false)
139+
_, err := GridBuffer.Skip(gbuf, STRUCT, nil, false)
112140
require.Same(t, errDepthLimitExceeded, err)
113141

114142
// unknown type

0 commit comments

Comments
 (0)