aboutsummaryrefslogtreecommitdiffhomepage
path: root/test
diff options
context:
space:
mode:
authorGravatar David Garcia Quintas <dgq@google.com>2015-06-04 17:40:54 -0700
committerGravatar David Garcia Quintas <dgq@google.com>2015-06-05 16:34:33 -0700
commit25d02d56370bfa0ead2a79203c522ce02cbe9394 (patch)
treee4a2c7152c4d5c3c1ef24296d8f74a514e4ee968 /test
parent8507e150ba0071d6bd0790cb0dc23a03260ed791 (diff)
Made grpc_byte_buffer_reader able to decompress msgs.
Diffstat (limited to 'test')
-rw-r--r--test/core/surface/byte_buffer_reader_test.c75
1 files changed, 75 insertions, 0 deletions
diff --git a/test/core/surface/byte_buffer_reader_test.c b/test/core/surface/byte_buffer_reader_test.c
index c2f5fc2eb7..f594bdcd62 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)
@@ -89,9 +91,82 @@ static void test_read_one_slice_malloc(void) {
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_byte_buffer_typed_create(&slice, 1, GRPC_BB_COMPRESSED_NONE);
+ 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 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_byte_buffer_typed_create(sliceb_out.slices, sliceb_out.count,
+ GRPC_BB_COMPRESSED_NONE + 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;
}