Also removed promotion of writeErrors to top level field errors and made sure that right error fields are used.
81 lines
2.0 KiB
JavaScript
81 lines
2.0 KiB
JavaScript
//
|
|
// Tests replication-related batch write protocol functionality
|
|
// NOTE: Basic write functionality is tested via the jstests, this file should contain
|
|
// *only* repl-specific tests.
|
|
//
|
|
|
|
var rst = new ReplSetTest({name: 'testSet', nodes: 3});
|
|
rst.startSet();
|
|
rst.initiate();
|
|
|
|
var rstConn = new Mongo(rst.getURL());
|
|
var coll = rstConn.getCollection("test.batch_write_command_repl");
|
|
|
|
jsTest.log("Starting repl tests...");
|
|
|
|
function resultOK( result ) {
|
|
return result.ok &&
|
|
!( 'code' in result ) &&
|
|
!( 'errmsg' in result ) &&
|
|
!( 'errInfo' in result ) &&
|
|
!( 'writeErrors' in result );
|
|
};
|
|
|
|
function resultNOK( result ) {
|
|
return !result.ok &&
|
|
typeof( result.code ) == 'number' &&
|
|
typeof( result.errmsg ) == 'string';
|
|
}
|
|
|
|
var request;
|
|
var result;
|
|
|
|
// NOTE: ALL TESTS BELOW SHOULD BE SELF-CONTAINED, FOR EASIER DEBUGGING
|
|
|
|
//
|
|
//
|
|
// Insert tests
|
|
|
|
//
|
|
// Basic replica set insert, W:2
|
|
coll.remove({});
|
|
printjson( request = {insert : coll.getName(),
|
|
documents: [{a:1}],
|
|
writeConcern: {w:2}});
|
|
printjson( result = coll.runCommand(request) );
|
|
assert(resultOK(result));
|
|
assert.eq(1, result.n);
|
|
assert.eq(1, coll.count());
|
|
|
|
//
|
|
// Multi replica set insert, W:3
|
|
coll.remove({});
|
|
printjson( request = {insert : coll.getName(),
|
|
documents: [{a:1},{a:1}],
|
|
writeConcern: {w:3}});
|
|
printjson( result = coll.runCommand(request) );
|
|
assert(resultOK(result));
|
|
assert.eq(2, result.n);
|
|
assert.eq(2, coll.count());
|
|
|
|
//
|
|
// Basic replica set insert, W:4 timeout error
|
|
coll.remove({});
|
|
printjson( request = {insert : coll.getName(),
|
|
documents: [{a:1}],
|
|
writeConcern: {w:4, wtimeout:2*1000}});
|
|
printjson( result = coll.runCommand(request) );
|
|
assert(result.ok);
|
|
assert.eq(1, result.n);
|
|
assert(result.writeConcernError != null);
|
|
assert(result.writeConcernError.errInfo.wtimeout);
|
|
assert.eq(1, coll.count());
|
|
|
|
//
|
|
// TODO: More tests to come
|
|
//
|
|
|
|
jsTest.log("DONE!");
|
|
rst.stopSet();
|
|
|