1 #include <catch2/catch_all.hpp>
6 TEST_CASE(
"multipart codec empty",
"[codec_multipart]")
15 mmsg2.decode_append(msg);
16 CHECK(mmsg2.size() == 0);
20 TEST_CASE(
"multipart codec small",
"[codec_multipart]")
25 mmsg.addstr(
"Hello World");
29 mmsg.addstr(
"Second frame");
34 mmsg2.decode_append(msg);
35 CHECK(mmsg2.size() == 2);
37 CHECK(part0 ==
"Hello World");
38 CHECK(mmsg2[1].to_string() ==
"Second frame");
41 TEST_CASE(
"multipart codec big",
"[codec_multipart]")
46 big.data<
char>()[0] =
'X';
49 mmsg.pushmem(big.data(), big.size());
52 CHECK(msg.
data<
unsigned char>()[0] == std::numeric_limits<uint8_t>::max());
53 CHECK(msg.
data<
unsigned char>()[5] ==
'X');
55 CHECK(mmsg.size() == 1);
56 mmsg.decode_append(msg);
57 CHECK(mmsg.size() == 2);
61 TEST_CASE(
"multipart codec decode bad data overflow",
"[codec_multipart]")
65 char bad_data[3] = {5,
'h',
'i'};
67 CHECK(wrong_size.size() == 3);
68 CHECK(wrong_size.data<
char>()[0] == 5);
71 multipart_t::decode(wrong_size),
75 TEST_CASE(
"multipart codec decode bad data extra data",
"[codec_multipart]")
79 char bad_data[3] = {1,
'h',
'i'};
81 CHECK(wrong_size.size() == 3);
82 CHECK(wrong_size.data<
char>()[0] == 1);
85 multipart_t::decode(wrong_size),
94 TEST_CASE(
"multipart codec encode too big",
"[codec_multipart]")
98 const size_t too_big_size = 1L + std::numeric_limits<uint32_t>::max();
99 CHECK(too_big_size > std::numeric_limits<uint32_t>::max());
100 char* too_big_data =
new char[too_big_size];
101 multipart_t mmsg(too_big_data, too_big_size);
102 delete [] too_big_data;
104 CHECK(mmsg.size() == 1);
105 CHECK(mmsg[0].
size() > std::numeric_limits<uint32_t>::max());
113 TEST_CASE(
"multipart codec free function with vector of message_t",
"[codec_multipart]")
116 std::vector<message_t> parts;
117 parts.emplace_back(
"Hello", 5);
118 parts.emplace_back(
"World",5);
119 auto msg = encode(parts);
121 CHECK(msg.
data<
unsigned char>()[0] == 5);
122 CHECK(msg.
data<
unsigned char>()[1] ==
'H');
123 CHECK(msg.
data<
unsigned char>()[6] == 5);
124 CHECK(msg.
data<
unsigned char>()[7] ==
'W');
126 std::vector<message_t> parts2;
127 decode(msg, std::back_inserter(parts2));
128 CHECK(parts.size() == 2);
133 TEST_CASE(
"multipart codec free function with vector of const_buffer",
"[codec_multipart]")
136 std::vector<const_buffer> parts;
137 parts.emplace_back(
"Hello", 5);
138 parts.emplace_back(
"World",5);
139 auto msg = encode(parts);
141 CHECK(msg.
data<
unsigned char>()[0] == 5);
142 CHECK(msg.
data<
unsigned char>()[1] ==
'H');
143 CHECK(msg.
data<
unsigned char>()[6] == 5);
144 CHECK(msg.
data<
unsigned char>()[7] ==
'W');
146 std::vector<message_t> parts2;
147 decode(msg, std::back_inserter(parts2));
148 CHECK(parts.size() == 2);
153 TEST_CASE(
"multipart codec free function with vector of mutable_buffer",
"[codec_multipart]")
156 std::vector<mutable_buffer> parts;
157 char hello[6] =
"Hello";
158 parts.emplace_back(hello, 5);
159 char world[6] =
"World";
160 parts.emplace_back(world,5);
161 auto msg = encode(parts);
163 CHECK(msg.
data<
unsigned char>()[0] == 5);
164 CHECK(msg.
data<
unsigned char>()[1] ==
'H');
165 CHECK(msg.
data<
unsigned char>()[6] == 5);
166 CHECK(msg.
data<
unsigned char>()[7] ==
'W');
168 std::vector<message_t> parts2;
169 decode(msg, std::back_inserter(parts2));
170 CHECK(parts.size() == 2);
175 TEST_CASE(
"multipart codec free function with multipart_t",
"[codec_multipart]")
179 mmsg.addstr(
"Hello");
180 mmsg.addstr(
"World");
181 auto msg = encode(mmsg);
183 CHECK(msg.
data<
unsigned char>()[0] == 5);
184 CHECK(msg.
data<
unsigned char>()[1] ==
'H');
185 CHECK(msg.
data<
unsigned char>()[6] == 5);
186 CHECK(msg.
data<
unsigned char>()[7] ==
'W');
189 decode(msg, std::back_inserter(mmsg2));
190 CHECK(mmsg2.size() == 2);
195 TEST_CASE(
"multipart codec static method decode to multipart_t",
"[codec_multipart]")
199 mmsg.addstr(
"Hello");
200 mmsg.addstr(
"World");
201 auto msg = encode(mmsg);
203 auto mmsg2 = multipart_t::decode(msg);
204 CHECK(mmsg2.size() == 2);