summaryrefslogtreecommitdiff
path: root/src/mongo/db/update/update_driver_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/update/update_driver_test.cpp')
-rw-r--r--src/mongo/db/update/update_driver_test.cpp186
1 files changed, 142 insertions, 44 deletions
diff --git a/src/mongo/db/update/update_driver_test.cpp b/src/mongo/db/update/update_driver_test.cpp
index 8f4bdfc25df..e7db2df426e 100644
--- a/src/mongo/db/update/update_driver_test.cpp
+++ b/src/mongo/db/update/update_driver_test.cpp
@@ -159,10 +159,21 @@ TEST(Collator, SetCollationUpdatesModifierInterfaces) {
ASSERT_OK(driver.parse(updateDocument, arrayFilters));
ASSERT_EQUALS(driver.numMods(), 1U);
+ const BSONObj original;
+ const bool validateForStorage = true;
+ const FieldRefSet emptyImmutablePaths;
bool modified = false;
Document doc(fromjson("{a: 'cba'}"));
driver.setCollator(&collator);
- driver.update(StringData(), &doc, nullptr, nullptr, &modified).transitional_ignore();
+ driver
+ .update(StringData(),
+ original,
+ &doc,
+ validateForStorage,
+ emptyImmutablePaths,
+ nullptr,
+ &modified)
+ .transitional_ignore();
ASSERT_TRUE(modified);
}
@@ -270,178 +281,265 @@ static void assertSameFields(const BSONObj& docA, const BSONObj& docB) {
TEST_F(CreateFromQuery, BasicOp) {
BSONObj query = fromjson("{a:1,b:2}");
- ASSERT_OK(driverOps().populateDocumentWithQueryFields(opCtx(), query, NULL, doc()));
+ FieldRef idFieldRef("_id");
+ FieldRefSet immutablePaths;
+ immutablePaths.insert(&idFieldRef);
+ ASSERT_OK(driverOps().populateDocumentWithQueryFields(opCtx(), query, immutablePaths, doc()));
assertSameFields(query, doc().getObject());
}
TEST_F(CreateFromQuery, BasicOpEq) {
BSONObj query = fromjson("{a:{$eq:1}}");
- ASSERT_OK(driverOps().populateDocumentWithQueryFields(opCtx(), query, NULL, doc()));
+ FieldRef idFieldRef("_id");
+ FieldRefSet immutablePaths;
+ immutablePaths.insert(&idFieldRef);
+ ASSERT_OK(driverOps().populateDocumentWithQueryFields(opCtx(), query, immutablePaths, doc()));
assertSameFields(fromjson("{a:1}"), doc().getObject());
}
TEST_F(CreateFromQuery, BasicOpWithId) {
BSONObj query = fromjson("{_id:1,a:1,b:2}");
- ASSERT_OK(driverOps().populateDocumentWithQueryFields(opCtx(), query, NULL, doc()));
+ FieldRef idFieldRef("_id");
+ FieldRefSet immutablePaths;
+ immutablePaths.insert(&idFieldRef);
+ ASSERT_OK(driverOps().populateDocumentWithQueryFields(opCtx(), query, immutablePaths, doc()));
assertSameFields(query, doc().getObject());
}
TEST_F(CreateFromQuery, BasicRepl) {
BSONObj query = fromjson("{a:1,b:2}");
- ASSERT_OK(driverRepl().populateDocumentWithQueryFields(opCtx(), query, NULL, doc()));
+ FieldRef idFieldRef("_id");
+ FieldRefSet immutablePaths;
+ immutablePaths.insert(&idFieldRef);
+ ASSERT_OK(driverRepl().populateDocumentWithQueryFields(opCtx(), query, immutablePaths, doc()));
assertSameFields(fromjson("{}"), doc().getObject());
}
TEST_F(CreateFromQuery, BasicReplWithId) {
BSONObj query = fromjson("{_id:1,a:1,b:2}");
- ASSERT_OK(driverRepl().populateDocumentWithQueryFields(opCtx(), query, NULL, doc()));
+ FieldRef idFieldRef("_id");
+ FieldRefSet immutablePaths;
+ immutablePaths.insert(&idFieldRef);
+ ASSERT_OK(driverRepl().populateDocumentWithQueryFields(opCtx(), query, immutablePaths, doc()));
assertSameFields(fromjson("{_id:1}"), doc().getObject());
}
TEST_F(CreateFromQuery, BasicReplWithIdEq) {
BSONObj query = fromjson("{_id:{$eq:1},a:1,b:2}");
- ASSERT_OK(driverRepl().populateDocumentWithQueryFields(opCtx(), query, NULL, doc()));
+ FieldRef idFieldRef("_id");
+ FieldRefSet immutablePaths;
+ immutablePaths.insert(&idFieldRef);
+ ASSERT_OK(driverRepl().populateDocumentWithQueryFields(opCtx(), query, immutablePaths, doc()));
assertSameFields(fromjson("{_id:1}"), doc().getObject());
}
TEST_F(CreateFromQuery, NoRootIdOp) {
BSONObj query = fromjson("{'_id.a':1,'_id.b':2}");
- ASSERT_OK(driverOps().populateDocumentWithQueryFields(opCtx(), query, NULL, doc()));
+ FieldRef idFieldRef("_id");
+ FieldRefSet immutablePaths;
+ immutablePaths.insert(&idFieldRef);
+ ASSERT_OK(driverOps().populateDocumentWithQueryFields(opCtx(), query, immutablePaths, doc()));
assertSameFields(fromjson("{_id:{a:1,b:2}}"), doc().getObject());
}
TEST_F(CreateFromQuery, NoRootIdRepl) {
BSONObj query = fromjson("{'_id.a':1,'_id.b':2}");
- ASSERT_NOT_OK(driverRepl().populateDocumentWithQueryFields(opCtx(), query, NULL, doc()));
+ FieldRef idFieldRef("_id");
+ FieldRefSet immutablePaths;
+ immutablePaths.insert(&idFieldRef);
+ ASSERT_NOT_OK(
+ driverRepl().populateDocumentWithQueryFields(opCtx(), query, immutablePaths, doc()));
}
TEST_F(CreateFromQuery, NestedSharedRootOp) {
BSONObj query = fromjson("{'a.c':1,'a.b':{$eq:2}}");
- ASSERT_OK(driverOps().populateDocumentWithQueryFields(opCtx(), query, NULL, doc()));
+ FieldRef idFieldRef("_id");
+ FieldRefSet immutablePaths;
+ immutablePaths.insert(&idFieldRef);
+ ASSERT_OK(driverOps().populateDocumentWithQueryFields(opCtx(), query, immutablePaths, doc()));
assertSameFields(fromjson("{a:{c:1,b:2}}"), doc().getObject());
}
TEST_F(CreateFromQuery, OrQueryOp) {
BSONObj query = fromjson("{$or:[{a:1}]}");
- ASSERT_OK(driverOps().populateDocumentWithQueryFields(opCtx(), query, NULL, doc()));
+ FieldRef idFieldRef("_id");
+ FieldRefSet immutablePaths;
+ immutablePaths.insert(&idFieldRef);
+ ASSERT_OK(driverOps().populateDocumentWithQueryFields(opCtx(), query, immutablePaths, doc()));
assertSameFields(fromjson("{a:1}"), doc().getObject());
}
TEST_F(CreateFromQuery, OrQueryIdRepl) {
BSONObj query = fromjson("{$or:[{_id:1}]}");
- ASSERT_OK(driverRepl().populateDocumentWithQueryFields(opCtx(), query, NULL, doc()));
+ FieldRef idFieldRef("_id");
+ FieldRefSet immutablePaths;
+ immutablePaths.insert(&idFieldRef);
+ ASSERT_OK(driverRepl().populateDocumentWithQueryFields(opCtx(), query, immutablePaths, doc()));
assertSameFields(fromjson("{_id:1}"), doc().getObject());
}
TEST_F(CreateFromQuery, OrQueryNoExtractOps) {
BSONObj query = fromjson("{$or:[{a:1}, {b:2}]}");
- ASSERT_OK(driverOps().populateDocumentWithQueryFields(opCtx(), query, NULL, doc()));
+ FieldRef idFieldRef("_id");
+ FieldRefSet immutablePaths;
+ immutablePaths.insert(&idFieldRef);
+ ASSERT_OK(driverOps().populateDocumentWithQueryFields(opCtx(), query, immutablePaths, doc()));
assertSameFields(BSONObj(), doc().getObject());
}
TEST_F(CreateFromQuery, OrQueryNoExtractIdRepl) {
BSONObj query = fromjson("{$or:[{_id:1}, {_id:2}]}");
- ASSERT_OK(driverRepl().populateDocumentWithQueryFields(opCtx(), query, NULL, doc()));
+ FieldRef idFieldRef("_id");
+ FieldRefSet immutablePaths;
+ immutablePaths.insert(&idFieldRef);
+ ASSERT_OK(driverRepl().populateDocumentWithQueryFields(opCtx(), query, immutablePaths, doc()));
assertSameFields(BSONObj(), doc().getObject());
}
TEST_F(CreateFromQuery, AndQueryOp) {
BSONObj query = fromjson("{$and:[{'a.c':1},{'a.b':{$eq:2}}]}");
- ASSERT_OK(driverOps().populateDocumentWithQueryFields(opCtx(), query, NULL, doc()));
+ FieldRef idFieldRef("_id");
+ FieldRefSet immutablePaths;
+ immutablePaths.insert(&idFieldRef);
+ ASSERT_OK(driverOps().populateDocumentWithQueryFields(opCtx(), query, immutablePaths, doc()));
assertSameFields(fromjson("{a:{c:1,b:2}}"), doc().getObject());
}
TEST_F(CreateFromQuery, AndQueryIdRepl) {
BSONObj query = fromjson("{$and:[{_id:1},{a:{$eq:2}}]}");
- ASSERT_OK(driverRepl().populateDocumentWithQueryFields(opCtx(), query, NULL, doc()));
+ FieldRef idFieldRef("_id");
+ FieldRefSet immutablePaths;
+ immutablePaths.insert(&idFieldRef);
+ ASSERT_OK(driverRepl().populateDocumentWithQueryFields(opCtx(), query, immutablePaths, doc()));
assertSameFields(fromjson("{_id:1}"), doc().getObject());
}
TEST_F(CreateFromQuery, AllArrayOp) {
BSONObj query = fromjson("{a:{$all:[1]}}");
- ASSERT_OK(driverOps().populateDocumentWithQueryFields(opCtx(), query, NULL, doc()));
+ FieldRef idFieldRef("_id");
+ FieldRefSet immutablePaths;
+ immutablePaths.insert(&idFieldRef);
+ ASSERT_OK(driverOps().populateDocumentWithQueryFields(opCtx(), query, immutablePaths, doc()));
assertSameFields(fromjson("{a:1}"), doc().getObject());
}
TEST_F(CreateFromQuery, AllArrayIdRepl) {
BSONObj query = fromjson("{_id:{$all:[1]}, b:2}");
- ASSERT_OK(driverRepl().populateDocumentWithQueryFields(opCtx(), query, NULL, doc()));
+ FieldRef idFieldRef("_id");
+ FieldRefSet immutablePaths;
+ immutablePaths.insert(&idFieldRef);
+ ASSERT_OK(driverRepl().populateDocumentWithQueryFields(opCtx(), query, immutablePaths, doc()));
assertSameFields(fromjson("{_id:1}"), doc().getObject());
}
TEST_F(CreateFromQuery, ConflictFieldsFailOp) {
BSONObj query = fromjson("{a:1,'a.b':1}");
- ASSERT_NOT_OK(driverOps().populateDocumentWithQueryFields(opCtx(), query, NULL, doc()));
+ FieldRef idFieldRef("_id");
+ FieldRefSet immutablePaths;
+ immutablePaths.insert(&idFieldRef);
+ ASSERT_NOT_OK(
+ driverOps().populateDocumentWithQueryFields(opCtx(), query, immutablePaths, doc()));
}
TEST_F(CreateFromQuery, ConflictFieldsFailSameValueOp) {
BSONObj query = fromjson("{a:{b:1},'a.b':1}");
- ASSERT_NOT_OK(driverOps().populateDocumentWithQueryFields(opCtx(), query, NULL, doc()));
+ FieldRef idFieldRef("_id");
+ FieldRefSet immutablePaths;
+ immutablePaths.insert(&idFieldRef);
+ ASSERT_NOT_OK(
+ driverOps().populateDocumentWithQueryFields(opCtx(), query, immutablePaths, doc()));
}
TEST_F(CreateFromQuery, ConflictWithIdRepl) {
BSONObj query = fromjson("{_id:1,'_id.a':1}");
- ASSERT_NOT_OK(driverRepl().populateDocumentWithQueryFields(opCtx(), query, NULL, doc()));
+ FieldRef idFieldRef("_id");
+ FieldRefSet immutablePaths;
+ immutablePaths.insert(&idFieldRef);
+ ASSERT_NOT_OK(
+ driverRepl().populateDocumentWithQueryFields(opCtx(), query, immutablePaths, doc()));
}
TEST_F(CreateFromQuery, ConflictAndQueryOp) {
BSONObj query = fromjson("{$and:[{a:{b:1}},{'a.b':{$eq:1}}]}");
- ASSERT_NOT_OK(driverOps().populateDocumentWithQueryFields(opCtx(), query, NULL, doc()));
+ FieldRef idFieldRef("_id");
+ FieldRefSet immutablePaths;
+ immutablePaths.insert(&idFieldRef);
+ ASSERT_NOT_OK(
+ driverOps().populateDocumentWithQueryFields(opCtx(), query, immutablePaths, doc()));
}
TEST_F(CreateFromQuery, ConflictAllMultipleValsOp) {
BSONObj query = fromjson("{a:{$all:[1, 2]}}");
- ASSERT_NOT_OK(driverOps().populateDocumentWithQueryFields(opCtx(), query, NULL, doc()));
+ FieldRef idFieldRef("_id");
+ FieldRefSet immutablePaths;
+ immutablePaths.insert(&idFieldRef);
+ ASSERT_NOT_OK(
+ driverOps().populateDocumentWithQueryFields(opCtx(), query, immutablePaths, doc()));
}
TEST_F(CreateFromQuery, NoConflictOrQueryOp) {
BSONObj query = fromjson("{$or:[{a:{b:1}},{'a.b':{$eq:1}}]}");
- ASSERT_OK(driverOps().populateDocumentWithQueryFields(opCtx(), query, NULL, doc()));
+ FieldRef idFieldRef("_id");
+ FieldRefSet immutablePaths;
+ immutablePaths.insert(&idFieldRef);
+ ASSERT_OK(driverOps().populateDocumentWithQueryFields(opCtx(), query, immutablePaths, doc()));
assertSameFields(BSONObj(), doc().getObject());
}
TEST_F(CreateFromQuery, ImmutableFieldsOp) {
BSONObj query = fromjson("{$or:[{a:{b:1}},{'a.b':{$eq:1}}]}");
- ASSERT_OK(driverOps().populateDocumentWithQueryFields(opCtx(), query, NULL, doc()));
+ FieldRef idFieldRef("_id");
+ FieldRefSet immutablePaths;
+ immutablePaths.insert(&idFieldRef);
+ ASSERT_OK(driverOps().populateDocumentWithQueryFields(opCtx(), query, immutablePaths, doc()));
assertSameFields(BSONObj(), doc().getObject());
}
TEST_F(CreateFromQuery, ShardKeyRepl) {
BSONObj query = fromjson("{a:{$eq:1}}, b:2}");
- OwnedPointerVector<FieldRef> immutablePaths;
- immutablePaths.push_back(new FieldRef("a"));
- ASSERT_OK(driverRepl().populateDocumentWithQueryFields(
- opCtx(), query, &immutablePaths.vector(), doc()));
+ OwnedPointerVector<FieldRef> immutablePathsVector;
+ immutablePathsVector.push_back(new FieldRef("a"));
+ immutablePathsVector.push_back(new FieldRef("_id"));
+ FieldRefSet immutablePaths;
+ immutablePaths.fillFrom(immutablePathsVector.vector());
+ ASSERT_OK(driverRepl().populateDocumentWithQueryFields(opCtx(), query, immutablePaths, doc()));
assertSameFields(fromjson("{a:1}"), doc().getObject());
}
TEST_F(CreateFromQuery, NestedShardKeyRepl) {
BSONObj query = fromjson("{a:{$eq:1},'b.c':2},d:2}");
- OwnedPointerVector<FieldRef> immutablePaths;
- immutablePaths.push_back(new FieldRef("a"));
- immutablePaths.push_back(new FieldRef("b.c"));
- ASSERT_OK(driverRepl().populateDocumentWithQueryFields(
- opCtx(), query, &immutablePaths.vector(), doc()));
+ OwnedPointerVector<FieldRef> immutablePathsVector;
+ immutablePathsVector.push_back(new FieldRef("a"));
+ immutablePathsVector.push_back(new FieldRef("b.c"));
+ immutablePathsVector.push_back(new FieldRef("_id"));
+ FieldRefSet immutablePaths;
+ immutablePaths.fillFrom(immutablePathsVector.vector());
+ ASSERT_OK(driverRepl().populateDocumentWithQueryFields(opCtx(), query, immutablePaths, doc()));
assertSameFields(fromjson("{a:1,b:{c:2}}"), doc().getObject());
}
TEST_F(CreateFromQuery, NestedShardKeyOp) {
BSONObj query = fromjson("{a:{$eq:1},'b.c':2,d:{$all:[3]}},e:2}");
- OwnedPointerVector<FieldRef> immutablePaths;
- immutablePaths.push_back(new FieldRef("a"));
- immutablePaths.push_back(new FieldRef("b.c"));
- ASSERT_OK(driverOps().populateDocumentWithQueryFields(
- opCtx(), query, &immutablePaths.vector(), doc()));
+ OwnedPointerVector<FieldRef> immutablePathsVector;
+ immutablePathsVector.push_back(new FieldRef("a"));
+ immutablePathsVector.push_back(new FieldRef("b.c"));
+ immutablePathsVector.push_back(new FieldRef("_id"));
+ FieldRefSet immutablePaths;
+ immutablePaths.fillFrom(immutablePathsVector.vector());
+ ASSERT_OK(driverOps().populateDocumentWithQueryFields(opCtx(), query, immutablePaths, doc()));
assertSameFields(fromjson("{a:1,b:{c:2},d:3}"), doc().getObject());
}
TEST_F(CreateFromQuery, NotFullShardKeyRepl) {
BSONObj query = fromjson("{a:{$eq:1}, 'b.c':2}, d:2}");
- OwnedPointerVector<FieldRef> immutablePaths;
- immutablePaths.push_back(new FieldRef("a"));
- immutablePaths.push_back(new FieldRef("b"));
- ASSERT_NOT_OK(driverRepl().populateDocumentWithQueryFields(
- opCtx(), query, &immutablePaths.vector(), doc()));
+ OwnedPointerVector<FieldRef> immutablePathsVector;
+ immutablePathsVector.push_back(new FieldRef("a"));
+ immutablePathsVector.push_back(new FieldRef("b"));
+ immutablePathsVector.push_back(new FieldRef("_id"));
+ FieldRefSet immutablePaths;
+ immutablePaths.fillFrom(immutablePathsVector.vector());
+ ASSERT_NOT_OK(
+ driverRepl().populateDocumentWithQueryFields(opCtx(), query, immutablePaths, doc()));
}
} // namespace