/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.jackrabbit.api.security.user;
import java.security.Principal;
import java.util.ArrayList;
import java.util.List;
import javax.jcr.RepositoryException;
import org.apache.jackrabbit.test.NotExecutableException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* <code>UserManagerCreateGroupTest</code>...
*/
public class UserManagerCreateUserTest extends AbstractUserTest {
private static Logger log = LoggerFactory.getLogger(UserManagerCreateUserTest.class);
private List<Authorizable> createdUsers = new ArrayList<Authorizable>();
@Override
protected void tearDown() throws Exception {
// remove all created groups again
for (Object createdUser : createdUsers) {
Authorizable auth = (Authorizable) createdUser;
try {
auth.remove();
superuser.save();
} catch (RepositoryException e) {
log.warn("Failed to remove User " + auth.getID() + " during tearDown.");
}
}
super.tearDown();
}
private User createUser(String uid, String pw) throws RepositoryException, NotExecutableException {
User u = userMgr.createUser(uid, pw);
save(superuser);
return u;
}
private User createUser(String uid, String pw, Principal p, String iPath) throws RepositoryException, NotExecutableException {
User u = userMgr.createUser(uid, pw, p, iPath);
save(superuser);
return u;
}
public void testCreateUser() throws RepositoryException, NotExecutableException {
Principal p = getTestPrincipal();
String uid = p.getName();
User user = createUser(uid, buildPassword(uid));
createdUsers.add(user);
assertNotNull(user.getID());
assertEquals(p.getName(), user.getPrincipal().getName());
}
public void testCreateUserWithPath() throws RepositoryException, NotExecutableException {
Principal p = getTestPrincipal();
String uid = p.getName();
User user = createUser(uid, buildPassword(uid), p, "/any/path/to/the/new/user");
createdUsers.add(user);
assertNotNull(user.getID());
assertEquals(p.getName(), user.getPrincipal().getName());
}
public void testCreateUserWithPath2() throws RepositoryException, NotExecutableException {
Principal p = getTestPrincipal();
String uid = p.getName();
User user = createUser(uid, buildPassword(uid), p, "any/path");
createdUsers.add(user);
assertNotNull(user.getID());
assertEquals(p.getName(), user.getPrincipal().getName());
}
public void testCreateUserWithDifferentPrincipalName() throws RepositoryException, NotExecutableException {
Principal p = getTestPrincipal();
String uid = getTestPrincipal().getName();
User user = createUser(uid, buildPassword(uid), p, "/any/path/to/the/new/user");
createdUsers.add(user);
assertNotNull(user.getID());
assertEquals(p.getName(), user.getPrincipal().getName());
}
public void testCreateUserWithNullParamerters() throws RepositoryException {
try {
User user = createUser(null, null);
createdUsers.add(user);
fail("A User cannot be built from 'null' parameters");
} catch (Exception e) {
// ok
}
try {
User user = createUser(null, null, null, null);
createdUsers.add(user);
fail("A User cannot be built from 'null' parameters");
} catch (Exception e) {
// ok
}
}
public void testCreateUserWithNullUserID() throws RepositoryException {
try {
User user = createUser(null, "anyPW");
createdUsers.add(user);
fail("A User cannot be built with 'null' userID");
} catch (Exception e) {
// ok
}
}
public void testCreateUserWithEmptyUserID() throws RepositoryException {
try {
User user = createUser("", "anyPW");
createdUsers.add(user);
fail("A User cannot be built with \"\" userID");
} catch (Exception e) {
// ok
}
try {
User user = createUser("", "anyPW", getTestPrincipal(), null);
createdUsers.add(user);
fail("A User cannot be built with \"\" userID");
} catch (Exception e) {
// ok
}
}
/**
* Test for changed behavior that allows creating of users with 'null' password.
*
* @since Jackrabbit 2.7
*/
public void testCreateUserWithNullPassword() throws RepositoryException, NotExecutableException {
Principal p = getTestPrincipal();
User user = createUser(p.getName(), null);
createdUsers.add(user);
}
public void testCreateUserWithEmptyPassword() throws RepositoryException, NotExecutableException {
Principal p = getTestPrincipal();
User user = createUser(p.getName(), "");
createdUsers.add(user);
}
public void testCreateUserWithNullPrincipal() throws RepositoryException {
try {
Principal p = getTestPrincipal();
String uid = p.getName();
User user = createUser(uid, buildPassword(uid), null, "/a/b/c");
createdUsers.add(user);
fail("A User cannot be built with 'null' Principal");
} catch (Exception e) {
// ok
}
}
public void testCreateUserWithEmptyPrincipal() throws RepositoryException {
try {
Principal p = getTestPrincipal("");
String uid = p.getName();
User user = createUser(uid, buildPassword(uid), p, "/a/b/c");
createdUsers.add(user);
fail("A User cannot be built with ''-named Principal");
} catch (Exception e) {
// ok
}
try {
Principal p = getTestPrincipal(null);
String uid = p.getName();
User user = createUser(uid, buildPassword(uid), p, "/a/b/c");
createdUsers.add(user);
fail("A User cannot be built with ''-named Principal");
} catch (Exception e) {
// ok
}
}
public void testCreateTwiceWithSameUserID() throws RepositoryException, NotExecutableException {
String uid = getTestPrincipal().getName();
User user = createUser(uid, buildPassword(uid));
createdUsers.add(user);
try {
User user2 = createUser(uid, buildPassword("anyPW"));
createdUsers.add(user2);
fail("Creating 2 users with the same UserID should throw AuthorizableExistsException.");
} catch (AuthorizableExistsException e) {
// success.
}
}
public void testCreateTwiceWithSamePrincipal() throws RepositoryException, NotExecutableException {
Principal p = getTestPrincipal();
String uid = p.getName();
User user = createUser(uid, buildPassword(uid), p, "a/b/c");
createdUsers.add(user);
try {
uid = getTestPrincipal().getName();
User user2 = createUser(uid, buildPassword(uid), p, null);
createdUsers.add(user2);
fail("Creating 2 users with the same Principal should throw AuthorizableExistsException.");
} catch (AuthorizableExistsException e) {
// success.
}
}
public void testGetUserAfterCreation() throws RepositoryException, NotExecutableException {
Principal p = getTestPrincipal();
String uid = p.getName();
User user = createUser(uid, buildPassword(uid));
createdUsers.add(user);
assertNotNull(userMgr.getAuthorizable(user.getID()));
assertNotNull(userMgr.getAuthorizable(p));
}
public void testAutoSave() throws RepositoryException {
boolean autosave = userMgr.isAutoSave();
if (autosave) {
try {
userMgr.autoSave(false);
autosave = false;
} catch (RepositoryException e) {
// cannot change autosave behavior
// ignore -> test will behave differently.
}
}
Principal p = getTestPrincipal();
String uid = p.getName();
User user = userMgr.createUser(uid, buildPassword(uid));
superuser.refresh(false);
if (!autosave) {
// transient changes must be gone after the refresh-call.
assertNull(userMgr.getAuthorizable(uid));
assertNull(userMgr.getAuthorizable(p));
} else {
// changes are persisted automatically -> must not be gone.
createdUsers.add(user);
assertNotNull(userMgr.getAuthorizable(uid));
assertNotNull(userMgr.getAuthorizable(p));
}
}
}