summaryrefslogtreecommitdiff
path: root/src/mongo/gotools/test/qa-tests/jstests/restore/users_and_roles_full_dump.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/gotools/test/qa-tests/jstests/restore/users_and_roles_full_dump.js')
-rw-r--r--src/mongo/gotools/test/qa-tests/jstests/restore/users_and_roles_full_dump.js142
1 files changed, 142 insertions, 0 deletions
diff --git a/src/mongo/gotools/test/qa-tests/jstests/restore/users_and_roles_full_dump.js b/src/mongo/gotools/test/qa-tests/jstests/restore/users_and_roles_full_dump.js
new file mode 100644
index 00000000000..97b95377a45
--- /dev/null
+++ b/src/mongo/gotools/test/qa-tests/jstests/restore/users_and_roles_full_dump.js
@@ -0,0 +1,142 @@
+// This test requires mongo 2.6.x releases
+// @tags: [requires_mongo_26]
+(function() {
+
+ // Tests running mongorestore with --restoreDbUsersAndRoles against
+ // a full dump.
+
+
+ jsTest.log('Testing running mongorestore with --restoreDbUsersAndRoles against'+
+ ' a full dump');
+
+ if (typeof getDumpTarget === 'undefined') {
+ load('jstests/configs/standard_dump_targets.config.js');
+ }
+
+ if (dump_targets !== "standard") {
+ print('skipping test incompatable with archiving or compression');
+ return assert(true);
+ }
+
+ var runTest = function(sourceDBVersion, dumpVersion, restoreVersion, destDBVersion) {
+
+ jsTest.log('Running with sourceDBVersion=' + (sourceDBVersion || 'latest') +
+ ', dumpVersion=' + (dumpVersion || 'latest') + ', restoreVersion=' +
+ (restoreVersion || 'latest') + ', and destDBVersion=' +
+ (destDBVersion || 'latest'));
+
+ var toolTest = new ToolTest('users_and_roles_full_dump',
+ {binVersion: sourceDBVersion});
+ toolTest.startDB('foo');
+
+ // where we'll put the dump
+ var dumpTarget = 'users_and_roles_full_dump_dump';
+ resetDbpath(dumpTarget);
+
+ // the db we'll be using, and the admin db
+ var adminDB = toolTest.db.getSiblingDB('admin');
+ var testDB = toolTest.db.getSiblingDB('test');
+
+ // create a user and role on the admin database
+ adminDB.createUser({
+ user: 'adminUser',
+ pwd: 'password',
+ roles: [{role: 'read', db: 'admin'}],
+ });
+ adminDB.createRole({
+ role: 'adminRole',
+ privileges: [{
+ resource: {db: 'admin', collection: ''},
+ actions: ['find'],
+ }],
+ roles: [],
+ });
+
+ // create some users and roles on the database
+ testDB.createUser({
+ user: 'userOne',
+ pwd: 'pwdOne',
+ roles: [{role: 'read', db: 'test'}],
+ });
+ testDB.createRole({
+ role: 'roleOne',
+ privileges: [{
+ resource: {db: 'test', collection: ''},
+ actions: ['find'],
+ }],
+ roles: [],
+ });
+ testDB.createUser({
+ user: 'userTwo',
+ pwd: 'pwdTwo',
+ roles: [{role: 'roleOne', db: 'test'}],
+ });
+
+ // insert some data
+ for (var i = 0; i < 10; i++) {
+ testDB.data.insert({_id: i});
+ }
+ // sanity check the insertion worked
+ assert.eq(10, testDB.data.count());
+
+ // dump the data
+ var args = ['mongodump' + (dumpVersion ? ('-'+dumpVersion) : ''),
+ '--port', toolTest.port]
+ .concat(getDumpTarget(dumpTarget));
+ var ret = runMongoProgram.apply(this, args);
+ assert.eq(0, ret);
+
+ // restart the mongod, with a clean db path
+ stopMongod(toolTest.port);
+ resetDbpath(toolTest.dbpath);
+ toolTest.m = null;
+ toolTest.db = null;
+ toolTest.options.binVersion = destDBVersion;
+ toolTest.startDB('foo');
+
+ // refresh the db references
+ adminDB = toolTest.db.getSiblingDB('admin');
+ testDB = toolTest.db.getSiblingDB('test');
+
+ // do a full restore
+ args = ['mongorestore' + (restoreVersion ? ('-'+restoreVersion) : ''),
+ '--port', toolTest.port]
+ .concat(getRestoreTarget(dumpTarget));
+ ret = runMongoProgram.apply(this, args);
+ assert.eq(0, ret);
+
+ // make sure the data was restored
+ assert.eq(10, testDB.data.count());
+ for (i = 0; i < 10; i++) {
+ assert.eq(1, testDB.data.count({_id: i}));
+ }
+
+ // make sure the users were restored
+ var users = testDB.getUsers();
+ assert.eq(2, users.length);
+ assert(users[0].user === 'userOne' || users[1].user === 'userOne');
+ assert(users[0].user === 'userTwo' || users[1].user === 'userTwo');
+ var adminUsers = adminDB.getUsers();
+ assert.eq(1, adminUsers.length);
+ assert.eq('adminUser', adminUsers[0].user);
+
+ // make sure the roles were restored
+ var roles = testDB.getRoles();
+ assert.eq(1, roles.length);
+ assert.eq('roleOne', roles[0].role);
+ var adminRoles = adminDB.getRoles();
+ assert.eq(1, adminRoles.length);
+ assert.eq('adminRole', adminRoles[0].role);
+
+ // success
+ toolTest.stop();
+
+ };
+
+ // 'undefined' triggers latest
+ runTest('2.6', '2.6', undefined, '2.6');
+ runTest('2.6', '2.6', undefined, undefined);
+ runTest('2.6', undefined, undefined, undefined);
+ runTest('2.6', undefined, undefined, '2.6');
+ runTest(undefined, undefined, undefined, undefined);
+}());