/*
* 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.partition;
import org.junit.Test;
import org.picketlink.idm.IdentityManagementException;
import org.picketlink.idm.IdentityManager;
import org.picketlink.idm.RelationshipManager;
import org.picketlink.idm.model.basic.BasicModel;
import org.picketlink.idm.model.basic.Group;
import org.picketlink.idm.model.basic.Realm;
import org.picketlink.idm.model.basic.Role;
import org.picketlink.idm.model.basic.User;
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 static org.junit.Assert.*;
/**
* <p>Test case for the {@link Realm} management operations.</p>
*
* @author Pedro Silva
*
*/
@Configuration(include= {JPAStoreConfigurationTester.class, FileStoreConfigurationTester.class})
public class RealmManagementTestCase extends AbstractPartitionTestCase<Realm> {
private static final String TESTING_REALM_NAME = "PicketLink Realm";
public RealmManagementTestCase(IdentityConfigurationTester builder) {
super(builder);
}
@Override
protected Realm createPartition() {
Realm realm = new Realm(TESTING_REALM_NAME);
if (getPartitionManager().getPartition(realm.getClass(), realm.getName()) != null) {
getPartitionManager().remove(realm);
}
getPartitionManager().add(realm);
return realm;
}
@Override
protected Realm getPartition() {
return getPartitionManager().getPartition(Realm.class, TESTING_REALM_NAME);
}
@Test (expected=IdentityManagementException.class)
public void testUseNonExistentRealm() throws Exception {
IdentityManager identityManager = getPartitionManager().createIdentityManager(new Realm("Not Configured Realm"));
identityManager.add(new User("mary"));
}
@Test
public void testCreateUsers() throws Exception {
Realm realm = createPartition();
User realmUser = createUser("realmUser", realm);
IdentityManager testingRealmManager = getPartitionManager().createIdentityManager(realm);
realmUser = BasicModel.getUser(testingRealmManager, realmUser.getLoginName());
assertNotNull(realmUser);
assertNotNull(realmUser.getPartition());
assertEquals(realm.getId(), realmUser.getPartition().getId());
IdentityManager defaultIdentityManager = getIdentityManager();
// the identitytype should not be associated with the DEFAULT realm
realmUser = BasicModel.getUser(defaultIdentityManager, realmUser.getLoginName());
assertNull(realmUser);
}
@Test
public void testCreateSameUserDifferentRealms() throws Exception {
IdentityManager defaultIdentityManager = getIdentityManager();
User defaultRealmUser = new User("commonName");
defaultIdentityManager.add(defaultRealmUser);
try {
// we can not add this user with the same login name
defaultIdentityManager.add(new User(defaultRealmUser.getLoginName()));
fail();
} catch (IdentityManagementException e) {
}
defaultRealmUser = BasicModel.getUser(defaultIdentityManager, defaultRealmUser.getLoginName());
assertNotNull(defaultRealmUser);
Realm realm = createPartition();
User testingRealmUser = createUser("commonName", realm);
IdentityManager testingRealmManager = getPartitionManager().createIdentityManager(realm);
testingRealmUser = BasicModel.getUser(testingRealmManager, testingRealmUser.getLoginName());
assertNotNull(testingRealmUser);
assertFalse(defaultRealmUser.getId().equals(testingRealmUser.getId()));
}
@Test
public void testCreateSameRoleDifferentRealms() throws Exception {
IdentityManager defaultIdentityManager = getIdentityManager();
Role defaultRealmRole = new Role("commonName");
defaultIdentityManager.add(defaultRealmRole);
try {
// we can not add this role with the same name
defaultIdentityManager.add(new Role(defaultRealmRole.getName()));
fail();
} catch (Exception e) {
}
defaultRealmRole = BasicModel.getRole(defaultIdentityManager, defaultRealmRole.getName());
assertNotNull(defaultRealmRole);
Realm realm = createPartition();
Role testingRealmRole = createRole("commonName", realm);
// get a IdentityManager instance for the given realm and associate the Role with the realm
IdentityManager testingRealmManager = getPartitionManager().createIdentityManager(realm);
testingRealmRole = BasicModel.getRole(testingRealmManager, testingRealmRole.getName());
assertNotNull(testingRealmRole);
assertFalse(defaultRealmRole.getId().equals(testingRealmRole.getId()));
}
@Test
public void testCreateSameGroupDifferentRealms() throws Exception {
IdentityManager defaultIdentityManager = getIdentityManager();
Group defaultRealmGroup = new Group("commonName");
defaultIdentityManager.add(defaultRealmGroup);
try {
// we can not add this user with the same name or path
defaultIdentityManager.add(new Group(defaultRealmGroup.getName()));
fail();
} catch (Exception e) {
}
defaultRealmGroup = BasicModel.getGroup(defaultIdentityManager, defaultRealmGroup.getName());
assertNotNull(defaultRealmGroup);
Realm realm = createPartition();
Group testingRealmGroup = createGroup("commonName", null, realm);
// get a IdentityManager instance for the given realm and associate the Group with the realm
IdentityManager testingRealmManager = getPartitionManager().createIdentityManager(realm);
testingRealmGroup = BasicModel.getGroup(testingRealmManager, testingRealmGroup.getName());
assertNotNull(testingRealmGroup);
assertFalse(defaultRealmGroup.getId().equals(testingRealmGroup.getId()));
}
@Test
public void testCreateRoles() throws Exception {
Realm realm = createPartition();
Role testingRole = createRole("testingRole", realm);
testingRole = BasicModel.getRole(getPartitionManager().createIdentityManager(realm), testingRole.getName());
assertNotNull(testingRole);
assertNotNull(testingRole.getPartition());
assertEquals(realm.getId(), testingRole.getPartition().getId());
IdentityManager defaultIdentityManager = getIdentityManager();
// the identitytype should not be associated with the DEFAULT realm
testingRole = BasicModel.getRole(defaultIdentityManager, testingRole.getName());
assertNull(testingRole);
}
@Test
public void testCreateGroups() throws Exception {
Realm realm = createPartition();
Group testingGroup = createGroup("testingRealmGroup", null, realm);
testingGroup = BasicModel.getGroup(getPartitionManager().createIdentityManager(realm), testingGroup.getName());
assertNotNull(testingGroup);
assertNotNull(testingGroup.getPartition());
assertEquals(realm.getId(), testingGroup.getPartition().getId());
IdentityManager defaultIdentityManager = getIdentityManager();
// the identitytype should not be associated with the DEFAULT realm
testingGroup = BasicModel.getGroup(defaultIdentityManager, testingGroup.getName());
assertNull(testingGroup);
}
@Test
public void testRelationships() throws Exception {
User defaultRealmUser = new User("defaultRealmUser");
Role defaultRealmRole = new Role("defaultRealmRole");
Group defaultRealmGroup = new Group("defaultRealmGroup");
IdentityManager defaultIdentityManager = getIdentityManager();
defaultIdentityManager.add(defaultRealmUser);
defaultIdentityManager.add(defaultRealmRole);
defaultIdentityManager.add(defaultRealmGroup);
RelationshipManager relationshipManager = getPartitionManager().createRelationshipManager();
BasicModel.grantRole(relationshipManager, defaultRealmUser, defaultRealmRole);
BasicModel.addToGroup(relationshipManager, defaultRealmUser, defaultRealmGroup);
BasicModel.grantGroupRole(relationshipManager, defaultRealmUser, defaultRealmRole, defaultRealmGroup);
assertTrue(BasicModel.hasRole(relationshipManager, defaultRealmUser, defaultRealmRole));
assertTrue(BasicModel.isMember(relationshipManager, defaultRealmUser, defaultRealmGroup));
assertTrue(BasicModel.hasGroupRole(relationshipManager, defaultRealmUser, defaultRealmRole, defaultRealmGroup));
Realm realm = getPartitionManager().getPartition(Realm.class, TESTING_REALM_NAME);
User testingRealmUser = createUser("testingRealmUser", realm);
Role testingRealmRole = createRole("testingRealmRole", realm);
Group testingRealmGroup = createGroup("testingRealmGroup", null, realm);
BasicModel.grantRole(relationshipManager, testingRealmUser, testingRealmRole);
BasicModel.addToGroup(relationshipManager, testingRealmUser, testingRealmGroup);
BasicModel.grantGroupRole(relationshipManager, testingRealmUser, testingRealmRole, testingRealmGroup);
assertTrue(BasicModel.hasRole(relationshipManager, testingRealmUser, testingRealmRole));
assertTrue(BasicModel.isMember(relationshipManager, testingRealmUser, testingRealmGroup));
assertTrue(BasicModel.hasGroupRole(relationshipManager, testingRealmUser, testingRealmRole, testingRealmGroup));
assertFalse(BasicModel.hasRole(relationshipManager, defaultRealmUser, testingRealmRole));
assertFalse(BasicModel.hasRole(relationshipManager, testingRealmUser, defaultRealmRole));
assertFalse(BasicModel.isMember(relationshipManager, defaultRealmUser, testingRealmGroup));
assertFalse(BasicModel.isMember(relationshipManager, testingRealmUser, defaultRealmGroup));
assertFalse(BasicModel.hasGroupRole(relationshipManager, defaultRealmUser, testingRealmRole, defaultRealmGroup));
assertFalse(BasicModel.hasGroupRole(relationshipManager, testingRealmUser, defaultRealmRole, testingRealmGroup));
}
}