/*
* JBoss, Home of Professional Open Source
*
* Copyright 2013 Red Hat, Inc. and/or its affiliates.
*
* Licensed 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.picketlink.test.idm.basic;
import org.junit.Test;
import org.picketlink.idm.IdentityManager;
import org.picketlink.idm.RelationshipManager;
import org.picketlink.idm.model.Attribute;
import org.picketlink.idm.model.basic.BasicModel;
import org.picketlink.idm.model.basic.Grant;
import org.picketlink.idm.model.basic.Group;
import org.picketlink.idm.model.basic.GroupMembership;
import org.picketlink.idm.model.basic.Realm;
import org.picketlink.idm.model.basic.Role;
import org.picketlink.idm.model.basic.User;
import org.picketlink.idm.query.RelationshipQuery;
import org.picketlink.test.idm.Configuration;
import org.picketlink.test.idm.testers.FileStoreConfigurationTester;
import org.picketlink.test.idm.testers.IdentityConfigurationTester;
import org.picketlink.test.idm.testers.JPAStoreConfigurationTester;
import org.picketlink.test.idm.testers.LDAPStoreConfigurationTester;
import org.picketlink.test.idm.testers.SingleConfigLDAPJPAStoreConfigurationTester;
import java.io.IOException;
import java.io.InputStream;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.util.Calendar;
import java.util.Date;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
/**
* <p>
* Test case for the {@link User} basic management operations using only the default realm.
* </p>
*
* @author <a href="mailto:psilva@redhat.com">Pedro Silva</a>
*
*/
@Configuration(include = {JPAStoreConfigurationTester.class, FileStoreConfigurationTester.class,
LDAPStoreConfigurationTester.class, SingleConfigLDAPJPAStoreConfigurationTester.class})
public class UserManagementTestCase extends AbstractIdentityTypeTestCase<User> {
public UserManagementTestCase(IdentityConfigurationTester builder) {
super(builder);
}
@Test
public void testCreate() throws Exception {
User newUser = createUser("jduke");
assertNotNull(newUser.getId());
newUser.setEmail("jduke@jboss.org");
newUser.setFirstName("Java");
newUser.setLastName("Duke");
IdentityManager identityManager = getIdentityManager();
identityManager.update(newUser);
User storedUser = getUser(newUser.getLoginName());
assertNotNull(storedUser);
assertEquals(newUser.getId(), storedUser.getId());
assertEquals(newUser.getLoginName(), storedUser.getLoginName());
assertEquals(newUser.getFirstName(), storedUser.getFirstName());
assertEquals(newUser.getLastName(), storedUser.getLastName());
assertEquals(newUser.getEmail(), storedUser.getEmail());
assertNotNull(storedUser.getPartition());
assertEquals(Realm.DEFAULT_REALM, storedUser.getPartition().getName());
assertTrue(storedUser.isEnabled());
assertNull(storedUser.getExpirationDate());
assertNotNull(storedUser.getCreatedDate());
assertTrue(new Date().compareTo(storedUser.getCreatedDate()) >= 0);
}
@Test
public void testUpdate() throws Exception {
IdentityManager identityManager = getIdentityManager();
User storedUser = createUser("admin");
storedUser.setEmail("admin@jboss.org");
storedUser.setFirstName("The");
storedUser.setLastName("Administrator");
identityManager.update(storedUser);
storedUser = getUser(storedUser.getLoginName());
assertEquals("admin", storedUser.getLoginName());
assertEquals("The", storedUser.getFirstName());
assertEquals("Administrator", storedUser.getLastName());
assertEquals("admin@jboss.org", storedUser.getEmail());
storedUser.setFirstName("Updated " + storedUser.getFirstName());
storedUser.setLastName("Updated " + storedUser.getLastName());
storedUser.setEmail("Updated " + storedUser.getEmail());
Date actualDate = Calendar.getInstance().getTime();
storedUser.setExpirationDate(actualDate);
identityManager.update(storedUser);
User updatedUser = getUser(storedUser.getLoginName());
assertEquals("Updated The", updatedUser.getFirstName());
assertEquals("Updated Administrator", updatedUser.getLastName());
assertEquals("Updated admin@jboss.org", updatedUser.getEmail());
}
@Test
public void testRemove() throws Exception {
IdentityManager identityManager = getIdentityManager();
User someUser = createUser("admin");
User anotherUser = createUser("someAnotherUser");
identityManager.remove(someUser);
User removedUser = getUser(someUser.getLoginName());
assertNull(removedUser);
anotherUser = getUser(anotherUser.getLoginName());
assertNotNull(anotherUser);
Role role = createRole("role");
Group group = createGroup("group", null);
RelationshipManager relationshipManager = getPartitionManager().createRelationshipManager();
BasicModel.grantRole(relationshipManager, anotherUser, role);
BasicModel.addToGroup(relationshipManager, anotherUser, group);
RelationshipQuery<?> relationshipQuery = relationshipManager.createRelationshipQuery(Grant.class);
relationshipQuery.setParameter(Grant.ASSIGNEE, anotherUser);
assertFalse(relationshipQuery.getResultList().isEmpty());
relationshipQuery = relationshipManager.createRelationshipQuery(GroupMembership.class);
relationshipQuery.setParameter(GroupMembership.MEMBER, anotherUser);
assertFalse(relationshipQuery.getResultList().isEmpty());
identityManager.remove(anotherUser);
relationshipQuery = relationshipManager.createRelationshipQuery(Grant.class);
relationshipQuery.setParameter(Grant.ASSIGNEE, anotherUser);
assertTrue(relationshipQuery.getResultList().isEmpty());
relationshipQuery = relationshipManager.createRelationshipQuery(GroupMembership.class);
relationshipQuery.setParameter(GroupMembership.MEMBER, anotherUser);
assertTrue(relationshipQuery.getResultList().isEmpty());
}
@Test
public void testEqualsMethod() {
User instanceA = createUser("userA");
User instanceB = createUser("userB");
assertFalse(instanceA.equals(instanceB));
IdentityManager identityManager = getIdentityManager();
assertTrue(instanceA.getId().equals(getUser(instanceA.getLoginName()).getId()));
}
@Test
@Configuration(exclude = {LDAPStoreConfigurationTester.class, SingleConfigLDAPJPAStoreConfigurationTester.class})
public void testSetCertificateAsAttribute() {
User mary = createUser("mary");
IdentityManager identityManager = getIdentityManager();
X509Certificate certificate = getTestingCertificate("servercert.txt");
mary.setAttribute(new Attribute<X509Certificate>("certificate", certificate));
identityManager.update(mary);
mary = getUser(mary.getLoginName());
assertNotNull(mary.<X509Certificate>getAttribute("certificate"));
assertEquals(certificate, mary.<X509Certificate>getAttribute("certificate").getValue());
}
@Override
protected User createIdentityType() {
return createUser("admin");
}
@Override
protected User getIdentityType() {
return getUser("admin");
}
private X509Certificate getTestingCertificate(String fromTextFile) {
// Certificate
InputStream bis = getClass().getClassLoader().getResourceAsStream("cert/" + fromTextFile);
X509Certificate cert = null;
try {
CertificateFactory cf = CertificateFactory.getInstance("X.509");
cert = (X509Certificate) cf.generateCertificate(bis);
} catch (Exception e) {
throw new IllegalStateException("Could not load testing certificate.", e);
} finally {
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
}
}
}
return cert;
}
}