From 9caec653ea75611c5f71ddea131f649526437467 Mon Sep 17 00:00:00 2001
From: yang-g <yangg@google.com>
Date: Mon, 7 Dec 2015 09:32:44 -0800
Subject: [PATCH] add test for byte_buffer_copy

---
 test/core/surface/byte_buffer_reader_test.c | 37 +++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/test/core/surface/byte_buffer_reader_test.c b/test/core/surface/byte_buffer_reader_test.c
index 6b41698717..c87fbdc897 100644
--- a/test/core/surface/byte_buffer_reader_test.c
+++ b/test/core/surface/byte_buffer_reader_test.c
@@ -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;
 }
-- 
GitLab