Files
mongo/jstests/auth/list_databases.js
2017-12-05 19:07:59 -05:00

55 lines
1.8 KiB
JavaScript

// Auth tests for the listDatabases command.
(function() {
'use strict';
const mongod = MongoRunner.runMongod({auth: ""});
const admin = mongod.getDB('admin');
admin.createUser({user: 'admin', pwd: 'pass', roles: jsTest.adminUserRoles});
assert(admin.auth('admin', 'pass'));
// Establish db0..db7
for (let i = 0; i < 8; ++i) {
mongod.getDB('db' + i).foo.insert({bar: "baz"});
}
// Make db0, db2, db4, db6 readable to user1 abd user3.
// Make db0, db1, db2, db3 read/writable to user 2 and user3.
function makeRole(perm, dbNum) {
return {role: perm, db: ("db" + dbNum)};
}
const readEven = [0, 2, 4, 6].map(function(i) {
return makeRole("read", i);
});
const readWriteLow = [0, 1, 2, 3].map(function(i) {
return makeRole("readWrite", i);
});
admin.createUser({user: 'user1', pwd: 'pass', roles: readEven});
admin.createUser({user: 'user2', pwd: 'pass', roles: readWriteLow});
admin.createUser({user: 'user3', pwd: 'pass', roles: readEven.concat(readWriteLow)});
admin.logout();
[{user: "user1", dbs: ["db0", "db2", "db4", "db6"]},
{user: "user2", dbs: ["db0", "db1", "db2", "db3"]},
{user: "user3", dbs: ["db0", "db1", "db2", "db3", "db4", "db6"]},
{
user: "admin",
dbs: ["admin", "db0", "db1", "db2", "db3", "db4", "db5", "db6", "db7", "local"]
},
].forEach(function(test) {
admin.auth(test.user, 'pass');
const dbs = assert.commandWorked(admin.runCommand({listDatabases: 1}));
assert.eq(dbs.databases
.map(function(db) {
return db.name;
})
.sort(),
test.dbs,
test.user + " permissions");
admin.logout();
});
MongoRunner.stopMongod(mongod);
})();