summaryrefslogtreecommitdiff
path: root/jstests/replsets/maintenance2.js
diff options
context:
space:
mode:
authorBrandon Diamond <brandon@10gen.com>2011-12-20 12:18:13 -0500
committerBrandon Diamond <brandon@10gen.com>2011-12-20 12:18:23 -0500
commitc7a0a5d056c70bfa24e101d3e7482ebf526a205d (patch)
tree49e33d1bbcd6e0cbf341d6f610f4f8ec12095a49 /jstests/replsets/maintenance2.js
parentf3943569e09993659a82969e72cdac011c10cc64 (diff)
downloadmongo-c7a0a5d056c70bfa24e101d3e7482ebf526a205d.tar.gz
SERVER-2285: added additional maintenance tests
Diffstat (limited to 'jstests/replsets/maintenance2.js')
-rw-r--r--jstests/replsets/maintenance2.js63
1 files changed, 63 insertions, 0 deletions
diff --git a/jstests/replsets/maintenance2.js b/jstests/replsets/maintenance2.js
new file mode 100644
index 00000000000..463f6c78a4e
--- /dev/null
+++ b/jstests/replsets/maintenance2.js
@@ -0,0 +1,63 @@
+function shouldFail( f ) {
+ e = assert.throws( function() {
+ f();
+ if( db.getLastError() ) {
+ throw db.getLastError();
+ }
+ } );
+}
+
+doTest = function( signal ) {
+ // Test that certain operations fail in recovery mode
+
+ // 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();
+
+ // save some records
+ var len = 100
+ for (var i = 0; i < len; ++i) {
+ master.getDB("foo").foo.save({a: i});
+ }
+
+ // This method will check the oplogs of the master
+ // and slaves in the set and wait until the change has replicated.
+ // replTest.awaitReplication();
+
+ slaves = replTest.liveNodes.slaves;
+ assert( slaves.length == 2, "Expected 2 slaves but length was " + slaves.length );
+
+ slaves.forEach(function(slave) {
+ // put slave into maintenance (recovery) mode
+ slave.getDB("foo").adminCommand({replSetMaintenance:1});
+
+ stats = slave.getDB("foo").adminCommand({replSetGetStatus:1});
+ assert.eq(stats.myState, 3, "Slave should be in recovering state.");
+
+ print("group should fail in recovering state...");
+ slave.slaveOk = true;
+ shouldFail( function() { slave.getDB("foo").foo.group({initial: {n:0}, reduce: function(obj,out){out.n++;}}); } );
+
+ print("count should fail in recovering state...");
+ slave.slaveOk = true;
+ shouldFail( function() { slave.getDB("foo").foo.count(); } );
+ });
+
+ // Shut down the set and finish the test.
+ replTest.stopSet( signal );
+}
+
+doTest( 15 );
+print("SUCCESS");