summaryrefslogtreecommitdiff
path: root/jstests/repl/repl11.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/repl/repl11.js')
-rw-r--r--jstests/repl/repl11.js60
1 files changed, 60 insertions, 0 deletions
diff --git a/jstests/repl/repl11.js b/jstests/repl/repl11.js
new file mode 100644
index 00000000000..9341f4a215d
--- /dev/null
+++ b/jstests/repl/repl11.js
@@ -0,0 +1,60 @@
+// Test repl with auth enabled
+
+var baseName = "jstests_repl11test";
+
+setAdmin = function( n ) {
+ n.getDB( "admin" ).addUser( "super", "super" );
+ n.getDB( "local" ).addUser( "repl", "foo" );
+ n.getDB( "local" ).system.users.findOne();
+}
+
+auth = function( n ) {
+ return n.getDB( baseName ).auth( "test", "test" );
+}
+
+// What if preexisting data on master and already set up db on slave for login?
+doTest = function( signal ) {
+
+ rt = new ReplTest( baseName );
+
+ m = rt.start( true, {}, false, true );
+ m.getDB( baseName ).addUser( "test", "test" );
+ setAdmin( m );
+ rt.stop( true );
+
+ s = rt.start( false, {}, false, true );
+ setAdmin( s );
+ rt.stop( false );
+
+ m = rt.start( true, { auth:null }, true );
+ auth( m );
+ s = rt.start( false, { auth:null }, true );
+ assert.soon( function() { return auth( s ); } );
+
+ ma = m.getDB( baseName ).a;
+ ma.save( {} );
+ sa = s.getDB( baseName ).a;
+ assert.soon( function() { return 1 == sa.count(); } );
+
+ rt.stop( false, signal );
+
+ ma.save( {} );
+ s = rt.start( false, { auth:null }, true );
+ assert.soon( function() { return auth( s ); } );
+ sa = s.getDB( baseName ).a;
+ assert.soon( function() { return 2 == sa.count(); } );
+
+ ma.save( {a:1} );
+ assert.soon( function() { return 1 == sa.count( {a:1} ); } );
+
+ ma.update( {a:1}, {b:2} );
+ assert.soon( function() { return 1 == sa.count( {b:2} ); } );
+
+ ma.remove( {b:2} );
+ assert.soon( function() { return 0 == sa.count( {b:2} ); } );
+
+ rt.stop();
+}
+
+doTest( 15 ); // SIGTERM
+doTest( 9 ); // SIGKILL