byte_buffer_reader_test.cc
Go to the documentation of this file.
1 /*
2  *
3  * Copyright 2015 gRPC authors.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
19 #include <string.h>
20 
21 #include <grpc/byte_buffer.h>
23 #include <grpc/grpc.h>
24 #include <grpc/slice.h>
25 #include <grpc/support/alloc.h>
26 #include <grpc/support/log.h>
27 #include <grpc/support/time.h>
28 
29 #include "src/core/lib/gprpp/thd.h"
32 
33 #define LOG_TEST(x) gpr_log(GPR_INFO, "%s", x)
34 
35 static void test_read_one_slice(void) {
39  grpc_slice first_slice, second_slice;
40  int first_code, second_code;
41 
42  LOG_TEST("test_read_one_slice");
47  "Couldn't init byte buffer reader");
48  first_code = grpc_byte_buffer_reader_next(&reader, &first_slice);
49  GPR_ASSERT(first_code != 0);
50  GPR_ASSERT(memcmp(GRPC_SLICE_START_PTR(first_slice), "test", 4) == 0);
51  grpc_slice_unref(first_slice);
52  second_code = grpc_byte_buffer_reader_next(&reader, &second_slice);
53  GPR_ASSERT(second_code == 0);
55 }
56 
57 static void test_read_one_slice_malloc(void) {
61  grpc_slice first_slice, second_slice;
62  int first_code, second_code;
63 
64  LOG_TEST("test_read_one_slice_malloc");
66  memcpy(GRPC_SLICE_START_PTR(slice), "test", 4);
70  "Couldn't init byte buffer reader");
71  first_code = grpc_byte_buffer_reader_next(&reader, &first_slice);
72  GPR_ASSERT(first_code != 0);
73  GPR_ASSERT(memcmp(GRPC_SLICE_START_PTR(first_slice), "test", 4) == 0);
74  grpc_slice_unref(first_slice);
75  second_code = grpc_byte_buffer_reader_next(&reader, &second_slice);
76  GPR_ASSERT(second_code == 0);
78 }
79 
84  grpc_slice first_slice, second_slice;
85  int first_code, second_code;
86 
87  LOG_TEST("test_read_none_compressed_slice");
92  "Couldn't init byte buffer reader");
93  first_code = grpc_byte_buffer_reader_next(&reader, &first_slice);
94  GPR_ASSERT(first_code != 0);
95  GPR_ASSERT(memcmp(GRPC_SLICE_START_PTR(first_slice), "test", 4) == 0);
96  grpc_slice_unref(first_slice);
97  second_code = grpc_byte_buffer_reader_next(&reader, &second_slice);
98  GPR_ASSERT(second_code == 0);
100 }
101 
102 static void test_peek_one_slice(void) {
106  grpc_slice* first_slice;
107  grpc_slice* second_slice;
108  int first_code, second_code;
109 
110  LOG_TEST("test_peek_one_slice");
115  "Couldn't init byte buffer reader");
116  first_code = grpc_byte_buffer_reader_peek(&reader, &first_slice);
117  GPR_ASSERT(first_code != 0);
118  GPR_ASSERT(memcmp(GRPC_SLICE_START_PTR(*first_slice), "test", 4) == 0);
119  second_code = grpc_byte_buffer_reader_peek(&reader, &second_slice);
120  GPR_ASSERT(second_code == 0);
122 }
123 
124 static void test_peek_one_slice_malloc(void) {
128  grpc_slice* first_slice;
129  grpc_slice* second_slice;
130  int first_code, second_code;
131 
132  LOG_TEST("test_peek_one_slice_malloc");
134  memcpy(GRPC_SLICE_START_PTR(slice), "test", 4);
138  "Couldn't init byte buffer reader");
139  first_code = grpc_byte_buffer_reader_peek(&reader, &first_slice);
140  GPR_ASSERT(first_code != 0);
141  GPR_ASSERT(memcmp(GRPC_SLICE_START_PTR(*first_slice), "test", 4) == 0);
142  second_code = grpc_byte_buffer_reader_peek(&reader, &second_slice);
143  GPR_ASSERT(second_code == 0);
145 }
146 
151  grpc_slice* first_slice;
152  grpc_slice* second_slice;
153  int first_code, second_code;
154 
155  LOG_TEST("test_peek_none_compressed_slice");
160  "Couldn't init byte buffer reader");
161  first_code = grpc_byte_buffer_reader_peek(&reader, &first_slice);
162  GPR_ASSERT(first_code != 0);
163  GPR_ASSERT(memcmp(GRPC_SLICE_START_PTR(*first_slice), "test", 4) == 0);
164  second_code = grpc_byte_buffer_reader_peek(&reader, &second_slice);
165  GPR_ASSERT(second_code == 0);
167 }
168 
169 static void test_byte_buffer_from_reader(void) {
171  grpc_byte_buffer *buffer, *buffer_from_reader;
173 
174  LOG_TEST("test_byte_buffer_from_reader");
176  memcpy(GRPC_SLICE_START_PTR(slice), "test", 4);
180  "Couldn't init byte buffer reader");
181 
182  buffer_from_reader = grpc_raw_byte_buffer_from_reader(&reader);
183  GPR_ASSERT(buffer->type == buffer_from_reader->type);
184  GPR_ASSERT(buffer_from_reader->data.raw.compression == GRPC_COMPRESS_NONE);
185  GPR_ASSERT(buffer_from_reader->data.raw.slice_buffer.count == 1);
187  buffer_from_reader->data.raw.slice_buffer.slices[0]),
188  "test", 4) == 0);
189 
191  grpc_byte_buffer_destroy(buffer_from_reader);
192 }
193 
194 static void test_readall(void) {
195  char* lotsa_as[512];
196  char* lotsa_bs[1024];
197  grpc_slice slices[2];
200  grpc_slice slice_out;
201 
202  LOG_TEST("test_readall");
203 
204  memset(lotsa_as, 'a', 512 * sizeof(lotsa_as[0]));
205  memset(lotsa_bs, 'b', 1024 * sizeof(lotsa_bs[0]));
206  /* use slices large enough to overflow inlining */
207  slices[0] = grpc_slice_malloc(512);
208  memcpy(GRPC_SLICE_START_PTR(slices[0]), lotsa_as, 512);
209  slices[1] = grpc_slice_malloc(1024);
210  memcpy(GRPC_SLICE_START_PTR(slices[1]), lotsa_bs, 1024);
211 
215 
217  "Couldn't init byte buffer reader");
219 
220  GPR_ASSERT(GRPC_SLICE_LENGTH(slice_out) == 512 + 1024);
221  GPR_ASSERT(memcmp(GRPC_SLICE_START_PTR(slice_out), lotsa_as, 512) == 0);
222  GPR_ASSERT(memcmp(&(GRPC_SLICE_START_PTR(slice_out)[512]), lotsa_bs, 1024) ==
223  0);
224  grpc_slice_unref(slice_out);
226 }
227 
228 static void test_byte_buffer_copy(void) {
229  char* lotsa_as[512];
230  char* lotsa_bs[1024];
231  grpc_slice slices[2];
233  grpc_byte_buffer* copied_buffer;
235  grpc_slice slice_out;
236 
237  LOG_TEST("test_byte_buffer_copy");
238 
239  memset(lotsa_as, 'a', 512 * sizeof(lotsa_as[0]));
240  memset(lotsa_bs, 'b', 1024 * sizeof(lotsa_bs[0]));
241  /* use slices large enough to overflow inlining */
242  slices[0] = grpc_slice_malloc(512);
243  memcpy(GRPC_SLICE_START_PTR(slices[0]), lotsa_as, 512);
244  slices[1] = grpc_slice_malloc(1024);
245  memcpy(GRPC_SLICE_START_PTR(slices[1]), lotsa_bs, 1024);
246 
250  copied_buffer = grpc_byte_buffer_copy(buffer);
251 
253  "Couldn't init byte buffer reader");
255 
256  GPR_ASSERT(GRPC_SLICE_LENGTH(slice_out) == 512 + 1024);
257  GPR_ASSERT(memcmp(GRPC_SLICE_START_PTR(slice_out), lotsa_as, 512) == 0);
258  GPR_ASSERT(memcmp(&(GRPC_SLICE_START_PTR(slice_out)[512]), lotsa_bs, 1024) ==
259  0);
260  grpc_slice_unref(slice_out);
262  grpc_byte_buffer_destroy(copied_buffer);
263 }
264 
265 int main(int argc, char** argv) {
266  grpc_init();
267  grpc::testing::TestEnvironment env(&argc, argv);
276  test_readall();
277  grpc_shutdown();
278  return 0;
279 }
test_peek_one_slice_malloc
static void test_peek_one_slice_malloc(void)
Definition: byte_buffer_reader_test.cc:124
grpc_slice_unref
GPRAPI void grpc_slice_unref(grpc_slice s)
Definition: slice_api.cc:32
log.h
grpc_raw_byte_buffer_create
GRPCAPI grpc_byte_buffer * grpc_raw_byte_buffer_create(grpc_slice *slices, size_t nslices)
Definition: byte_buffer.cc:34
generate.env
env
Definition: generate.py:37
memset
return memset(p, 0, total)
grpc_slice_from_copied_string
GPRAPI grpc_slice grpc_slice_from_copied_string(const char *source)
Definition: slice/slice.cc:177
slice.h
grpc_byte_buffer::grpc_byte_buffer_data::raw
struct grpc_byte_buffer::grpc_byte_buffer_data::grpc_compressed_buffer raw
grpc_byte_buffer_reader_readall
GRPCAPI grpc_slice grpc_byte_buffer_reader_readall(grpc_byte_buffer_reader *reader)
Definition: byte_buffer_reader.cc:84
string.h
grpc_slice_buffer::slices
grpc_slice * slices
Definition: include/grpc/impl/codegen/slice.h:89
grpc_byte_buffer_reader_next
GRPCAPI int grpc_byte_buffer_reader_next(grpc_byte_buffer_reader *reader, grpc_slice *slice)
Definition: byte_buffer_reader.cc:66
time.h
test_readall
static void test_readall(void)
Definition: byte_buffer_reader_test.cc:194
GRPC_COMPRESS_NONE
@ GRPC_COMPRESS_NONE
Definition: compression_types.h:61
grpc_slice_malloc
GPRAPI grpc_slice grpc_slice_malloc(size_t length)
Definition: slice/slice.cc:227
grpc_byte_buffer::type
grpc_byte_buffer_type type
Definition: grpc_types.h:45
byte_buffer_reader.h
memcpy
memcpy(mem, inblock.get(), min(CONTAINING_RECORD(inblock.get(), MEMBLOCK, data) ->size, size))
test_byte_buffer_from_reader
static void test_byte_buffer_from_reader(void)
Definition: byte_buffer_reader_test.cc:169
GPR_ASSERT
#define GPR_ASSERT(x)
Definition: include/grpc/impl/codegen/log.h:94
grpc_slice_buffer::count
size_t count
Definition: include/grpc/impl/codegen/slice.h:91
slice
grpc_slice slice
Definition: src/core/lib/surface/server.cc:467
grpc_byte_buffer_reader_init
GRPCAPI int grpc_byte_buffer_reader_init(grpc_byte_buffer_reader *reader, grpc_byte_buffer *buffer)
Definition: byte_buffer_reader.cc:33
grpc.h
grpc_byte_buffer
Definition: grpc_types.h:43
GRPC_SLICE_START_PTR
#define GRPC_SLICE_START_PTR(slice)
Definition: include/grpc/impl/codegen/slice.h:101
grpc_slice
Definition: include/grpc/impl/codegen/slice.h:65
buffer
char buffer[1024]
Definition: libuv/docs/code/idle-compute/main.c:8
test_peek_none_compressed_slice
static void test_peek_none_compressed_slice(void)
Definition: byte_buffer_reader_test.cc:147
GRPC_SLICE_LENGTH
#define GRPC_SLICE_LENGTH(slice)
Definition: include/grpc/impl/codegen/slice.h:104
grpc_byte_buffer::data
union grpc_byte_buffer::grpc_byte_buffer_data data
test_config.h
grpc_raw_byte_buffer_from_reader
GRPCAPI grpc_byte_buffer * grpc_raw_byte_buffer_from_reader(grpc_byte_buffer_reader *reader)
Definition: byte_buffer.cc:56
test_read_one_slice
static void test_read_one_slice(void)
Definition: byte_buffer_reader_test.cc:35
grpc_byte_buffer::grpc_byte_buffer_data::grpc_compressed_buffer::compression
grpc_compression_algorithm compression
Definition: grpc_types.h:51
alloc.h
test_peek_one_slice
static void test_peek_one_slice(void)
Definition: byte_buffer_reader_test.cc:102
test_byte_buffer_copy
static void test_byte_buffer_copy(void)
Definition: byte_buffer_reader_test.cc:228
grpc::testing::TestEnvironment
Definition: test/core/util/test_config.h:54
thd.h
test_read_one_slice_malloc
static void test_read_one_slice_malloc(void)
Definition: byte_buffer_reader_test.cc:57
slices
SliceBuffer * slices
Definition: retry_filter.cc:631
grpc_byte_buffer_destroy
GRPCAPI void grpc_byte_buffer_destroy(grpc_byte_buffer *bb)
Definition: byte_buffer.cc:81
exec_ctx.h
grpc_byte_buffer_reader_peek
GRPCAPI int grpc_byte_buffer_reader_peek(grpc_byte_buffer_reader *reader, grpc_slice **slice)
Definition: byte_buffer_reader.cc:49
main
int main(int argc, char **argv)
Definition: byte_buffer_reader_test.cc:265
grpc_byte_buffer::grpc_byte_buffer_data::grpc_compressed_buffer::slice_buffer
grpc_slice_buffer slice_buffer
Definition: grpc_types.h:52
LOG_TEST
#define LOG_TEST(x)
Definition: byte_buffer_reader_test.cc:33
grpc_byte_buffer_copy
GRPCAPI grpc_byte_buffer * grpc_byte_buffer_copy(grpc_byte_buffer *bb)
Definition: byte_buffer.cc:71
grpc_init
GRPCAPI void grpc_init(void)
Definition: init.cc:146
grpc_byte_buffer_reader
Definition: impl/codegen/byte_buffer_reader.h:30
grpc_shutdown
GRPCAPI void grpc_shutdown(void)
Definition: init.cc:209
test_read_none_compressed_slice
static void test_read_none_compressed_slice(void)
Definition: byte_buffer_reader_test.cc:80
reader
void reader(void *n)
Definition: libuv/docs/code/locks/main.c:8


grpc
Author(s):
autogenerated on Thu Mar 13 2025 02:58:41