From eabcf15790a774ce718ae1738c6ddb407e1cd279 Mon Sep 17 00:00:00 2001 From: frsyuki Date: Tue, 1 Jun 2010 07:16:25 +0900 Subject: [PATCH] cpp: update tests --- cpp/test/Makefile.am | 6 ++++ cpp/test/pack_unpack_c.cc | 70 +++++++++++++++++++++++++++++++++++++++ cpp/test/streaming.cc | 19 +++++++---- cpp/test/streaming_c.cc | 57 +++++++++++++++++++++++++++++++ 4 files changed, 146 insertions(+), 6 deletions(-) create mode 100644 cpp/test/pack_unpack_c.cc create mode 100644 cpp/test/streaming_c.cc diff --git a/cpp/test/Makefile.am b/cpp/test/Makefile.am index f9c5f224..1f522150 100644 --- a/cpp/test/Makefile.am +++ b/cpp/test/Makefile.am @@ -6,7 +6,9 @@ AM_LDFLAGS = ../src/libmsgpack.la -lgtest_main check_PROGRAMS = \ zone \ pack_unpack \ + pack_unpack_c \ streaming \ + streaming_c \ object \ convert \ buffer \ @@ -20,8 +22,12 @@ zone_SOURCES = zone.cc pack_unpack_SOURCES = pack_unpack.cc +pack_unpack_c_SOURCES = pack_unpack_c.cc + streaming_SOURCES = streaming.cc +streaming_c_SOURCES = streaming_c.cc + object_SOURCES = object.cc convert_SOURCES = convert.cc diff --git a/cpp/test/pack_unpack_c.cc b/cpp/test/pack_unpack_c.cc new file mode 100644 index 00000000..e9a03892 --- /dev/null +++ b/cpp/test/pack_unpack_c.cc @@ -0,0 +1,70 @@ +#include +#include +#include + +TEST(pack, num) +{ + msgpack_sbuffer* sbuf = msgpack_sbuffer_new(); + msgpack_packer* pk = msgpack_packer_new(sbuf, msgpack_sbuffer_write); + + EXPECT_EQ(0, msgpack_pack_int(pk, 1)); + + msgpack_sbuffer_free(sbuf); + msgpack_packer_free(pk); +} + + +TEST(pack, array) +{ + msgpack_sbuffer* sbuf = msgpack_sbuffer_new(); + msgpack_packer* pk = msgpack_packer_new(sbuf, msgpack_sbuffer_write); + + EXPECT_EQ(0, msgpack_pack_array(pk, 3)); + EXPECT_EQ(0, msgpack_pack_int(pk, 1)); + EXPECT_EQ(0, msgpack_pack_int(pk, 2)); + EXPECT_EQ(0, msgpack_pack_int(pk, 3)); + + msgpack_sbuffer_free(sbuf); + msgpack_packer_free(pk); +} + + +TEST(unpack, sequence) +{ + msgpack_sbuffer* sbuf = msgpack_sbuffer_new(); + msgpack_packer* pk = msgpack_packer_new(sbuf, msgpack_sbuffer_write); + + EXPECT_EQ(0, msgpack_pack_int(pk, 1)); + EXPECT_EQ(0, msgpack_pack_int(pk, 2)); + EXPECT_EQ(0, msgpack_pack_int(pk, 3)); + + msgpack_packer_free(pk); + + bool success; + size_t offset = 0; + + msgpack_unpacked msg; + msgpack_unpacked_init(&msg); + + success = msgpack_unpack_next(&msg, sbuf->data, sbuf->size, &offset); + EXPECT_TRUE(success); + EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, msg.data.type); + EXPECT_EQ(1, msg.data.via.u64); + + success = msgpack_unpack_next(&msg, sbuf->data, sbuf->size, &offset); + EXPECT_TRUE(success); + EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, msg.data.type); + EXPECT_EQ(2, msg.data.via.u64); + + success = msgpack_unpack_next(&msg, sbuf->data, sbuf->size, &offset); + EXPECT_TRUE(success); + EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, msg.data.type); + EXPECT_EQ(3, msg.data.via.u64); + + success = msgpack_unpack_next(&msg, sbuf->data, sbuf->size, &offset); + EXPECT_FALSE(success); + + msgpack_sbuffer_free(sbuf); + msgpack_unpacked_destroy(&msg); +} + diff --git a/cpp/test/streaming.cc b/cpp/test/streaming.cc index c01b8be1..e80c671b 100644 --- a/cpp/test/streaming.cc +++ b/cpp/test/streaming.cc @@ -2,28 +2,33 @@ #include #include - TEST(streaming, basic) { - std::ostringstream stream; - msgpack::packer pk(&stream); + msgpack::sbuffer buffer; + msgpack::packer pk(&buffer); pk.pack(1); pk.pack(2); pk.pack(3); - std::istringstream input(stream.str()); + const char* input = buffer.data(); + const char* const eof = input + buffer.size(); msgpack::unpacker pac; + msgpack::unpacked result; int count = 0; while(count < 3) { pac.reserve_buffer(32*1024); - size_t len = input.readsome(pac.buffer(), pac.buffer_capacity()); + // read buffer into pac.buffer() upto + // pac.buffer_capacity() bytes. + size_t len = 1; + memcpy(pac.buffer(), input, len); + input += len; + pac.buffer_consumed(len); - msgpack::unpacked result; while(pac.next(&result)) { msgpack::object obj = result.get(); switch(count++) { @@ -38,6 +43,8 @@ TEST(streaming, basic) return; } } + + EXPECT_TRUE(input < eof); } } diff --git a/cpp/test/streaming_c.cc b/cpp/test/streaming_c.cc new file mode 100644 index 00000000..6c87ac6d --- /dev/null +++ b/cpp/test/streaming_c.cc @@ -0,0 +1,57 @@ +#include +#include +#include + +TEST(streaming, basic) +{ + msgpack_sbuffer* buffer = msgpack_sbuffer_new(); + + msgpack_packer* pk = msgpack_packer_new(buffer, msgpack_sbuffer_write); + EXPECT_EQ(0, msgpack_pack_int(pk, 1)); + EXPECT_EQ(0, msgpack_pack_int(pk, 2)); + EXPECT_EQ(0, msgpack_pack_int(pk, 3)); + msgpack_packer_free(pk); + + const char* input = buffer->data; + const char* const eof = input + buffer->size; + + msgpack_unpacker pac; + msgpack_unpacker_init(&pac, MSGPACK_UNPACKER_INIT_BUFFER_SIZE); + + msgpack_unpacked result; + msgpack_unpacked_init(&result); + + int count = 0; + while(count < 3) { + msgpack_unpacker_reserve_buffer(&pac, 32*1024); + + /* read buffer into msgpack_unapcker_buffer(&pac) upto + * msgpack_unpacker_buffer_capacity(&pac) bytes. */ + size_t len = 1; + memcpy(msgpack_unpacker_buffer(&pac), input, len); + input += len; + + msgpack_unpacker_buffer_consumed(&pac, len); + + while(msgpack_unpacker_next(&pac, &result)) { + msgpack_object obj = result.data; + switch(count++) { + case 0: + EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, result.data.type); + EXPECT_EQ(1, result.data.via.u64); + break; + case 1: + EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, result.data.type); + EXPECT_EQ(2, result.data.via.u64); + break; + case 2: + EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, result.data.type); + EXPECT_EQ(3, result.data.via.u64); + return; + } + } + + EXPECT_TRUE(input < eof); + } +} +