|
|
|
@ -217,6 +217,42 @@ static void test_readall(void) { |
|
|
|
|
grpc_byte_buffer_destroy(buffer); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void test_byte_buffer_copy(void) { |
|
|
|
|
char *lotsa_as[512]; |
|
|
|
|
char *lotsa_bs[1024]; |
|
|
|
|
gpr_slice slices[2]; |
|
|
|
|
grpc_byte_buffer *buffer; |
|
|
|
|
grpc_byte_buffer *copied_buffer; |
|
|
|
|
grpc_byte_buffer_reader reader; |
|
|
|
|
gpr_slice slice_out; |
|
|
|
|
|
|
|
|
|
LOG_TEST("test_byte_buffer_copy"); |
|
|
|
|
|
|
|
|
|
memset(lotsa_as, 'a', 512); |
|
|
|
|
memset(lotsa_bs, 'b', 1024); |
|
|
|
|
/* use slices large enough to overflow inlining */ |
|
|
|
|
slices[0] = gpr_slice_malloc(512); |
|
|
|
|
memcpy(GPR_SLICE_START_PTR(slices[0]), lotsa_as, 512); |
|
|
|
|
slices[1] = gpr_slice_malloc(1024); |
|
|
|
|
memcpy(GPR_SLICE_START_PTR(slices[1]), lotsa_bs, 1024); |
|
|
|
|
|
|
|
|
|
buffer = grpc_raw_byte_buffer_create(slices, 2); |
|
|
|
|
gpr_slice_unref(slices[0]); |
|
|
|
|
gpr_slice_unref(slices[1]); |
|
|
|
|
copied_buffer = grpc_byte_buffer_copy(buffer); |
|
|
|
|
|
|
|
|
|
grpc_byte_buffer_reader_init(&reader, copied_buffer); |
|
|
|
|
slice_out = grpc_byte_buffer_reader_readall(&reader); |
|
|
|
|
|
|
|
|
|
GPR_ASSERT(GPR_SLICE_LENGTH(slice_out) == 512 + 1024); |
|
|
|
|
GPR_ASSERT(memcmp(GPR_SLICE_START_PTR(slice_out), lotsa_as, 512) == 0); |
|
|
|
|
GPR_ASSERT(memcmp(&(GPR_SLICE_START_PTR(slice_out)[512]), lotsa_bs, 1024) == |
|
|
|
|
0); |
|
|
|
|
gpr_slice_unref(slice_out); |
|
|
|
|
grpc_byte_buffer_destroy(buffer); |
|
|
|
|
grpc_byte_buffer_destroy(copied_buffer); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int main(int argc, char **argv) { |
|
|
|
|
grpc_test_init(argc, argv); |
|
|
|
|
test_read_one_slice(); |
|
|
|
@ -225,6 +261,7 @@ int main(int argc, char **argv) { |
|
|
|
|
test_read_gzip_compressed_slice(); |
|
|
|
|
test_read_deflate_compressed_slice(); |
|
|
|
|
test_byte_buffer_from_reader(); |
|
|
|
|
test_byte_buffer_copy(); |
|
|
|
|
test_readall(); |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|