summaryrefslogtreecommitdiff
path: root/jstests
diff options
context:
space:
mode:
authorJonathan <jonathan@mongodb.com>2014-10-03 14:26:07 -0400
committerBenety Goh <benety@mongodb.com>2014-10-06 11:34:27 -0400
commit0a98d654a7054d252dd921d27a5649f7177c8723 (patch)
treee970c60a98f110cc581c3ec9a0f98b81ac24cfb4 /jstests
parente4854d288a7bbb39518cfb8e3fa8e82d23b16f00 (diff)
downloadmongo-0a98d654a7054d252dd921d27a5649f7177c8723.tar.gz
SERVER-15500 New test for system.user operations
Closes #809 Signed-off-by: Benety Goh <benety@mongodb.com>
Diffstat (limited to 'jstests')
-rw-r--r--jstests/auth/system_users_modify.js129
1 files changed, 129 insertions, 0 deletions
diff --git a/jstests/auth/system_users_modify.js b/jstests/auth/system_users_modify.js
new file mode 100644
index 00000000000..edbf15c5bea
--- /dev/null
+++ b/jstests/auth/system_users_modify.js
@@ -0,0 +1,129 @@
+// SERVER-15500
+// Test various auth scenarios, when directly modifying system.users
+
+// Try to authenticate user
+// Value determines if auth should be expected to pass or fail
+function authUser(value, conn, user, pwd) {
+ var message = "Auth for user "+user+" on connection "+tojson(conn);
+ assert.eq(conn.auth(user, pwd), value, message);
+}
+
+// Test steps
+// - createRole, if required
+// - createUser
+// - Update system.users for specified user, if required
+// - auth user
+function runTest(test) {
+
+ jsTest.log("Test:"+tojson(test));
+ authUser(authSucceed, admin, "admin", "admin");
+ if (test.role) {
+ assert.doesNotThrow(
+ function () {test.userdb.createRole(test.role);},
+ [],
+ "Create Role "+tojson(test.role));
+ }
+ // Create user
+ assert.doesNotThrow(
+ function () {test.userdb.createUser(test.user);},
+ [],
+ "Create User "+tojson(test.user));
+
+ // Try to authenticate - should always succeed
+ authUser(authSucceed, test.userdb, test.user.user, test.user.pwd);
+
+ // Not all test cases will have updates to user doc
+ for (var i=0; i< test.updates.length; i++) {
+ // Directly update the user doc
+ test.admin.system.users.update({user: test.user.user}, test.updates[i]);
+ // Try to authenticate - test defines success
+ authUser(test.result, test.userdb, test.user.user, test.user.pwd);
+ }
+}
+
+var dbName = "server15500";
+var admin = db.getSiblingDB("admin");
+var userdb = db.getSiblingDB(dbName);
+var adminUser = {user: "admin", pwd: "admin", roles: ["__system"]};
+var authSucceed = 1;
+var authFail = 0;
+
+// Tests to run
+var tests = [
+ {name: "Valid user",
+ role: {role: "userRole",
+ privileges: [{resource: {db: dbName, collection: ""},
+ actions: ["find", "update", "insert"]}],
+ roles: [{role: "readWrite", db: dbName}]},
+ user: {user: "user1", pwd: "user1", roles: [{role: "userRole", db: dbName}]},
+ updates: [{$set: {roles: [{role: "readWrite", db: dbName}]}}],
+ result: authSucceed,
+ admin: admin,
+ userdb: userdb
+ },
+ {name: "User without roles",
+ user: {user: "noroles", pwd: "noroles", roles: ["readWrite"]},
+ updates: [{$unset: {roles: ""}}],
+ result: authFail,
+ admin: admin,
+ userdb: userdb
+ },
+ {name: "User with invalid roles",
+ user: {user: "badroles", pwd: "badroles", roles: ["readWrite"]},
+ updates: [{$set: {roles: "non-array"}},
+ {$set: {roles: 34}},
+ {$set: {roles: {}}}],
+ result: authFail,
+ admin: admin,
+ userdb: userdb
+ },
+ {name: "User without credentials",
+ user: {user: "nocred", pwd: "nocred", roles: ["readWrite"]},
+ updates: [{$unset: {credentials: ""}}],
+ result: authFail,
+ admin: admin,
+ userdb: userdb
+ },
+ {name: "User invalid credentials",
+ user: {user: "badcred", pwd: "badcred", roles: ["readWrite"]},
+ updates: [{$set: {credentials: {"MONGODB-CR": "badcred"}}},
+ {$set: {credentials: {"MONGODB": "badcred"}}}],
+ result: authFail,
+ admin: admin,
+ userdb: userdb
+ },
+ {name: "User without db",
+ user: {user: "nodb", pwd: "nodb", roles: ["readWrite"]},
+ updates: [{$unset: {db: ""}}],
+ result: authFail,
+ admin: admin,
+ userdb: userdb
+ },
+ {name: "User invalid db",
+ user: {user: "baddb", pwd: "baddb", roles: ["readWrite"]},
+ updates: [{$set: {db: null}},
+ {$set: {db: {}}},
+ {$set: {db: []}},
+ {$set: {db: 34}}],
+ result: authFail,
+ admin: admin,
+ userdb: userdb
+ },
+];
+
+admin.createUser(adminUser);
+
+// Execute all tests
+tests.forEach(function(test) {
+ authUser(authSucceed, admin, "admin", "admin");
+ runTest(test);
+});
+
+// Make sure that we can still auth with a valid user
+authUser(authSucceed, userdb, "user1", "user1");
+
+// Remove custom roles
+userdb.dropAllRoles();
+
+// Remove all users
+admin.system.users.remove({});