use of org.apache.catalina.User in project tomcat by apache.
the class MemoryUserDatabaseTests method testSerializePrincipal.
@Test
public void testSerializePrincipal() throws Exception {
User user = db.findUser("admin");
GenericPrincipal gpIn = new UserDatabaseRealm.UserDatabasePrincipal(user, db);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(gpIn);
byte[] data = bos.toByteArray();
ByteArrayInputStream bis = new ByteArrayInputStream(data);
ObjectInputStream ois = new ObjectInputStream(bis);
GenericPrincipal gpOut = (GenericPrincipal) ois.readObject();
Assert.assertEquals("admin", gpOut.getName());
assertPrincipalNames(gpOut.getRoles(), user.getRoles());
}
use of org.apache.catalina.User in project tomcat by apache.
the class MemoryUserDatabaseTests method testReloadUserDatabase.
public void testReloadUserDatabase() throws Exception {
try (BufferedWriter out = new BufferedWriter(new FileWriter(TEST_FILE))) {
out.write("<?xml version=\"1.0\" ?>" + "<tomcat-users xmlns=\"http://tomcat.apache.org/xml\"" + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"" + " xsi:schemaLocation=\"http://tomcat.apache.org/xml/tomcat-users.xsd\"" + " version=\"1.0\">" + "<role rolename=\"foo\" />" + "<group groupname=\"bar\" />" + "<user username=\"root\" password=\"sup3Rsekr3t\" roles=\"foo, bar\" groups=\"bar, foo\" />" + "</tomcat-users>");
db.open();
}
assertPrincipalNames(new String[] { "foo", "bar" }, db.getRoles());
assertPrincipalNames(new String[] { "bar", "foo" }, db.getGroups());
Iterator<User> users = db.getUsers();
Assert.assertTrue("No users found", users.hasNext());
User user = users.next();
Assert.assertEquals("root", user.getName());
Assert.assertNull(user.getFullName());
Assert.assertEquals("sup3Rsekr3t", user.getPassword());
assertPrincipalNames(new String[] { "foo", "bar" }, user.getRoles());
assertPrincipalNames(new String[] { "bar", "foo" }, user.getGroups());
}
use of org.apache.catalina.User in project tomcat by apache.
the class MemoryUserDatabaseTests method testMultithreadedMutateUserDatabase.
@Test
public void testMultithreadedMutateUserDatabase() throws Exception {
// Generate lots of concurrent load on the user database
Runnable job = new Runnable() {
@Override
public void run() {
for (int i = 0; i < 10; ++i) {
db.createUser("newUser-" + Thread.currentThread().getName() + "-" + i, "x", null);
}
}
};
int numThreads = 100;
Thread[] threads = new Thread[numThreads + 1];
for (int i = 0; i < numThreads; ++i) {
threads[i] = new Thread(job);
}
// Let's
threads[numThreads] = new Thread(new Runnable() {
@Override
public void run() {
try {
db.open();
} catch (Exception e) {
e.printStackTrace();
}
}
});
++numThreads;
for (int i = 0; i < numThreads; ++i) {
threads[i].start();
}
for (int i = 0; i < numThreads; ++i) {
threads[i].join();
}
// Remove all those extra users
Iterator<User> users = db.getUsers();
for (; users.hasNext(); ) {
User user = users.next();
if (user.getUsername().startsWith("newUser")) {
db.removeUser(user);
}
}
users = db.getUsers();
Assert.assertTrue("No users found", users.hasNext());
User user = users.next();
Assert.assertEquals("admin", user.getName());
Assert.assertNull(user.getFullName());
Assert.assertEquals("sekr3t", user.getPassword());
assertPrincipalNames(new String[] { "testrole", "otherrole" }, user.getRoles());
assertPrincipalNames(new String[] { "testgroup", "othergroup" }, user.getGroups());
}
Aggregations