summaryrefslogtreecommitdiff
path: root/src/mongo/db/repl/oplog_entry_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/repl/oplog_entry_test.cpp')
-rw-r--r--src/mongo/db/repl/oplog_entry_test.cpp68
1 files changed, 68 insertions, 0 deletions
diff --git a/src/mongo/db/repl/oplog_entry_test.cpp b/src/mongo/db/repl/oplog_entry_test.cpp
index c034bd3c517..6cfd6958519 100644
--- a/src/mongo/db/repl/oplog_entry_test.cpp
+++ b/src/mongo/db/repl/oplog_entry_test.cpp
@@ -135,7 +135,75 @@ TEST(OplogEntryTest, OpTimeBaseNonStrictParsing) {
40414);
}
+TEST(OplogEntryParserTest, ParseOpTimeSuccess) {
+ repl::OpTime opTime{Timestamp{2}, 1};
+ auto const oplogEntry = opTime.toBSON();
+ OplogEntryParserNonStrict parser{oplogEntry};
+ ASSERT_EQ(opTime, parser.getOpTime()) << oplogEntry.toString();
+}
+
+TEST(OplogEntryParserTest, ParseOpTimeFailure) {
+ auto const oplogEntry = BSON("a" << 1);
+ OplogEntryParserNonStrict parser{oplogEntry};
+ ASSERT_THROWS_CODE_AND_WHAT(parser.getOpTime(),
+ AssertionException,
+ 40414,
+ "Failed to parse opTime :: caused by :: "
+ "BSON field 'OpTimeBase.ts' is missing but a required field");
+}
+
+TEST(OplogEntryParserTest, ParseOpTypeSuccess) {
+ auto const oplogEntry =
+ BSON(OplogEntry::kOpTypeFieldName << OpType_serializer(repl::OpTypeEnum::kDelete));
+ OplogEntryParserNonStrict parser{oplogEntry};
+ ASSERT_TRUE(repl::OpTypeEnum::kDelete == parser.getOpType()) << oplogEntry.toString();
+}
+TEST(OplogEntryParserTest, ParseOpTypeFailure) {
+ {
+ auto const oplogEntry = BSON(OplogEntry::kOpTypeFieldName << "zz");
+ OplogEntryParserNonStrict parser{oplogEntry};
+ ASSERT_THROWS_CODE_AND_WHAT(
+ parser.getOpType(),
+ AssertionException,
+ ErrorCodes::BadValue,
+ "Enumeration value 'zz' for field 'ChangeStreamEntry.op' is not a valid value.");
+ }
+ {
+ auto const oplogEntry = BSON(OplogEntry::kOpTypeFieldName << 1);
+ OplogEntryParserNonStrict parser{oplogEntry};
+ ASSERT_THROWS_CODE_AND_WHAT(parser.getOpType(),
+ AssertionException,
+ 8881100,
+ "Invalid 'op' field type (expected String)");
+ }
+}
+
+TEST(OplogEntryParserTest, ParseObjectSuccess) {
+ auto const objectFieldValue = BSON("a" << 1);
+ auto const oplogEntry = BSON(OplogEntry::kObjectFieldName << objectFieldValue);
+ OplogEntryParserNonStrict parser{oplogEntry};
+ ASSERT_BSONOBJ_BINARY_EQ(objectFieldValue, parser.getObject());
+}
+
+TEST(OplogEntryParserTest, ParseObjectFailure) {
+ {
+ auto const oplogEntry = BSON(OplogEntry::kObjectFieldName << "string");
+ OplogEntryParserNonStrict parser{oplogEntry};
+ ASSERT_THROWS_CODE_AND_WHAT(parser.getObject(),
+ AssertionException,
+ 8881101,
+ "Invalid 'o' field type (expected Object)");
+ }
+ {
+ auto const oplogEntry = BSON("a" << 1);
+ OplogEntryParserNonStrict parser{oplogEntry};
+ ASSERT_THROWS_CODE_AND_WHAT(parser.getObject(),
+ AssertionException,
+ 8881101,
+ "Invalid 'o' field type (expected Object)");
+ }
+}
} // namespace
} // namespace repl
} // namespace mongo