@@ -234,6 +234,44 @@ void ReporterTest::assertReporterDone() {
234234 ASSERT_EQUALS (reporter->join (), reporter->trigger ());
235235}
236236
237+ TEST (UpdatePositionArgs, AcceptsUnknownField) {
238+ UpdatePositionArgs updatePositionArgs;
239+ BSONObjBuilder bob;
240+ bob.append (UpdatePositionArgs::kCommandFieldName , 1 );
241+ bob.append (UpdatePositionArgs::kUpdateArrayFieldName , BSONArray ());
242+ bob.append (" unknownField" , 1 ); // append an unknown field.
243+ BSONObj cmdObj = bob.obj ();
244+ ASSERT_OK (updatePositionArgs.initialize (cmdObj));
245+ }
246+ TEST (UpdatePositionArgs, AcceptsUnknownFieldInUpdateInfo) {
247+ UpdatePositionArgs updatePositionArgs;
248+ BSONObjBuilder bob;
249+ bob.append (UpdatePositionArgs::kCommandFieldName , 1 );
250+ auto now = Date_t ();
251+ auto updateInfo =
252+ BSON (UpdatePositionArgs::kConfigVersionFieldName
253+ << 1 << UpdatePositionArgs::kMemberIdFieldName << 1
254+ << UpdatePositionArgs::kDurableOpTimeFieldName << OpTime ()
255+ << UpdatePositionArgs::kAppliedOpTimeFieldName << OpTime ()
256+ << UpdatePositionArgs::kAppliedWallTimeFieldName << now
257+ << UpdatePositionArgs::kDurableWallTimeFieldName << now << " unknownField" << 1 );
258+ bob.append (UpdatePositionArgs::kUpdateArrayFieldName , BSON_ARRAY (updateInfo));
259+ BSONObj cmdObj = bob.obj ();
260+ ASSERT_OK (updatePositionArgs.initialize (cmdObj));
261+
262+ // The serialized object should be the same as the original except for the unknown field.
263+ BSONObjBuilder bob2;
264+ auto updateArgsObj = updatePositionArgs.toBSON ();
265+ auto updatesArr =
266+ BSONArray (updateArgsObj.getObjectField (UpdatePositionArgs::kUpdateArrayFieldName ));
267+ ASSERT_EQ (updatesArr.nFields (), 1 );
268+ bob2.appendElements (updatesArr[0 ].Obj ());
269+ bob2.append (UpdatePositionArgs::kAppliedWallTimeFieldName , now);
270+ bob2.append (UpdatePositionArgs::kDurableWallTimeFieldName , now);
271+ bob2.append (" unknownField" , 1 );
272+ ASSERT_EQ (bob2.obj ().woCompare (updateInfo), 0 );
273+ }
274+
237275TEST_F (ReporterTestNoTriggerAtSetUp, InvalidConstruction) {
238276 // null PrepareReplSetUpdatePositionCommandFn
239277 ASSERT_THROWS (Reporter (&getExecutor (),
0 commit comments