userver
C++ Async Framework
Toggle main menu visibility
Loading...
Searching...
No Matches
binary_to_struct_test.cpp
1
#
include
<
gmock
/
gmock
.
h
>
2
#
include
<
gtest
/
gtest
.
h
>
3
4
#
include
<
userver
/
proto
-
structs
/
convert
.
hpp
>
5
#
include
<
userver
/
utest
/
assert_macros
.
hpp
>
6
7
#
include
"messages.pb.h"
8
#
include
"structs.hpp"
9
10
USERVER_NAMESPACE_BEGIN
11
12
namespace
proto_structs::tests {
13
14
TEST(BinaryToStruct, Scalar) {
15
{
16
messages::Scalar msg;
17
msg.set_f1(
true
);
18
msg.set_f2(std::numeric_limits<int32_t>::min());
19
msg.set_f3(std::numeric_limits<uint32_t>::max());
20
msg.set_f4(std::numeric_limits<int64_t>::min());
21
msg.set_f5(std::numeric_limits<uint64_t>::max());
22
msg.set_f6(
static_cast
<
float
>(1.5));
23
msg.set_f7(-2.5);
24
msg.set_f8(
"test1"
);
25
msg.set_f9(
"test2"
);
26
msg.set_f10(messages::TestEnum::TEST_ENUM_VALUE1);
27
msg.set_f11(987);
28
29
protobuf::ProtoStringType serialized_from_msg_tstring;
30
ASSERT_TRUE(msg.SerializeToString(&serialized_from_msg_tstring));
31
std::string_view serialized_from_msg = serialized_from_msg_tstring;
32
33
{
34
structs::
Scalar
obj;
35
UASSERT_NO_THROW
(BinaryToStruct(serialized_from_msg, obj));
36
CheckScalarEqual(obj, msg);
37
}
38
39
{
40
auto
obj = BinaryToStruct<structs::
Scalar
>(serialized_from_msg);
41
CheckScalarEqual(obj, msg);
42
}
43
}
44
}
45
46
TEST(BinaryToStruct, ThrowsOnInvalidBinary) {
47
structs::
Scalar
obj;
48
49
// Неверная длина строк
50
std::string binary_data;
51
// Поле f8 (string, field number 8) → tag = 0x42 (8 << 3 | 2)
52
binary_data +=
'\x42'
;
53
// Указываем длину 100, но даём только 5 байт
54
binary_data +=
'\x64'
;
// 100 в varint
55
binary_data +=
"hello"
;
// только 5 байт
56
57
UEXPECT_THROW
(BinaryToStruct<structs::Scalar>(binary_data, obj), ReadError);
58
UEXPECT_THROW
((
void
)BinaryToStruct<structs::Scalar>(binary_data), ReadError);
59
}
60
}
// namespace proto_structs::tests
61
62
USERVER_NAMESPACE_END
proto-structs
tests
binary_to_struct_test.cpp
Generated on
for userver by
Doxygen
1.17.0