1 #include <msgpack.hpp>
2 
3 #include <string>
4 #include <sstream>
5 
6 #include <gtest/gtest.h>
7 
8 #ifdef HAVE_CONFIG_H
9 #include "config.h"
10 #endif
11 
TEST(MSGPACK_RAW_REF,pack_unpack)12 TEST(MSGPACK_RAW_REF, pack_unpack)
13 {
14     std::string s = "ABC";
15 
16     msgpack::type::raw_ref rr1(s.data(), s.size());
17     std::stringstream ss;
18     msgpack::pack(ss, rr1);
19     std::string packed_str = ss.str();
20     EXPECT_EQ(packed_str[0], static_cast<char>(0xc4u));
21     EXPECT_EQ(packed_str[1], static_cast<char>(0x03u));
22     EXPECT_EQ(packed_str[2], 'A');
23     EXPECT_EQ(packed_str[3], 'B');
24     EXPECT_EQ(packed_str[4], 'C');
25 
26     msgpack::object_handle oh =
27         msgpack::unpack(ss.str().data(), ss.str().size());
28     msgpack::type::raw_ref rr2 = oh.get().as<msgpack::type::raw_ref>();
29     EXPECT_TRUE(rr1 == rr2);
30 }
31 
TEST(MSGPACK_RAW_REF,pack_unpack_8_l)32 TEST(MSGPACK_RAW_REF, pack_unpack_8_l)
33 {
34     std::string s;
35 
36     msgpack::type::raw_ref rr1(s.data(), s.size());
37     std::stringstream ss;
38     msgpack::pack(ss, rr1);
39     std::string packed_str = ss.str();
40     EXPECT_EQ(packed_str[0], static_cast<char>(0xc4u));
41     EXPECT_EQ(packed_str[1], static_cast<char>(0x00u));
42 
43     msgpack::object_handle oh =
44         msgpack::unpack(ss.str().data(), ss.str().size());
45     msgpack::type::raw_ref rr2 = oh.get().as<msgpack::type::raw_ref>();
46     EXPECT_TRUE(rr1 == rr2);
47 }
48 
TEST(MSGPACK_RAW_REF,pack_unpack_8_h)49 TEST(MSGPACK_RAW_REF, pack_unpack_8_h)
50 {
51     std::string s(0xff, 'A');
52 
53     msgpack::type::raw_ref rr1(s.data(), s.size());
54     std::stringstream ss;
55     msgpack::pack(ss, rr1);
56     std::string packed_str = ss.str();
57     EXPECT_EQ(packed_str[0], static_cast<char>(0xc4u));
58     EXPECT_EQ(packed_str[1], static_cast<char>(0xffu));
59     EXPECT_EQ(packed_str[2], 'A');
60 
61     msgpack::object_handle oh =
62         msgpack::unpack(ss.str().data(), ss.str().size());
63     msgpack::type::raw_ref rr2 = oh.get().as<msgpack::type::raw_ref>();
64     EXPECT_TRUE(rr1 == rr2);
65 }
66 
TEST(MSGPACK_RAW_REF,pack_unpack_16_l)67 TEST(MSGPACK_RAW_REF, pack_unpack_16_l)
68 {
69     std::string s(0xff+1, 'A');
70 
71     msgpack::type::raw_ref rr1(s.data(), s.size());
72     std::stringstream ss;
73     msgpack::pack(ss, rr1);
74     std::string packed_str = ss.str();
75     EXPECT_EQ(packed_str[0], static_cast<char>(0xc5u));
76     EXPECT_EQ(packed_str[1], static_cast<char>(0x01));
77     EXPECT_EQ(packed_str[2], static_cast<char>(0x00));
78     EXPECT_EQ(packed_str[3], 'A');
79 
80     msgpack::object_handle oh =
81         msgpack::unpack(ss.str().data(), ss.str().size());
82     msgpack::type::raw_ref rr2 = oh.get().as<msgpack::type::raw_ref>();
83     EXPECT_TRUE(rr1 == rr2);
84 }
85 
TEST(MSGPACK_RAW_REF,pack_unpack_16_h)86 TEST(MSGPACK_RAW_REF, pack_unpack_16_h)
87 {
88     std::string s(0xffff, 'A');
89 
90     msgpack::type::raw_ref rr1(s.data(), s.size());
91     std::stringstream ss;
92     msgpack::pack(ss, rr1);
93     std::string packed_str = ss.str();
94     EXPECT_EQ(packed_str[0], static_cast<char>(0xc5u));
95     EXPECT_EQ(packed_str[1], static_cast<char>(0xffu));
96     EXPECT_EQ(packed_str[2], static_cast<char>(0xffu));
97     EXPECT_EQ(packed_str[3], 'A');
98 
99     msgpack::object_handle oh =
100         msgpack::unpack(ss.str().data(), ss.str().size());
101     msgpack::type::raw_ref rr2 = oh.get().as<msgpack::type::raw_ref>();
102     EXPECT_TRUE(rr1 == rr2);
103 }
104 
TEST(MSGPACK_RAW_REF,pack_unpack_32_l)105 TEST(MSGPACK_RAW_REF, pack_unpack_32_l)
106 {
107     std::string s(0xffff+1, 'A');
108 
109     msgpack::type::raw_ref rr1(s.data(), s.size());
110     std::stringstream ss;
111     msgpack::pack(ss, rr1);
112     std::string packed_str = ss.str();
113     EXPECT_EQ(packed_str[0], static_cast<char>(0xc6u));
114     EXPECT_EQ(packed_str[1], static_cast<char>(0x00));
115     EXPECT_EQ(packed_str[2], static_cast<char>(0x01));
116     EXPECT_EQ(packed_str[3], static_cast<char>(0x00));
117     EXPECT_EQ(packed_str[4], static_cast<char>(0x00));
118     EXPECT_EQ(packed_str[5], 'A');
119 
120     msgpack::object_handle oh =
121         msgpack::unpack(ss.str().data(), ss.str().size());
122     msgpack::type::raw_ref rr2 = oh.get().as<msgpack::type::raw_ref>();
123     EXPECT_TRUE(rr1 == rr2);
124 }
125 
TEST(MSGPACK_V4RAW_REF,pack_unpack)126 TEST(MSGPACK_V4RAW_REF, pack_unpack)
127 {
128     std::string s = "ABC";
129 
130     msgpack::type::v4raw_ref rr1(s.data(), s.size());
131     std::stringstream ss;
132     msgpack::pack(ss, rr1);
133     std::string packed_str = ss.str();
134     EXPECT_EQ(packed_str[0], static_cast<char>(0xa3u));
135     EXPECT_EQ(packed_str[1], 'A');
136     EXPECT_EQ(packed_str[2], 'B');
137     EXPECT_EQ(packed_str[3], 'C');
138 
139     msgpack::object_handle oh =
140         msgpack::unpack(ss.str().data(), ss.str().size());
141     msgpack::type::v4raw_ref rr2 = oh.get().as<msgpack::type::v4raw_ref>();
142     EXPECT_TRUE(rr1 == rr2);
143 }
144 
TEST(MSGPACK_V4RAW_REF,pack_unpack_fix_l)145 TEST(MSGPACK_V4RAW_REF, pack_unpack_fix_l)
146 {
147     std::string s;
148 
149     msgpack::type::v4raw_ref rr1(s.data(), s.size());
150     std::stringstream ss;
151     msgpack::pack(ss, rr1);
152     std::string packed_str = ss.str();
153     EXPECT_EQ(packed_str[0], static_cast<char>(0xa0u));
154 
155     msgpack::object_handle oh =
156         msgpack::unpack(ss.str().data(), ss.str().size());
157     msgpack::type::v4raw_ref rr2 = oh.get().as<msgpack::type::v4raw_ref>();
158     EXPECT_TRUE(rr1 == rr2);
159 }
160 
TEST(MSGPACK_V4RAW_REF,pack_unpack_fix_h)161 TEST(MSGPACK_V4RAW_REF, pack_unpack_fix_h)
162 {
163     std::string s(0x1f, 'A');
164 
165     msgpack::type::v4raw_ref rr1(s.data(), s.size());
166     std::stringstream ss;
167     msgpack::pack(ss, rr1);
168     std::string packed_str = ss.str();
169     EXPECT_EQ(packed_str[0], static_cast<char>(0xbfu));
170     EXPECT_EQ(packed_str[1], 'A');
171 
172     msgpack::object_handle oh =
173         msgpack::unpack(ss.str().data(), ss.str().size());
174     msgpack::type::v4raw_ref rr2 = oh.get().as<msgpack::type::v4raw_ref>();
175     EXPECT_TRUE(rr1 == rr2);
176 }
177 
TEST(MSGPACK_V4RAW_REF,pack_unpack_16_l)178 TEST(MSGPACK_V4RAW_REF, pack_unpack_16_l)
179 {
180     std::string s(0x1f+1, 'A');
181 
182     msgpack::type::v4raw_ref rr1(s.data(), s.size());
183     std::stringstream ss;
184     msgpack::pack(ss, rr1);
185     std::string packed_str = ss.str();
186     EXPECT_EQ(packed_str[0], static_cast<char>(0xdau));
187     EXPECT_EQ(packed_str[1], static_cast<char>(0x00u));
188     EXPECT_EQ(packed_str[2], static_cast<char>(0x20u));
189     EXPECT_EQ(packed_str[3], 'A');
190 
191     msgpack::object_handle oh =
192         msgpack::unpack(ss.str().data(), ss.str().size());
193     msgpack::type::v4raw_ref rr2 = oh.get().as<msgpack::type::v4raw_ref>();
194     EXPECT_TRUE(rr1 == rr2);
195 }
196 
TEST(MSGPACK_V4RAW_REF,pack_unpack_16_h)197 TEST(MSGPACK_V4RAW_REF, pack_unpack_16_h)
198 {
199     std::string s(0xffff, 'A');
200 
201     msgpack::type::v4raw_ref rr1(s.data(), s.size());
202     std::stringstream ss;
203     msgpack::pack(ss, rr1);
204     std::string packed_str = ss.str();
205     EXPECT_EQ(packed_str[0], static_cast<char>(0xdau));
206     EXPECT_EQ(packed_str[1], static_cast<char>(0xffu));
207     EXPECT_EQ(packed_str[2], static_cast<char>(0xffu));
208     EXPECT_EQ(packed_str[3], 'A');
209 
210     msgpack::object_handle oh =
211         msgpack::unpack(ss.str().data(), ss.str().size());
212     msgpack::type::v4raw_ref rr2 = oh.get().as<msgpack::type::v4raw_ref>();
213     EXPECT_TRUE(rr1 == rr2);
214 }
215 
TEST(MSGPACK_V4RAW_REF,pack_unpack_32_l)216 TEST(MSGPACK_V4RAW_REF, pack_unpack_32_l)
217 {
218     std::string s(0xffff+1, 'A');
219 
220     msgpack::type::v4raw_ref rr1(s.data(), s.size());
221     std::stringstream ss;
222     msgpack::pack(ss, rr1);
223     std::string packed_str = ss.str();
224     EXPECT_EQ(packed_str[0], static_cast<char>(0xdbu));
225     EXPECT_EQ(packed_str[1], static_cast<char>(0x00));
226     EXPECT_EQ(packed_str[2], static_cast<char>(0x01));
227     EXPECT_EQ(packed_str[3], static_cast<char>(0x00));
228     EXPECT_EQ(packed_str[4], static_cast<char>(0x00));
229     EXPECT_EQ(packed_str[5], 'A');
230 
231     msgpack::object_handle oh =
232         msgpack::unpack(ss.str().data(), ss.str().size());
233     msgpack::type::v4raw_ref rr2 = oh.get().as<msgpack::type::v4raw_ref>();
234     EXPECT_TRUE(rr1 == rr2);
235 }
236