This is just a cleanup work to hide some of the private state of ReplSetTest so it is easier to encapsulate and add new logic. Also enables strict mode.
68 lines
2.2 KiB
JavaScript
68 lines
2.2 KiB
JavaScript
// Tests that the creation of a user replicates to secondaries, and survives a restart of all
|
|
// data-bearing nodes.
|
|
//
|
|
// If all data-bearing nodes in a replica set are using an ephemeral storage engine, the set will
|
|
// not be able to survive a scenario where all data-bearing nodes are down simultaneously. In such a
|
|
// scenario, none of the members will have any data, and upon restart will each look for a member to
|
|
// inital sync from, so no primary will be elected. This test induces such a scenario, so cannot be
|
|
// run on ephemeral storage engines.
|
|
// @tags: [requires_persistence]
|
|
|
|
(function () {
|
|
"use strict";
|
|
var keyfile = "jstests/libs/key1";
|
|
var master;
|
|
var rs = new ReplSetTest({
|
|
nodes : { node0 : {}, node1 : {}, arbiter : {}},
|
|
keyFile : keyfile
|
|
});
|
|
rs.startSet();
|
|
rs.initiate();
|
|
|
|
master = rs.getPrimary();
|
|
jsTest.log("adding user");
|
|
master.getDB("admin").createUser({user: "foo", pwd: "bar", roles: jsTest.adminUserRoles},
|
|
{w: 2, wtimeout: 30000});
|
|
|
|
var safeInsert = function() {
|
|
master = rs.getPrimary();
|
|
master.getDB("admin").auth("foo", "bar");
|
|
assert.writeOK(master.getDB("foo").bar.insert({ x: 1 }));
|
|
};
|
|
|
|
jsTest.log("authing");
|
|
for (var i=0; i<2; i++) {
|
|
assert(rs.nodes[i].getDB("admin").auth("foo", "bar"),
|
|
"could not log into " + rs.nodes[i].host);
|
|
}
|
|
|
|
jsTest.log("make common point");
|
|
|
|
safeInsert();
|
|
authutil.asCluster(rs.nodes, keyfile, function() { rs.awaitReplication(); });
|
|
|
|
jsTest.log("write stuff to 0&2");
|
|
rs.stop(1);
|
|
|
|
master = rs.getPrimary();
|
|
master.getDB("admin").auth("foo", "bar");
|
|
master.getDB("foo").bar.drop();
|
|
jsTest.log("last op: " +
|
|
tojson(master.getDB("local").oplog.rs.find().sort({$natural:-1}).limit(1).next()));
|
|
|
|
jsTest.log("write stuff to 1&2");
|
|
rs.stop(0);
|
|
rs.restart(1);
|
|
|
|
safeInsert();
|
|
jsTest.log("last op: " +
|
|
tojson(master.getDB("local").oplog.rs.find().sort({$natural:-1}).limit(1).next()));
|
|
|
|
rs.restart(0);
|
|
|
|
jsTest.log("doing rollback!");
|
|
|
|
authutil.asCluster(rs.nodes, keyfile, function () { rs.awaitSecondaryNodes(); });
|
|
|
|
}());
|