summaryrefslogtreecommitdiff
path: root/src/mongo/db/ops/write_ops_retryability_test.cpp
diff options
context:
space:
mode:
authorKaloian Manassiev <kaloian.manassiev@mongodb.com>2017-11-07 10:25:49 -0500
committerKaloian Manassiev <kaloian.manassiev@mongodb.com>2017-11-09 02:19:40 -0500
commitd0ecca650c1f506db0cb6a4e58f0d0f112304b28 (patch)
tree5499cefce162f4475d2af2cf0b5edfbeb35e8573 /src/mongo/db/ops/write_ops_retryability_test.cpp
parent60110730980d1fbd24b07a4679c8d4ae7df4fc2e (diff)
downloadmongo-d0ecca650c1f506db0cb6a4e58f0d0f112304b28.tar.gz
SERVER-31243 Make no-op retry of findAndModify upsert of new document return null with new=false
Also unblacklists find_and_modify_server6582.js from the retryable writes passthrough suite
Diffstat (limited to 'src/mongo/db/ops/write_ops_retryability_test.cpp')
-rw-r--r--src/mongo/db/ops/write_ops_retryability_test.cpp26
1 files changed, 25 insertions, 1 deletions
diff --git a/src/mongo/db/ops/write_ops_retryability_test.cpp b/src/mongo/db/ops/write_ops_retryability_test.cpp
index 8029cb71278..b7c403cf0f4 100644
--- a/src/mongo/db/ops/write_ops_retryability_test.cpp
+++ b/src/mongo/db/ops/write_ops_retryability_test.cpp
@@ -175,9 +175,10 @@ protected:
const NamespaceString kNs("test.user");
-TEST_F(FindAndModifyRetryability, BasicUpsert) {
+TEST_F(FindAndModifyRetryability, BasicUpsertReturnNew) {
auto request = FindAndModifyRequest::makeUpdate(kNs, BSONObj(), BSONObj());
request.setUpsert(true);
+ request.setShouldReturnNew(true);
auto insertOplog = makeOplogEntry(repl::OpTime(), // optime
repl::OpTypeEnum::kInsert, // op type
@@ -199,9 +200,32 @@ TEST_F(FindAndModifyRetryability, BasicUpsert) {
result);
}
+TEST_F(FindAndModifyRetryability, BasicUpsertReturnOld) {
+ auto request = FindAndModifyRequest::makeUpdate(kNs, BSONObj(), BSONObj());
+ request.setUpsert(true);
+ request.setShouldReturnNew(false);
+
+ auto insertOplog = makeOplogEntry(repl::OpTime(), // optime
+ repl::OpTypeEnum::kInsert, // op type
+ kNs, // namespace
+ BSON("_id"
+ << "ID value"
+ << "x"
+ << 1)); // o
+
+ auto result = constructFindAndModifyRetryResult(opCtx(), request, insertOplog);
+ ASSERT_BSONOBJ_EQ(BSON("lastErrorObject"
+ << BSON("n" << 1 << "updatedExisting" << false << "upserted"
+ << "ID value")
+ << "value"
+ << BSONNULL),
+ result);
+}
+
TEST_F(FindAndModifyRetryability, NestedUpsert) {
auto request = FindAndModifyRequest::makeUpdate(kNs, BSONObj(), BSONObj());
request.setUpsert(true);
+ request.setShouldReturnNew(true);
auto innerOplog = makeOplogEntry(repl::OpTime(), // optime
repl::OpTypeEnum::kInsert, // op type