diff options
author | Vitaly Buka <vitalybuka@google.com> | 2020-01-27 18:49:40 -0800 |
---|---|---|
committer | Vitaly Buka <vitalybuka@gmail.com> | 2020-02-04 13:44:06 -0800 |
commit | a268b67566102524554b58537f0bc92abea678a1 (patch) | |
tree | c6f53d9074b301c1de65c10c5f9bdddafa4b58c6 | |
parent | bbb27cc1ec33d1a326ddd50c95f4c1449e054770 (diff) | |
download | libprotobuf-mutator-a268b67566102524554b58537f0bc92abea678a1.tar.gz |
Add Any tests for #151
-rw-r--r-- | src/mutator_test.cc | 105 |
1 files changed, 96 insertions, 9 deletions
diff --git a/src/mutator_test.cc b/src/mutator_test.cc index 1e190aa..5273f01 100644 --- a/src/mutator_test.cc +++ b/src/mutator_test.cc @@ -46,6 +46,17 @@ const char kMessages[] = R"( repeated_msg { required_int32: 67 } repeated_msg {} } + any { + [type.googleapis.com/protobuf_mutator.Msg] { + optional_msg {} + repeated_msg {} + any { + [type.googleapis.com/protobuf_mutator.Msg3.SubMsg] { + optional_int64: -5 + } + } + } + } )"; const char kMessagesProto3[] = R"( @@ -59,6 +70,17 @@ const char kMessagesProto3[] = R"( repeated_msg { optional_int32: 67 } repeated_msg {} } + any { + [type.googleapis.com/protobuf_mutator.Msg] { + optional_msg {} + repeated_msg {} + any { + [type.googleapis.com/protobuf_mutator.Msg3.SubMsg] { + optional_int64: -5 + } + } + } + } )"; const char kRequiredFields[] = R"( @@ -154,6 +176,18 @@ const char kRequiredNestedFields[] = R"( } )"; +const char kRequiredInAnyFields[] = R"( + any { + [type.googleapis.com/protobuf_mutator.Msg] { + required_uint32: 14486213 + required_uint64: 520229415 + required_sint64: -6057486163525532641 + required_string: "qwert" + required_bytes: "asdf" + } + } +)"; + const char kOptionalNestedFields[] = R"( optional_int32: 123 optional_msg { @@ -176,6 +210,18 @@ const char kOptionalNestedFields[] = R"( } )"; +const char kOptionalInAnyFields[] = R"( + any { + [type.googleapis.com/protobuf_mutator.Msg] { + optional_uint32: 440 + optional_uint64: 1559 + optional_sint32: 440615 + optional_string: "XYZ" + optional_enum: ENUM_4 + } + } +)"; + const char kRepeatedNestedFields[] = R"( optional_int32: 123 optional_msg { @@ -214,6 +260,39 @@ const char kRepeatedNestedFields[] = R"( } )"; +const char kRepeatedInAnyFields[] = R"( + any { + [type.googleapis.com/protobuf_mutator.Msg] { + repeated_double: 1.931778501556e-31 + repeated_double: 1.26685288449177e-31 + repeated_float: 4.739759e-41 + repeated_float: 5.98038e-39 + repeated_int32: 400201 + repeated_int32: 673 + repeated_int64: 104 + repeated_int64: 52850685 + } + } +)"; + +const char kOptionalInDeepAnyFields[] = R"( + any { + [type.googleapis.com/protobuf_mutator.Msg] { + any { + [type.googleapis.com/protobuf_mutator.Msg] { + any { + [type.googleapis.com/protobuf_mutator.Msg] { + optional_double: 1.9317850152856e-314 + optional_sint64: 1743625000076 + optional_string: "XYZ" + } + } + } + } + } + } +)"; + class TestMutator : public Mutator { public: explicit TestMutator(bool keep_initialized, @@ -286,6 +365,7 @@ std::vector<TestParams> GetFieldTestParams( for (auto t : tests) { auto lines = Split(t); for (size_t i = 0; i != lines.size(); ++i) { + if (lines[i].find("any {") != std::string::npos) break; if (lines[i].find(':') != std::string::npos) results.push_back( std::make_tuple(&T::default_instance(), t, i, lines[i])); @@ -301,6 +381,7 @@ std::vector<TestParams> GetMessageTestParams( for (auto t : tests) { auto lines = Split(t); for (size_t i = 0; i != lines.size(); ++i) { + if (lines[i].find("any {") != std::string::npos) break; if (lines[i].find("{}") != std::string::npos) results.push_back( std::make_tuple(&T::default_instance(), t, i, lines[i])); @@ -310,7 +391,7 @@ std::vector<TestParams> GetMessageTestParams( } bool Mutate(const protobuf::Message& from, const protobuf::Message& to, - int iterations = 10000) { + int iterations = 100000) { EXPECT_FALSE(MessageDifferencer::Equals(from, to)); ReducedTestMutator mutator; std::unique_ptr<protobuf::Message> message(from.New()); @@ -322,13 +403,13 @@ bool Mutate(const protobuf::Message& from, const protobuf::Message& to, } ADD_FAILURE() << "Failed to get from:\n" - << SaveMessageAsText(from) << "\nto:\n" - << SaveMessageAsText(to); + << from.DebugString() << "\nto:\n" + << to.DebugString(); return false; } bool CrossOver(const protobuf::Message& from, const protobuf::Message& with, - const protobuf::Message& to, int iterations = 10000) { + const protobuf::Message& to, int iterations = 100000) { EXPECT_FALSE(MessageDifferencer::Equals(from, to)); ReducedTestMutator mutator; std::unique_ptr<protobuf::Message> message(from.New()); @@ -401,8 +482,10 @@ class MutatorFieldInsDelTest : public MutatorTest {}; INSTANTIATE_TEST_SUITE_P(Proto2, MutatorFieldInsDelTest, ValuesIn(GetFieldTestParams<Msg>( {kRequiredFields, kOptionalFields, kRepeatedFields, - kRequiredNestedFields, kOptionalNestedFields, - kRepeatedNestedFields}))); + kRequiredNestedFields, kRequiredInAnyFields, + kOptionalNestedFields, kOptionalInAnyFields, + kRepeatedNestedFields, kRepeatedInAnyFields, + kOptionalInDeepAnyFields}))); TEST_P(MutatorFieldInsDelTest, DeleteField) { LoadMessage(m1_.get()); @@ -424,12 +507,16 @@ class MutatorFieldTest : public MutatorTest { INSTANTIATE_TEST_SUITE_P(Proto2, MutatorFieldTest, ValuesIn(GetFieldTestParams<Msg>( {kRequiredFields, kOptionalFields, kRepeatedFields, - kRequiredNestedFields, kOptionalNestedFields, - kRepeatedNestedFields}))); + kRequiredNestedFields, kRequiredInAnyFields, + kOptionalNestedFields, kOptionalInAnyFields, + kRepeatedNestedFields, kRepeatedInAnyFields, + kOptionalInDeepAnyFields}))); INSTANTIATE_TEST_SUITE_P(Proto3, MutatorFieldTest, ValuesIn(GetFieldTestParams<Msg3>( {kOptionalFields, kRepeatedFields, - kOptionalNestedFields, kRepeatedNestedFields}))); + kOptionalNestedFields, kOptionalInAnyFields, + kRepeatedNestedFields, kRepeatedInAnyFields, + kOptionalInDeepAnyFields}))); TEST_P(MutatorFieldTest, Initialized) { LoadWithoutLine(m1_.get()); |