aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/protobuf/json/ut
diff options
context:
space:
mode:
authorbbiff <bbiff@yandex-team.com>2022-09-11 00:15:54 +0300
committerbbiff <bbiff@yandex-team.com>2022-09-11 00:15:54 +0300
commit67576a8962c2506b8ee10da48dffba311acb0042 (patch)
tree51a695bbddbb9be4e5a0cc5c7ec558ca233c2be5 /library/cpp/protobuf/json/ut
parenta8945929eb162f6910b228697c3d2db3b7cb2ca9 (diff)
downloadydb-67576a8962c2506b8ee10da48dffba311acb0042.tar.gz
support duration and timestamp as string in json2proto
Diffstat (limited to 'library/cpp/protobuf/json/ut')
-rw-r--r--library/cpp/protobuf/json/ut/json2proto_ut.cpp26
-rw-r--r--library/cpp/protobuf/json/ut/proto2json_ut.cpp18
-rw-r--r--library/cpp/protobuf/json/ut/test.proto11
3 files changed, 55 insertions, 0 deletions
diff --git a/library/cpp/protobuf/json/ut/json2proto_ut.cpp b/library/cpp/protobuf/json/ut/json2proto_ut.cpp
index 0dfe57bc7a2..d213c9e9134 100644
--- a/library/cpp/protobuf/json/ut/json2proto_ut.cpp
+++ b/library/cpp/protobuf/json/ut/json2proto_ut.cpp
@@ -8,6 +8,7 @@
#include <library/cpp/json/json_reader.h>
#include <library/cpp/json/json_writer.h>
+#include <library/cpp/protobuf/interop/cast.h>
#include <library/cpp/protobuf/json/json2proto.h>
#include <library/cpp/testing/unittest/registar.h>
@@ -1144,4 +1145,29 @@ Y_UNIT_TEST(TestAllowComments) {
UNIT_ASSERT_VALUES_EQUAL(proto.GetI64(), 3423);
} // TestAllowComments
+Y_UNIT_TEST(TestSimplifiedDuration) {
+ NJson::TJsonValue json;
+ TSingleDuration simpleDuration;
+ json["Duration"] = "10.1s";
+ NProtobufJson::Json2Proto(json, simpleDuration, NProtobufJson::TJson2ProtoConfig().SetAllowString2TimeConversion(true));
+ UNIT_ASSERT_EQUAL(NProtoInterop::CastFromProto(simpleDuration.GetDuration()), TDuration::MilliSeconds(10100));
+} // TestSimplifiedDuration
+
+Y_UNIT_TEST(TestUnwrappedDuration) {
+ NJson::TJsonValue json;
+ TSingleDuration duration;
+ json["Duration"]["seconds"] = 2;
+ NProtobufJson::Json2Proto(json, duration, NProtobufJson::TJson2ProtoConfig());
+ UNIT_ASSERT_EQUAL(NProtoInterop::CastFromProto(duration.GetDuration()), TDuration::MilliSeconds(2000));
+} // TestUnwrappedDuration
+
+Y_UNIT_TEST(TestSimplifiedTimestamp) {
+ NJson::TJsonValue json;
+ TSingleTimestamp simpleTimestamp;
+ json["Timestamp"] = "2014-08-26T15:52:15Z";
+ NProtobufJson::Json2Proto(json, simpleTimestamp, NProtobufJson::TJson2ProtoConfig().SetAllowString2TimeConversion(true));
+ UNIT_ASSERT_EQUAL(NProtoInterop::CastFromProto(simpleTimestamp.GetTimestamp()), TInstant::ParseIso8601("2014-08-26T15:52:15Z"));
+
+} // TestSimplifiedTimestamp
+
} // TJson2ProtoTest
diff --git a/library/cpp/protobuf/json/ut/proto2json_ut.cpp b/library/cpp/protobuf/json/ut/proto2json_ut.cpp
index 07e52d7f2f5..d4d6d374e96 100644
--- a/library/cpp/protobuf/json/ut/proto2json_ut.cpp
+++ b/library/cpp/protobuf/json/ut/proto2json_ut.cpp
@@ -1019,4 +1019,22 @@ Y_UNIT_TEST(TestExtension) {
UNIT_ASSERT_EQUAL(Proto2Json(proto, cfg), "{\"bar\":1}");
} // TestExtension
+Y_UNIT_TEST(TestSimplifiedDuration) {
+ TString json;
+ TSingleDuration simpleDuration;
+ simpleDuration.mutable_duration()->set_seconds(10);
+ simpleDuration.mutable_duration()->set_nanos(101);
+ Proto2Json(simpleDuration, json, TProto2JsonConfig().SetConvertTimeAsString(true));
+ UNIT_ASSERT_EQUAL_C(json, "{\"Duration\":\"10.000000101s\"}", "real value is " << json);
+} // TestSimplifiedDuration
+
+Y_UNIT_TEST(TestSimplifiedTimestamp) {
+ TString json;
+ TSingleTimestamp simpleTimestamp;
+ simpleTimestamp.mutable_timestamp()->set_seconds(10000000);
+ simpleTimestamp.mutable_timestamp()->set_nanos(504);
+ Proto2Json(simpleTimestamp, json, TProto2JsonConfig().SetConvertTimeAsString(true));
+ UNIT_ASSERT_EQUAL_C(json, "{\"Timestamp\":\"1970-04-26T17:46:40.000000504Z\"}", "real value is " << json);
+} // TestSimplifiedTimestamp
+
} // TProto2JsonTest
diff --git a/library/cpp/protobuf/json/ut/test.proto b/library/cpp/protobuf/json/ut/test.proto
index 0fa996fd413..6bc19843737 100644
--- a/library/cpp/protobuf/json/ut/test.proto
+++ b/library/cpp/protobuf/json/ut/test.proto
@@ -1,5 +1,8 @@
package NProtobufJsonTest;
+import "google/protobuf/duration.proto";
+import "google/protobuf/timestamp.proto";
+
enum EEnum {
E_0 = 0;
E_1 = 1;
@@ -194,6 +197,14 @@ message TSingleRepeatedInt {
repeated int32 RepeatedInt = 1;
}
+message TSingleDuration {
+ required google.protobuf.Duration Duration = 1;
+}
+
+message TSingleTimestamp {
+ required google.protobuf.Timestamp Timestamp = 1;
+}
+
message TExtensionField {
extensions 100 to 199;
}