diff options
Diffstat (limited to 'jstests/replsets/find_and_modify_wc.js')
-rw-r--r-- | jstests/replsets/find_and_modify_wc.js | 124 |
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(); })(); |