diff options
author | Greg Studer <greg@10gen.com> | 2014-01-13 18:50:02 -0500 |
---|---|---|
committer | Greg Studer <greg@10gen.com> | 2014-01-14 14:41:04 -0500 |
commit | 13226efcd6638b707e0f4a64564d655cea9bc9c7 (patch) | |
tree | 8f8a80c77f7048116f6d63b9d8d349de36189c73 /jstests/replsets/batch_write_command_wc.js | |
parent | 20a414a4809aa5d20f3a09f129f08c918cddf032 (diff) | |
download | mongo-13226efcd6638b707e0f4a64564d655cea9bc9c7.tar.gz |
SERVER-12274 refactor validation out of waiting for write concern
Diffstat (limited to 'jstests/replsets/batch_write_command_wc.js')
-rw-r--r-- | jstests/replsets/batch_write_command_wc.js | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/jstests/replsets/batch_write_command_wc.js b/jstests/replsets/batch_write_command_wc.js new file mode 100644 index 00000000000..3d952e355be --- /dev/null +++ b/jstests/replsets/batch_write_command_wc.js @@ -0,0 +1,118 @@ +// +// Tests write-concern-related batch write protocol functionality +// + +var request; +var result; + +// NOTE: ALL TESTS BELOW SHOULD BE SELF-CONTAINED, FOR EASIER DEBUGGING + +jsTest.log("Starting no journal/repl set tests..."); + +// Start a single-node replica set with no journal +// Allows testing immediate write concern failures and wc application failures +var rst = new ReplSetTest({ nodes : 2 }); +rst.startSet({ nojournal : "" }); +rst.initiate(); +var mongod = rst.getPrimary(); +var coll = mongod.getCollection("test.batch_write_command_wc"); + +// +// Basic insert, default WC +coll.remove({}); +printjson( request = {insert : coll.getName(), + documents: [{a:1}]}); +printjson( result = coll.runCommand(request) ); +assert(result.ok); +assert.eq(1, result.n); +assert.eq(1, coll.count()); + +// +// Basic insert, majority WC +coll.remove({}); +printjson( request = {insert : coll.getName(), + documents: [{a:1}], + writeConcern: {w: 'majority'}}); +printjson( result = coll.runCommand(request) ); +assert(result.ok); +assert.eq(1, result.n); +assert.eq(1, coll.count()); + +// +// Basic insert, w:2 WC +coll.remove({}); +printjson( request = {insert : coll.getName(), + documents: [{a:1}], + writeConcern: {w:2}}); +printjson( result = coll.runCommand(request) ); +assert(result.ok); +assert.eq(1, result.n); +assert.eq(1, coll.count()); + +// +// Basic insert, immediate nojournal error +coll.remove({}); +printjson( request = {insert : coll.getName(), + documents: [{a:1}], + writeConcern: {j:true}}); +printjson( result = coll.runCommand(request) ); +assert(!result.ok); +assert.eq(0, coll.count()); + +// +// Basic insert, timeout wc error +coll.remove({}); +printjson( request = {insert : coll.getName(), + documents: [{a:1}], + writeConcern: {w:3, wtimeout: 1}}); +printjson( result = coll.runCommand(request) ); +assert(result.ok); +assert.eq(1, result.n); +assert(result.writeConcernError); +assert(result.writeConcernError.errInfo.wtimeout); +assert.eq(1, coll.count()); + +// +// Basic insert, wmode wc error +coll.remove({}); +printjson( request = {insert : coll.getName(), + documents: [{a:1}], + writeConcern: {w: 'invalid'}}); +printjson( result = coll.runCommand(request) ); +assert(result.ok); +assert.eq(1, result.n); +assert(result.writeConcernError); +assert.eq(1, coll.count()); + +// +// Two ordered inserts, write error and wc error not reported +coll.remove({}); +printjson( request = {insert : coll.getName(), + documents: [{a:1},{$invalid:'doc'}], + writeConcern: {w: 'invalid'}}); +printjson( result = coll.runCommand(request) ); +assert(result.ok); +assert.eq(1, result.n); +assert.eq(result.writeErrors.length, 1); +assert.eq(result.writeErrors[0].index, 1); +assert(!result.writeConcernError); +assert.eq(1, coll.count()); + +// +// Two unordered inserts, write error and wc error reported +coll.remove({}); +printjson( request = {insert : coll.getName(), + documents: [{a:1},{$invalid:'doc'}], + writeConcern: {w: 'invalid'}, + ordered: false}); +printjson( result = coll.runCommand(request) ); +assert(result.ok); +assert.eq(1, result.n); +assert.eq(result.writeErrors.length, 1); +assert.eq(result.writeErrors[0].index, 1); +assert(result.writeConcernError); +assert.eq(1, coll.count()); + +jsTest.log("DONE no journal/repl tests"); +rst.stopSet(); + |