summaryrefslogtreecommitdiff
path: root/jstests/replsets/find_and_modify_wc.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/replsets/find_and_modify_wc.js')
-rw-r--r--jstests/replsets/find_and_modify_wc.js124
1 files changed, 61 insertions, 63 deletions
diff --git a/jstests/replsets/find_and_modify_wc.js b/jstests/replsets/find_and_modify_wc.js
index c8055d97ef5..236ddad1afb 100644
--- a/jstests/replsets/find_and_modify_wc.js
+++ b/jstests/replsets/find_and_modify_wc.js
@@ -2,78 +2,76 @@
// Tests writeConcerns with findAndModify command
//
(function() {
- 'use strict';
+'use strict';
- // Skip this test if running with the "wiredTiger" storage engine, since it requires
- // using 'nojournal' in a replica set, which is not supported when using WT.
- if (!jsTest.options().storageEngine || jsTest.options().storageEngine === "wiredTiger") {
- // WT is currently the default engine so it is used when 'storageEngine' is not set.
- jsTest.log("Skipping test because it is not applicable for the wiredTiger storage engine");
- return;
- }
+// Skip this test if running with the "wiredTiger" storage engine, since it requires
+// using 'nojournal' in a replica set, which is not supported when using WT.
+if (!jsTest.options().storageEngine || jsTest.options().storageEngine === "wiredTiger") {
+ // WT is currently the default engine so it is used when 'storageEngine' is not set.
+ jsTest.log("Skipping test because it is not applicable for the wiredTiger storage engine");
+ return;
+}
- var nodeCount = 3;
- var rst = new ReplSetTest({nodes: nodeCount});
- rst.startSet({nojournal: ""});
- rst.initiate();
+var nodeCount = 3;
+var rst = new ReplSetTest({nodes: nodeCount});
+rst.startSet({nojournal: ""});
+rst.initiate();
- var primary = rst.getPrimary();
- var coll = primary.getCollection("test.find_and_modify_wc");
- coll.remove({});
+var primary = rst.getPrimary();
+var coll = primary.getCollection("test.find_and_modify_wc");
+coll.remove({});
- // insert some documents
- var docs = [];
- for (var i = 1; i <= 5; ++i) {
- docs.push({i: i, j: 2 * i});
- }
- var res =
- coll.runCommand({insert: coll.getName(), documents: docs, writeConcern: {w: nodeCount}});
- assert(res.ok);
- assert.eq(5, coll.find().itcount());
+// insert some documents
+var docs = [];
+for (var i = 1; i <= 5; ++i) {
+ docs.push({i: i, j: 2 * i});
+}
+var res = coll.runCommand({insert: coll.getName(), documents: docs, writeConcern: {w: nodeCount}});
+assert(res.ok);
+assert.eq(5, coll.find().itcount());
- // use for updates in subsequent runCommand calls
- var reqUpdate = {
- findAndModify: coll.getName(),
- query: {i: 3},
- update: {$inc: {j: 1}},
- writeConcern: {w: 'majority'}
- };
+// use for updates in subsequent runCommand calls
+var reqUpdate = {
+ findAndModify: coll.getName(),
+ query: {i: 3},
+ update: {$inc: {j: 1}},
+ writeConcern: {w: 'majority'}
+};
- // Verify findAndModify returns old document new: false
- var res = coll.runCommand(reqUpdate);
- assert(res.ok);
- assert(res.value);
- // (2 * res.value.i) == 6 == res.value.j (old document)
- assert.eq(2 * res.value.i, res.value.j);
- assert(!res.writeConcernError);
+// Verify findAndModify returns old document new: false
+var res = coll.runCommand(reqUpdate);
+assert(res.ok);
+assert(res.value);
+// (2 * res.value.i) == 6 == res.value.j (old document)
+assert.eq(2 * res.value.i, res.value.j);
+assert(!res.writeConcernError);
- // Verify findAndModify returns new document with new: true
- reqUpdate.new = true;
- res = coll.runCommand(reqUpdate);
- assert(res.ok);
- assert(res.value);
- // (2 * res.value.i + 2) == 8 == res.value.j (new document after two updates)
- assert.eq(2 * res.value.i + 2, res.value.j);
- assert(!res.writeConcernError);
-
- // Verify findAndModify remove works
- res = coll.runCommand(
- {findAndModify: coll.getName(), sort: {i: 1}, remove: true, writeConcern: {w: nodeCount}});
- assert.eq(res.value.i, 1);
- assert.eq(coll.find().itcount(), 4);
- assert(!res.writeConcernError);
+// Verify findAndModify returns new document with new: true
+reqUpdate.new = true;
+res = coll.runCommand(reqUpdate);
+assert(res.ok);
+assert(res.value);
+// (2 * res.value.i + 2) == 8 == res.value.j (new document after two updates)
+assert.eq(2 * res.value.i + 2, res.value.j);
+assert(!res.writeConcernError);
- // Verify findAndModify returns writeConcernError
- // when given invalid writeConcerns
- [{w: 'invalid'}, {w: nodeCount + 1}].forEach(function(wc) {
- reqUpdate.writeConcern = wc;
- res = coll.runCommand(reqUpdate);
+// Verify findAndModify remove works
+res = coll.runCommand(
+ {findAndModify: coll.getName(), sort: {i: 1}, remove: true, writeConcern: {w: nodeCount}});
+assert.eq(res.value.i, 1);
+assert.eq(coll.find().itcount(), 4);
+assert(!res.writeConcernError);
- assert(res.writeConcernError);
- assert(res.writeConcernError.code);
- assert(res.writeConcernError.errmsg);
- });
+// Verify findAndModify returns writeConcernError
+// when given invalid writeConcerns
+[{w: 'invalid'}, {w: nodeCount + 1}].forEach(function(wc) {
+ reqUpdate.writeConcern = wc;
+ res = coll.runCommand(reqUpdate);
- rst.stopSet();
+ assert(res.writeConcernError);
+ assert(res.writeConcernError.code);
+ assert(res.writeConcernError.errmsg);
+});
+rst.stopSet();
})();