112 lines
3.5 KiB
JavaScript
112 lines
3.5 KiB
JavaScript
|
|
doTest = function( signal ) {
|
|
|
|
// FAILING TEST
|
|
// See below:
|
|
|
|
// Test replication with getLastError
|
|
|
|
// Replica set testing API
|
|
// Create a new replica set test. Specify set name and the number of nodes you want.
|
|
var replTest = new ReplSetTest( {name: 'testSet', nodes: 3} );
|
|
|
|
// call startSet() to start each mongod in the replica set
|
|
// this returns a list of nodes
|
|
var nodes = replTest.startSet();
|
|
|
|
// Call initiate() to send the replSetInitiate command
|
|
// This will wait for initiation
|
|
replTest.initiate();
|
|
|
|
// Call getMaster to return a reference to the node that's been
|
|
// elected master.
|
|
var master = replTest.getMaster();
|
|
|
|
// Wait for replication to a single node
|
|
master.getDB("test").bar.insert({n: 1});
|
|
|
|
// Wait for initial sync
|
|
replTest.awaitReplication();
|
|
|
|
var slaves = replTest.liveNodes.slaves;
|
|
slaves.forEach(function(slave) { slave.setSlaveOk(); });
|
|
|
|
var testDB = "repl-test";
|
|
|
|
var failed = false;
|
|
var callGetLastError = function(w, timeout, db) {
|
|
var result = master.getDB(db).getLastErrorObj( w , timeout );
|
|
printjson( result );
|
|
if(result['ok'] != 1) {
|
|
print("FAILURE");
|
|
failed = true;
|
|
}
|
|
}
|
|
|
|
// Test getlasterror with multiple inserts
|
|
// TEST FAILS HERE
|
|
print("**** Try inserting a multiple records -- first insert ****")
|
|
master.getDB(testDB).foo.insert({n: 1});
|
|
master.getDB(testDB).foo.insert({n: 2});
|
|
master.getDB(testDB).foo.insert({n: 3});
|
|
callGetLastError(3, 10000, testDB);
|
|
|
|
print("**** TEMP 1a ****")
|
|
|
|
m1 = master.getDB(testDB).foo.findOne({n: 1});
|
|
printjson( m1 );
|
|
assert( m1['n'] == 1 , "Failed to save to master on multiple inserts");
|
|
|
|
print("**** TEMP 1b ****")
|
|
|
|
var s0 = slaves[0].getDB(testDB).foo.findOne({n: 1});
|
|
assert( s0['n'] == 1 , "Failed to replicate to slave 0 on multiple inserts");
|
|
|
|
var s1 = slaves[1].getDB(testDB).foo.findOne({n: 1});
|
|
assert( s1['n'] == 1 , "Failed to replicate to slave 1 on multiple inserts");
|
|
|
|
|
|
// Test getlasterror with a simple insert
|
|
print("**** Try inserting a single record ****")
|
|
master.getDB(testDB).dropDatabase();
|
|
master.getDB(testDB).foo.insert({n: 1});
|
|
callGetLastError(3, 10000, testDB);
|
|
|
|
m1 = master.getDB(testDB).foo.findOne({n: 1});
|
|
printjson( m1 );
|
|
assert( m1['n'] == 1 , "Failed to save to master");
|
|
|
|
|
|
var s0 = slaves[0].getDB(testDB).foo.findOne({n: 1});
|
|
assert( s0['n'] == 1 , "Failed to replicate to slave 0");
|
|
|
|
var s1 = slaves[1].getDB(testDB).foo.findOne({n: 1});
|
|
assert( s1['n'] == 1 , "Failed to replicate to slave 1");
|
|
|
|
|
|
// Test getlasterror with large insert
|
|
print("**** Try inserting many records ****")
|
|
bigData = new Array(2000).toString()
|
|
for(var n=0; n<1000; n++) {
|
|
master.getDB(testDB).baz.insert({n: n, data: bigData});
|
|
}
|
|
callGetLastError(3, 60000, testDB);
|
|
|
|
var verifyReplication = function(nodeName, collection) {
|
|
data = collection.findOne({n: 1});
|
|
assert( data['n'] == 1 , "Failed to save to " + nodeName);
|
|
data = collection.findOne({n: 999});
|
|
assert( data['n'] == 999 , "Failed to save to " + nodeName);
|
|
}
|
|
|
|
verifyReplication("master", master.getDB(testDB).baz);
|
|
verifyReplication("slave 0", slaves[0].getDB(testDB).baz);
|
|
verifyReplication("slave 1", slaves[1].getDB(testDB).baz);
|
|
|
|
assert( failed == false, "Replication with getLastError failed. See errors." );
|
|
|
|
replTest.stopSet( signal );
|
|
}
|
|
|
|
doTest( 15 );
|