|
| 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 | + |
1 | 17 | package thrift |
2 | 18 |
|
3 | 19 | import ( |
@@ -63,52 +79,64 @@ func TestGridBufferSkip(t *testing.T) { |
63 | 79 | b = Binary.AppendI32(b, 1) |
64 | 80 | b = Binary.AppendFieldStop(b) |
65 | 81 |
|
66 | | - gbuf := gridbuf.NewReadBuffer([][]byte{b}) |
| 82 | + tf := func(gbuf *gridbuf.ReadBuffer) { |
| 83 | + var ufs []byte |
67 | 84 |
|
68 | | - var ufs []byte |
| 85 | + ufs, err := GridBuffer.Skip(gbuf, BYTE, ufs, true) |
| 86 | + require.NoError(t, err) |
69 | 87 |
|
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) |
72 | 90 |
|
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) |
75 | 93 |
|
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) |
78 | 96 |
|
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) |
81 | 99 |
|
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) |
84 | 102 |
|
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) |
87 | 105 |
|
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) |
90 | 108 |
|
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) |
93 | 111 |
|
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) |
96 | 114 |
|
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) |
99 | 117 |
|
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 | + } |
102 | 120 |
|
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) |
104 | 132 |
|
105 | 133 | // errDepthLimitExceeded |
106 | 134 | b = b[:0] |
107 | 135 | for i := 0; i < defaultRecursionDepth+1; i++ { |
108 | 136 | b = Binary.AppendFieldBegin(b, STRUCT, 1) |
109 | 137 | } |
110 | 138 | gbuf = gridbuf.NewReadBuffer([][]byte{b}) |
111 | | - _, err = GridBuffer.Skip(gbuf, STRUCT, nil, false) |
| 139 | + _, err := GridBuffer.Skip(gbuf, STRUCT, nil, false) |
112 | 140 | require.Same(t, errDepthLimitExceeded, err) |
113 | 141 |
|
114 | 142 | // unknown type |
|
0 commit comments