aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/core/surface/byte_buffer_reader_test.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/core/surface/byte_buffer_reader_test.c')
-rw-r--r--test/core/surface/byte_buffer_reader_test.c79
1 files changed, 77 insertions, 2 deletions
diff --git a/test/core/surface/byte_buffer_reader_test.c b/test/core/surface/byte_buffer_reader_test.c
index c2f5fc2eb7..87a2cd7a43 100644
--- a/test/core/surface/byte_buffer_reader_test.c
+++ b/test/core/surface/byte_buffer_reader_test.c
@@ -42,6 +42,8 @@
#include <grpc/support/time.h>
#include "test/core/util/test_config.h"
+#include "src/core/compression/message_compress.h"
+
#include <string.h>
#define LOG_TEST(x) gpr_log(GPR_INFO, "%s", x)
@@ -55,7 +57,7 @@ static void test_read_one_slice(void) {
LOG_TEST("test_read_one_slice");
slice = gpr_slice_from_copied_string("test");
- buffer = grpc_byte_buffer_create(&slice, 1);
+ buffer = grpc_raw_byte_buffer_create(&slice, 1);
gpr_slice_unref(slice);
grpc_byte_buffer_reader_init(&reader, buffer);
first_code = grpc_byte_buffer_reader_next(&reader, &first_slice);
@@ -77,7 +79,28 @@ static void test_read_one_slice_malloc(void) {
LOG_TEST("test_read_one_slice_malloc");
slice = gpr_slice_malloc(4);
memcpy(GPR_SLICE_START_PTR(slice), "test", 4);
- buffer = grpc_byte_buffer_create(&slice, 1);
+ buffer = grpc_raw_byte_buffer_create(&slice, 1);
+ gpr_slice_unref(slice);
+ grpc_byte_buffer_reader_init(&reader, buffer);
+ first_code = grpc_byte_buffer_reader_next(&reader, &first_slice);
+ GPR_ASSERT(first_code != 0);
+ GPR_ASSERT(memcmp(GPR_SLICE_START_PTR(first_slice), "test", 4) == 0);
+ gpr_slice_unref(first_slice);
+ second_code = grpc_byte_buffer_reader_next(&reader, &second_slice);
+ GPR_ASSERT(second_code == 0);
+ grpc_byte_buffer_destroy(buffer);
+}
+
+static void test_read_none_compressed_slice(void) {
+ gpr_slice slice;
+ grpc_byte_buffer *buffer;
+ grpc_byte_buffer_reader reader;
+ gpr_slice first_slice, second_slice;
+ int first_code, second_code;
+
+ LOG_TEST("test_read_none_compressed_slice");
+ slice = gpr_slice_from_copied_string("test");
+ buffer = grpc_raw_byte_buffer_create(&slice, 1);
gpr_slice_unref(slice);
grpc_byte_buffer_reader_init(&reader, buffer);
first_code = grpc_byte_buffer_reader_next(&reader, &first_slice);
@@ -89,9 +112,61 @@ static void test_read_one_slice_malloc(void) {
grpc_byte_buffer_destroy(buffer);
}
+static void read_compressed_slice(grpc_compression_algorithm algorithm,
+ int input_size) {
+ gpr_slice input_slice;
+ gpr_slice_buffer sliceb_in;
+ gpr_slice_buffer sliceb_out;
+ grpc_byte_buffer *buffer;
+ grpc_byte_buffer_reader reader;
+ gpr_slice read_slice;
+ int read_count = 0;
+
+ gpr_slice_buffer_init(&sliceb_in);
+ gpr_slice_buffer_init(&sliceb_out);
+
+ input_slice = gpr_slice_malloc(input_size);
+ memset(GPR_SLICE_START_PTR(input_slice), 'a', input_size);
+ gpr_slice_buffer_add(&sliceb_in, input_slice); /* takes ownership */
+ GPR_ASSERT(grpc_msg_compress(algorithm, &sliceb_in, &sliceb_out));
+
+ buffer = grpc_raw_compressed_byte_buffer_create(
+ sliceb_out.slices, sliceb_out.count, algorithm);
+ grpc_byte_buffer_reader_init(&reader, buffer);
+
+ while (grpc_byte_buffer_reader_next(&reader, &read_slice)) {
+ GPR_ASSERT(memcmp(GPR_SLICE_START_PTR(read_slice),
+ GPR_SLICE_START_PTR(input_slice) + read_count,
+ GPR_SLICE_LENGTH(read_slice)) == 0);
+ read_count += GPR_SLICE_LENGTH(read_slice);
+ gpr_slice_unref(read_slice);
+ }
+ GPR_ASSERT(read_count == input_size);
+ grpc_byte_buffer_reader_destroy(&reader);
+ grpc_byte_buffer_destroy(buffer);
+ gpr_slice_buffer_destroy(&sliceb_out);
+ gpr_slice_buffer_destroy(&sliceb_in);
+}
+
+static void test_read_gzip_compressed_slice(void) {
+ const int INPUT_SIZE = 2048;
+ LOG_TEST("test_read_gzip_compressed_slice");
+ read_compressed_slice(GRPC_COMPRESS_GZIP, INPUT_SIZE);
+}
+
+static void test_read_deflate_compressed_slice(void) {
+ const int INPUT_SIZE = 2048;
+ LOG_TEST("test_read_deflate_compressed_slice");
+ read_compressed_slice(GRPC_COMPRESS_DEFLATE, INPUT_SIZE);
+}
+
int main(int argc, char **argv) {
grpc_test_init(argc, argv);
test_read_one_slice();
test_read_one_slice_malloc();
+ test_read_none_compressed_slice();
+ test_read_gzip_compressed_slice();
+ test_read_deflate_compressed_slice();
+
return 0;
}