1#include <gtest/gtest.h>
8#include <userver/protobuf/json/convert.hpp>
9#include <userver/utest/assert_macros.hpp>
10#include <userver/utils/encoding/hex.hpp>
14USERVER_NAMESPACE_BEGIN
18struct BytesFromJsonSuccessTestParam {
19 std::string input = {};
21 ReadOptions options = {};
24struct BytesFromJsonFailureTestParam {
25 std::string input = {};
26 ReadErrorCode expected_errc = {};
27 std::string expected_path = {};
28 ReadOptions options = {};
31void PrintTo(
const BytesFromJsonSuccessTestParam& param, std::ostream* os) {
32 *os << fmt::format(
"{{ input = '{}' }}", param.input);
35void PrintTo(
const BytesFromJsonFailureTestParam& param, std::ostream* os) {
36 *os << fmt::format(
"{{ input = '{}' }}", param.input);
39class BytesFromJsonSuccessTest :
public ::testing::TestWithParam<BytesFromJsonSuccessTestParam> {};
40class BytesFromJsonFailureTest :
public ::testing::TestWithParam<BytesFromJsonFailureTestParam> {};
42INSTANTIATE_TEST_SUITE_P(
44 BytesFromJsonSuccessTest,
46 BytesFromJsonSuccessTestParam{R"({})", BytesMessageData{
""}},
47 BytesFromJsonSuccessTestParam{R"({"field1":null})", BytesMessageData{
""}},
48 BytesFromJsonSuccessTestParam{R"({"field1":""})", BytesMessageData{
""}},
49 BytesFromJsonSuccessTestParam{R"({"field1":"+/s="})", BytesMessageData{std::string(
"\xfb\xfb", 2)}},
50 BytesFromJsonSuccessTestParam{R"({"field1":"-_s="})", BytesMessageData{std::string(
"\xfb\xfb", 2)}},
51 BytesFromJsonSuccessTestParam{R"({"field1":"+/s"})", BytesMessageData{std::string(
"\xfb\xfb", 2)}},
52 BytesFromJsonSuccessTestParam{R"({"field1":"-_s"})", BytesMessageData{std::string(
"\xfb\xfb", 2)}}
56INSTANTIATE_TEST_SUITE_P(
58 BytesFromJsonFailureTest,
60 BytesFromJsonFailureTestParam{R"({"field1":[]})", ReadErrorCode::kInvalidType,
"field1"},
61 BytesFromJsonFailureTestParam{R"({"field1":{}})", ReadErrorCode::kInvalidType,
"field1"},
62 BytesFromJsonFailureTestParam{R"({"field1":1})", ReadErrorCode::kInvalidType,
"field1"},
63 BytesFromJsonFailureTestParam{R"({"field1":true})", ReadErrorCode::kInvalidType,
"field1"},
64 BytesFromJsonFailureTestParam{R"({"field1":"TW=E"})", ReadErrorCode::kInvalidValue,
"field1"},
65 BytesFromJsonFailureTestParam{R"({"field1":"TQ==="})", ReadErrorCode::kInvalidValue,
"field1"},
66 BytesFromJsonFailureTestParam{R"({"field1":"TWE#"})", ReadErrorCode::kInvalidValue,
"field1"}
70TEST_P(BytesFromJsonSuccessTest, Test) {
71 const auto& param = GetParam();
73 proto_json::messages::BytesMessage message, expected_message, sample_message;
74 formats::json::Value input = PrepareJsonTestData(param.input);
75 expected_message = PrepareTestData(param.expected_message);
77 message.set_field1(
"dump");
79 UASSERT_NO_THROW((message = JsonToMessage<proto_json::messages::BytesMessage>(input, param.options)));
80 UASSERT_NO_THROW(InitSampleMessage(param.input, param.options, sample_message));
82 CheckMessageEqual(message, sample_message);
83 CheckMessageEqual(message, expected_message);
86TEST_P(BytesFromJsonFailureTest, Test) {
87 const auto& param = GetParam();
89 proto_json::messages::BytesMessage sample_message;
90 formats::json::Value input = PrepareJsonTestData(param.input);
93 (
void)JsonToMessage<proto_json::messages::BytesMessage>(input, param.options),
97 UEXPECT_THROW(InitSampleMessage(param.input, param.options, sample_message), SampleError);