Skip to content

Commit b15ef99

Browse files
committed
JAVA-974: Added more explicit tests for addUser and removeUser
1 parent 696272a commit b15ef99

File tree

1 file changed

+97
-0
lines changed

1 file changed

+97
-0
lines changed

src/test/com/mongodb/DBTest.java

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
import java.net.UnknownHostException;
2727
import java.util.Arrays;
28+
import java.util.List;
2829

2930
import static com.mongodb.ReadPreference.primary;
3031
import static com.mongodb.ReadPreference.primaryPreferred;
@@ -37,6 +38,8 @@
3738
import static org.hamcrest.CoreMatchers.sameInstance;
3839
import static org.junit.Assert.assertEquals;
3940
import static org.junit.Assert.assertFalse;
41+
import static org.junit.Assert.assertNotNull;
42+
import static org.junit.Assert.assertNull;
4043
import static org.junit.Assert.assertThat;
4144
import static org.junit.Assert.assertTrue;
4245
import static org.junit.Assume.assumeFalse;
@@ -461,6 +464,100 @@ public void shouldNotThrowAnExceptionOnCommandFailure() {
461464
assertThat(commandResult, hasFields(new String[]{"serverUsed", "ok", "errmsg"}));
462465
}
463466

467+
@Test
468+
public void shouldAddReadOnlyUser() {
469+
String userName = "newUser";
470+
String pwd = "pwd";
471+
getDatabase().addUser(userName, pwd.toCharArray(), true);
472+
try {
473+
assertCorrectUserExists(userName, pwd, true, getDatabase());
474+
} finally {
475+
getDatabase().removeUser(userName);
476+
}
477+
}
478+
479+
@Test
480+
public void shouldAddReadOnlyAdminUser() {
481+
String userName = "newUser";
482+
String pwd = "pwd";
483+
DB adminDB = getDatabase().getSisterDB("admin");
484+
adminDB.addUser(userName, pwd.toCharArray(), true);
485+
try {
486+
assertCorrectUserExists(userName, pwd, true, adminDB);
487+
} finally {
488+
adminDB.removeUser(userName);
489+
}
490+
}
491+
492+
@Test
493+
public void shouldAddReadWriteUser() {
494+
String userName = "newUser";
495+
String pwd = "pwd";
496+
getDatabase().addUser(userName, pwd.toCharArray(), false);
497+
try {
498+
assertCorrectUserExists(userName, pwd, false, getDatabase());
499+
} finally {
500+
getDatabase().removeUser(userName);
501+
}
502+
}
503+
504+
@Test
505+
public void shouldAddReadWriteAdminUser() {
506+
String userName = "newUser";
507+
String pwd = "pwd";
508+
DB adminDB = getDatabase().getSisterDB("admin");
509+
adminDB.addUser(userName, pwd.toCharArray(), false);
510+
try {
511+
assertCorrectUserExists(userName, pwd, false, adminDB);
512+
} finally {
513+
adminDB.removeUser(userName);
514+
}
515+
}
516+
517+
@Test
518+
public void shouldRemoveUser() {
519+
String userName = "newUser";
520+
getDatabase().addUser(userName, "pwd".toCharArray(), true);
521+
getDatabase().removeUser(userName);
522+
assertThatUserIsRemoved(userName, getDatabase());
523+
}
524+
525+
private void assertThatUserIsRemoved(final String userName, final DB database) {
526+
if (serverIsAtLeastVersion(2.6)) {
527+
CommandResult usersInfo = database.command(new BasicDBObject("usersInfo", userName));
528+
assertEquals(0, ((List) usersInfo.get("users")).size());
529+
}
530+
else {
531+
assertNull(database.getCollection("system.users").findOne(new BasicDBObject("user", userName)));
532+
}
533+
}
534+
535+
536+
private void assertCorrectUserExists(final String userName, final String password, final boolean isReadOnly, final DB database) {
537+
if (serverIsAtLeastVersion(2.6)) {
538+
CommandResult usersInfo = database.command(new BasicDBObject("usersInfo", userName));
539+
DBObject user = (DBObject) ((List) usersInfo.get("users")).get(0);
540+
assertEquals(userName, user.get("user"));
541+
assertEquals(database.getName(), user.get("db"));
542+
assertEquals(getExpectedRole(isReadOnly, database), ((DBObject) ((List) user.get("roles")).get(0)).get("role"));
543+
}
544+
else {
545+
assertEquals(new BasicDBObject("user", userName).append("readOnly", isReadOnly)
546+
.append("pwd", getDatabase()._hash(userName, password.toCharArray())),
547+
database.getCollection("system.users").findOne(new BasicDBObject("user", userName),
548+
new BasicDBObject("_id", 0)));
549+
}
550+
}
551+
552+
private String getExpectedRole(final boolean isReadOnly, final DB database) {
553+
if (database.getName().equals("admin")) {
554+
return isReadOnly ? "readAnyDatabase" : "root";
555+
} else {
556+
return isReadOnly ? "read" : "dbOwner";
557+
}
558+
}
559+
560+
464561
private DB getReplicaSetDB() throws UnknownHostException {
465562
Mongo mongo = new MongoClient(Arrays.asList(new ServerAddress("127.0.0.1"), new ServerAddress("127.0.0.1", 27018)));
466563
return mongo.getDB("database-" + System.nanoTime());

0 commit comments

Comments
 (0)