summaryrefslogtreecommitdiff
path: root/jstests/replsets/batch_write_command_wc.js
diff options
context:
space:
mode:
authorGreg Studer <greg@10gen.com>2014-01-13 18:50:02 -0500
committerGreg Studer <greg@10gen.com>2014-01-14 14:41:04 -0500
commit13226efcd6638b707e0f4a64564d655cea9bc9c7 (patch)
tree8f8a80c77f7048116f6d63b9d8d349de36189c73 /jstests/replsets/batch_write_command_wc.js
parent20a414a4809aa5d20f3a09f129f08c918cddf032 (diff)
downloadmongo-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.js118
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();
+