frame_handler_test.cc
Go to the documentation of this file.
1 /*
2  *
3  * Copyright 2018 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 
20 
21 #include <stdint.h>
22 #include <stdio.h>
23 #include <string.h>
24 
25 #include <algorithm>
26 
27 #include <grpc/support/alloc.h>
28 #include <grpc/support/log.h>
29 
32 
33 const size_t kFrameHandlerTestBufferSize = 1024;
34 
35 typedef struct frame_handler {
38  unsigned char* buffer;
39  size_t buffer_size;
41 
42 static size_t frame_length(size_t payload_length) {
43  return payload_length + kFrameHeaderSize;
44 }
45 
48  static_cast<frame_handler*>(gpr_malloc(sizeof(frame_handler)));
51  handler->buffer = nullptr;
52  handler->buffer_size = 0;
53  return handler;
54 }
55 
57  if (handler != nullptr) {
60  if (handler->buffer != nullptr) gpr_free(handler->buffer);
62  }
63 }
64 
65 static void frame(frame_handler* handler, unsigned char* payload,
66  size_t payload_length, size_t write_length) {
67  handler->buffer_size = frame_length(payload_length);
68  handler->buffer =
69  static_cast<unsigned char*>(gpr_malloc(handler->buffer_size));
70  GPR_ASSERT(alts_reset_frame_writer(handler->writer, payload, payload_length));
71  size_t offset = 0;
74  size_t bytes_written =
75  std::min(write_length, handler->buffer_size - offset);
77  &bytes_written));
79  }
81  GPR_ASSERT(handler->buffer_size == offset);
82 }
83 
84 static size_t deframe(frame_handler* handler, unsigned char* bytes,
85  size_t read_length) {
87  size_t offset = 0;
90  size_t bytes_read = std::min(read_length, handler->buffer_size - offset);
92  &bytes_read));
93  offset += bytes_read;
94  }
96  GPR_ASSERT(handler->buffer_size == offset);
97  return offset - handler->reader->header_bytes_read;
98 }
99 
100 static void frame_n_deframe(frame_handler* handler, unsigned char* payload,
101  size_t payload_length, size_t write_length,
102  size_t read_length) {
103  frame(handler, payload, payload_length, write_length);
104  unsigned char* bytes =
105  static_cast<unsigned char*>(gpr_malloc(kFrameHandlerTestBufferSize));
106  size_t deframed_payload_length = deframe(handler, bytes, read_length);
107  GPR_ASSERT(payload_length == deframed_payload_length);
108  GPR_ASSERT(memcmp(payload, bytes, payload_length) == 0);
109  gpr_free(bytes);
110 }
111 
113  unsigned char payload[] = "hello world";
114  size_t payload_length = strlen(reinterpret_cast<char*>(payload)) + 1;
116  frame_n_deframe(handler, payload, payload_length,
117  frame_length(payload_length), frame_length(payload_length));
119 }
120 
122  unsigned char payload[] = "hello world";
123  size_t payload_length = strlen(reinterpret_cast<char*>(payload)) + 1;
125  frame_n_deframe(handler, payload, payload_length, 1, 1);
127 }
128 
131  GPR_ASSERT(!alts_reset_frame_writer(handler->writer, nullptr, 0));
133 }
134 
136  unsigned char payload[] = "hello world";
140 }
141 
143  unsigned char payload[] = "hello world";
144  size_t payload_length = strlen(reinterpret_cast<char*>(payload)) + 1;
146  GPR_ASSERT(alts_reset_frame_writer(handler->writer, payload, payload_length));
147  GPR_ASSERT(
148  !alts_write_frame_bytes(handler->writer, handler->buffer, nullptr));
150 }
151 
153  unsigned char payload[] = "hello world";
154  size_t payload_length = strlen(reinterpret_cast<char*>(payload)) + 1;
156  GPR_ASSERT(alts_reset_frame_writer(handler->writer, payload, payload_length));
157  GPR_ASSERT(
158  !alts_write_frame_bytes(handler->writer, nullptr, &payload_length));
160 }
161 
163  unsigned char payload[] = "hello world";
164  size_t payload_length = strlen(reinterpret_cast<char*>(payload)) + 1;
166  frame(handler, payload, payload_length, payload_length);
167  memset(handler->buffer, 0x00, kFrameLengthFieldSize);
168  unsigned char* bytes =
169  static_cast<unsigned char*>(gpr_malloc(kFrameHandlerTestBufferSize));
171  size_t bytes_read = handler->buffer_size;
172  GPR_ASSERT(
173  !alts_read_frame_bytes(handler->reader, handler->buffer, &bytes_read));
175  GPR_ASSERT(bytes_read == 0);
176  gpr_free(bytes);
178 }
179 
181  unsigned char payload[] = "hello world";
182  size_t payload_length = strlen(reinterpret_cast<char*>(payload)) + 1;
184  frame(handler, payload, payload_length, payload_length);
185  memset(handler->buffer + kFrameLengthFieldSize, 0x00,
187  unsigned char* bytes =
188  static_cast<unsigned char*>(gpr_malloc(kFrameHandlerTestBufferSize));
190  size_t bytes_read = handler->buffer_size;
191  GPR_ASSERT(
192  !alts_read_frame_bytes(handler->reader, handler->buffer, &bytes_read));
194  GPR_ASSERT(bytes_read == 0);
195  gpr_free(bytes);
197 }
198 
200  unsigned char payload[] = "hello world";
201  size_t payload_length = strlen(reinterpret_cast<char*>(payload)) + 1;
203  frame(handler, payload, payload_length, payload_length);
204  GPR_ASSERT(!alts_reset_frame_reader(handler->reader, nullptr));
206 }
207 
209  unsigned char payload[] = "hello world";
210  size_t payload_length = strlen(reinterpret_cast<char*>(payload)) + 1;
212  frame(handler, payload, payload_length, payload_length);
213  unsigned char* bytes =
214  static_cast<unsigned char*>(gpr_malloc(kFrameHandlerTestBufferSize));
216  GPR_ASSERT(!alts_read_frame_bytes(handler->reader, handler->buffer, nullptr));
217  gpr_free(bytes);
219 }
220 
222  unsigned char payload[] = "hello world";
223  size_t payload_length = strlen(reinterpret_cast<char*>(payload)) + 1;
225  frame(handler, payload, payload_length, payload_length);
226  unsigned char* bytes =
227  static_cast<unsigned char*>(gpr_malloc(kFrameHandlerTestBufferSize));
229  size_t bytes_read = handler->buffer_size;
230  GPR_ASSERT(!alts_read_frame_bytes(handler->reader, nullptr, &bytes_read));
231  gpr_free(bytes);
233 }
234 
235 int main(int /*argc*/, char** /*argv*/) {
247  return 0;
248 }
main
int main(int, char **)
Definition: frame_handler_test.cc:235
alts_reset_frame_reader
bool alts_reset_frame_reader(alts_frame_reader *reader, unsigned char *buffer)
Definition: frame_handler.cc:146
alts_create_frame_writer
alts_frame_writer * alts_create_frame_writer()
Definition: frame_handler.cc:51
log.h
frame_handler_test_null_input_stream
static void frame_handler_test_null_input_stream()
Definition: frame_handler_test.cc:129
memset
return memset(p, 0, total)
frame_handler.h
frame_handler_test_bad_input_length
static void frame_handler_test_bad_input_length()
Definition: frame_handler_test.cc:135
string.h
alts_frame_writer
Definition: frame_handler.h:43
gpr_free
GPRAPI void gpr_free(void *ptr)
Definition: alloc.cc:51
useful.h
gpr_malloc
GPRAPI void * gpr_malloc(size_t size)
Definition: alloc.cc:29
alts_is_frame_writer_done
bool alts_is_frame_writer_done(alts_frame_writer *writer)
Definition: frame_handler.cc:109
frame_handler
struct frame_handler frame_handler
frame_handler::buffer
unsigned char * buffer
Definition: frame_handler_test.cc:38
frame_handler_test_null_reader_bytes
static void frame_handler_test_null_reader_bytes()
Definition: frame_handler_test.cc:221
frame_handler
Definition: frame_handler_test.cc:35
alts_destroy_frame_reader
void alts_destroy_frame_reader(alts_frame_reader *reader)
Definition: frame_handler.cc:219
frame_handler_test_bad_frame_length
static void frame_handler_test_bad_frame_length()
Definition: frame_handler_test.cc:162
frame_handler_test_small_buffer
static void frame_handler_test_small_buffer()
Definition: frame_handler_test.cc:121
alts_read_frame_bytes
bool alts_read_frame_bytes(alts_frame_reader *reader, const unsigned char *bytes, size_t *bytes_size)
Definition: frame_handler.cc:155
frame_length
static size_t frame_length(size_t payload_length)
Definition: frame_handler_test.cc:42
kFrameLengthFieldSize
const size_t kFrameLengthFieldSize
Definition: frame_handler.h:28
frame_handler::writer
alts_frame_writer * writer
Definition: frame_handler_test.cc:36
GPR_ASSERT
#define GPR_ASSERT(x)
Definition: include/grpc/impl/codegen/log.h:94
SIZE_MAX
#define SIZE_MAX
Definition: stdint-msvc2008.h:206
frame_handler::reader
alts_frame_reader * reader
Definition: frame_handler_test.cc:37
destroy_frame_handler
static void destroy_frame_handler(frame_handler *handler)
Definition: frame_handler_test.cc:56
gsec_test_util.h
alts_reset_frame_writer
bool alts_reset_frame_writer(alts_frame_writer *writer, const unsigned char *buffer, size_t length)
Definition: frame_handler.cc:55
bytes_read
static size_t bytes_read
Definition: test-ipc-heavy-traffic-deadlock-bug.c:47
alts_is_frame_reader_done
bool alts_is_frame_reader_done(alts_frame_reader *reader)
Definition: frame_handler.cc:127
kFrameHandlerTestBufferSize
const size_t kFrameHandlerTestBufferSize
Definition: frame_handler_test.cc:33
frame_n_deframe
static void frame_n_deframe(frame_handler *handler, unsigned char *payload, size_t payload_length, size_t write_length, size_t read_length)
Definition: frame_handler_test.cc:100
min
#define min(a, b)
Definition: qsort.h:83
frame_handler_test_null_output_stream
static void frame_handler_test_null_output_stream()
Definition: frame_handler_test.cc:199
stdint.h
alts_write_frame_bytes
bool alts_write_frame_bytes(alts_frame_writer *writer, unsigned char *output, size_t *bytes_size)
Definition: frame_handler.cc:74
frame_handler_test_frame_deframe
static void frame_handler_test_frame_deframe()
Definition: frame_handler_test.cc:112
alts_create_frame_reader
alts_frame_reader * alts_create_frame_reader()
Definition: frame_handler.cc:122
bytes
uint8 bytes[10]
Definition: bloaty/third_party/protobuf/src/google/protobuf/io/coded_stream_unittest.cc:153
frame_handler_test_null_reader_byte_length
static void frame_handler_test_null_reader_byte_length()
Definition: frame_handler_test.cc:208
frame_handler_test_unsupported_message_type
static void frame_handler_test_unsupported_message_type()
Definition: frame_handler_test.cc:180
client.handler
handler
Definition: examples/python/multiprocessing/client.py:87
frame_handler_test_null_writer_byte_length
static void frame_handler_test_null_writer_byte_length()
Definition: frame_handler_test.cc:142
alts_destroy_frame_writer
void alts_destroy_frame_writer(alts_frame_writer *writer)
Definition: frame_handler.cc:119
alloc.h
frame_handler_test_null_writer_bytes
static void frame_handler_test_null_writer_bytes()
Definition: frame_handler_test.cc:152
frame
static void frame(frame_handler *handler, unsigned char *payload, size_t payload_length, size_t write_length)
Definition: frame_handler_test.cc:65
frame_handler::buffer_size
size_t buffer_size
Definition: frame_handler_test.cc:39
kFrameHeaderSize
const size_t kFrameHeaderSize
Definition: frame_handler.h:31
bytes_written
static size_t bytes_written
Definition: test-ipc-heavy-traffic-deadlock-bug.c:46
kFrameMessageTypeFieldSize
const size_t kFrameMessageTypeFieldSize
Definition: frame_handler.h:29
deframe
static size_t deframe(frame_handler *handler, unsigned char *bytes, size_t read_length)
Definition: frame_handler_test.cc:84
create_frame_handler
static frame_handler * create_frame_handler()
Definition: frame_handler_test.cc:46
gen_server_registered_method_bad_client_test_body.payload
list payload
Definition: gen_server_registered_method_bad_client_test_body.py:40
versiongenerate.buffer_size
int buffer_size
Definition: bloaty/third_party/protobuf/third_party/googletest/googletest/xcode/Scripts/versiongenerate.py:65
offset
voidpf uLong offset
Definition: bloaty/third_party/zlib/contrib/minizip/ioapi.h:142
alts_frame_reader
Definition: frame_handler.h:55


grpc
Author(s):
autogenerated on Thu Mar 13 2025 02:59:22