1#include <msgpack.h>
2#include <gtest/gtest.h>
3#include <stdio.h>
4
5TEST(pack, num)
6{
7    msgpack_sbuffer* sbuf = msgpack_sbuffer_new();
8    msgpack_packer* pk = msgpack_packer_new(sbuf, msgpack_sbuffer_write);
9
10    EXPECT_EQ(0, msgpack_pack_int(pk, 1));
11
12    msgpack_sbuffer_free(sbuf);
13    msgpack_packer_free(pk);
14}
15
16
17TEST(pack, array)
18{
19    msgpack_sbuffer* sbuf = msgpack_sbuffer_new();
20    msgpack_packer* pk = msgpack_packer_new(sbuf, msgpack_sbuffer_write);
21
22    EXPECT_EQ(0, msgpack_pack_array(pk, 3));
23    EXPECT_EQ(0, msgpack_pack_int(pk, 1));
24    EXPECT_EQ(0, msgpack_pack_int(pk, 2));
25    EXPECT_EQ(0, msgpack_pack_int(pk, 3));
26
27    msgpack_sbuffer_free(sbuf);
28    msgpack_packer_free(pk);
29}
30
31
32TEST(unpack, sequence)
33{
34    msgpack_sbuffer* sbuf = msgpack_sbuffer_new();
35    msgpack_packer* pk = msgpack_packer_new(sbuf, msgpack_sbuffer_write);
36
37    EXPECT_EQ(0, msgpack_pack_int(pk, 1));
38    EXPECT_EQ(0, msgpack_pack_int(pk, 2));
39    EXPECT_EQ(0, msgpack_pack_int(pk, 3));
40
41    msgpack_packer_free(pk);
42
43    msgpack_unpack_return success;
44    size_t offset = 0;
45
46    msgpack_unpacked msg;
47    msgpack_unpacked_init(&msg);
48
49    success = msgpack_unpack_next(&msg, sbuf->data, sbuf->size, &offset);
50    EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, success);
51    EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, msg.data.type);
52    EXPECT_EQ(1u, msg.data.via.u64);
53
54    success = msgpack_unpack_next(&msg, sbuf->data, sbuf->size, &offset);
55    EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, success);
56    EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, msg.data.type);
57    EXPECT_EQ(2u, msg.data.via.u64);
58
59    success = msgpack_unpack_next(&msg, sbuf->data, sbuf->size, &offset);
60    EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, success);
61    EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, msg.data.type);
62    EXPECT_EQ(3u, msg.data.via.u64);
63
64    success = msgpack_unpack_next(&msg, sbuf->data, sbuf->size, &offset);
65    EXPECT_EQ(MSGPACK_UNPACK_CONTINUE, success);
66
67    msgpack_sbuffer_free(sbuf);
68    msgpack_unpacked_destroy(&msg);
69}
70
71TEST(pack, insufficient)
72{
73    msgpack_sbuffer* sbuf = msgpack_sbuffer_new();
74    msgpack_packer* pk = msgpack_packer_new(sbuf, msgpack_sbuffer_write);
75
76    EXPECT_EQ(0, msgpack_pack_int(pk, 255)); // uint8 (2bytes)
77
78    msgpack_unpack_return success;
79    size_t offset = 0;
80
81    msgpack_unpacked msg;
82    msgpack_unpacked_init(&msg);
83
84    success = msgpack_unpack_next(&msg, sbuf->data, 1, &offset);
85    EXPECT_EQ(MSGPACK_UNPACK_CONTINUE, success);
86    EXPECT_EQ(0u, offset);
87
88    msgpack_unpacked_destroy(&msg);
89
90    msgpack_sbuffer_free(sbuf);
91    msgpack_packer_free(pk);
92}
93