package org.picketlink.test.idm.partition;
import org.junit.Test;
import org.picketlink.idm.IdentityManager;
import org.picketlink.idm.PartitionManager;
import org.picketlink.idm.RelationshipManager;
import org.picketlink.idm.model.Partition;
import org.picketlink.idm.model.basic.BasicModel;
import org.picketlink.idm.model.basic.Realm;
import org.picketlink.idm.model.basic.Role;
import org.picketlink.idm.model.basic.Tier;
import org.picketlink.idm.model.basic.User;
import org.picketlink.test.idm.AbstractPartitionManagerTestCase;
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.LDAPUserGroupJPARoleConfigurationTester;
import java.util.List;
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;
/**
* @author Pedro Igor
*/
@Configuration(include= {JPAStoreConfigurationTester.class, FileStoreConfigurationTester.class, LDAPUserGroupJPARoleConfigurationTester.class})
public class PartitionManagementTestCase extends AbstractPartitionManagerTestCase {
public PartitionManagementTestCase(final IdentityConfigurationTester visitor) {
super(visitor);
}
@Test
public void testGetAllPartitions() {
PartitionManager partitionManager = getPartitionManager();
Realm realmA = new Realm("Realm A");
Realm realmB = new Realm("Realm B");
partitionManager.add(realmA);
partitionManager.add(realmB);
Tier tierA = new Tier("Tier A");
Tier tierB = new Tier("Tier B");
Tier tierC = new Tier("Tier C");
partitionManager.add(tierA);
partitionManager.add(tierB);
partitionManager.add(tierC);
List<Partition> partitions = partitionManager.getPartitions(Partition.class);
assertFalse(partitions.isEmpty());
// 6 because we have the default partition
assertEquals(6, partitions.size());
}
@Test
public void testLookupById() {
PartitionManager partitionManager = getPartitionManager();
Realm realmA = new Realm("Realm A");
partitionManager.add(realmA);
Tier tierA = new Tier("Tier A");
partitionManager.add(tierA);
Realm lookedUpRealmA = partitionManager.lookupById(Realm.class, realmA.getId());
assertNotNull(lookedUpRealmA.getId());
assertEquals(realmA.getId(), lookedUpRealmA.getId());
Tier lookedUpTierA = partitionManager.lookupById(Tier.class, tierA.getId());
assertNotNull(lookedUpTierA.getId());
assertEquals(tierA.getId(), lookedUpTierA.getId());
assertNull(partitionManager.lookupById(Tier.class, realmA.getId()));
}
@Test
@Configuration (exclude = {LDAPUserGroupJPARoleConfigurationTester.class})
public void testRemovePartitionWithIdentityTypes() {
PartitionManager partitionManager = getPartitionManager();
Realm somePartition = new Realm("somePartition");
partitionManager.add(somePartition);
IdentityManager identityManager = partitionManager.createIdentityManager(somePartition);
User userA = new User("userA");
identityManager.add(userA);
User userB = new User("userB");
identityManager.add(userB);
User userC = new User("userC");
identityManager.add(userC);
assertNotNull(BasicModel.getUser(identityManager, userA.getLoginName()));
assertNotNull(BasicModel.getUser(identityManager, userB.getLoginName()));
assertNotNull(BasicModel.getUser(identityManager, userC.getLoginName()));
Role roleA = new Role("roleA");
identityManager.add(roleA);
Role roleB = new Role("roleB");
identityManager.add(roleB);
Role roleC = new Role("roleC");
identityManager.add(roleC);
assertNotNull(BasicModel.getRole(identityManager, roleA.getName()));
assertNotNull(BasicModel.getRole(identityManager, roleB.getName()));
assertNotNull(BasicModel.getRole(identityManager, roleC.getName()));
RelationshipManager relationshipManager = partitionManager.createRelationshipManager();
BasicModel.grantRole(relationshipManager, userA, roleA);
BasicModel.grantRole(relationshipManager, userB, roleB);
BasicModel.grantRole(relationshipManager, userC, roleC);
assertTrue(BasicModel.hasRole(relationshipManager, userA, roleA));
assertTrue(BasicModel.hasRole(relationshipManager, userB, roleB));
assertTrue(BasicModel.hasRole(relationshipManager, userC, roleC));
partitionManager.remove(somePartition);
new Realm("somePartition");
partitionManager.add(somePartition);
identityManager = partitionManager.createIdentityManager(somePartition);
assertNull(BasicModel.getUser(identityManager, userA.getLoginName()));
assertNull(BasicModel.getUser(identityManager, userB.getLoginName()));
assertNull(BasicModel.getUser(identityManager, userC.getLoginName()));
}
@Test
public void testRemovePartitionWithRoles() {
PartitionManager partitionManager = getPartitionManager();
Realm somePartition = new Realm("somePartition");
partitionManager.add(somePartition);
IdentityManager identityManager = partitionManager.createIdentityManager(somePartition);
User userA = new User("userA");
identityManager.add(userA);
User userB = new User("userB");
identityManager.add(userB);
User userC = new User("userC");
identityManager.add(userC);
assertNotNull(BasicModel.getUser(identityManager, userA.getLoginName()));
assertNotNull(BasicModel.getUser(identityManager, userB.getLoginName()));
assertNotNull(BasicModel.getUser(identityManager, userC.getLoginName()));
Role roleA = new Role("roleA");
identityManager.add(roleA);
Role roleB = new Role("roleB");
identityManager.add(roleB);
Role roleC = new Role("roleC");
identityManager.add(roleC);
assertNotNull(BasicModel.getRole(identityManager, roleA.getName()));
assertNotNull(BasicModel.getRole(identityManager, roleB.getName()));
assertNotNull(BasicModel.getRole(identityManager, roleC.getName()));
RelationshipManager relationshipManager = partitionManager.createRelationshipManager();
BasicModel.grantRole(relationshipManager, userA, roleA);
BasicModel.grantRole(relationshipManager, userB, roleB);
BasicModel.grantRole(relationshipManager, userC, roleC);
assertTrue(BasicModel.hasRole(relationshipManager, userA, roleA));
assertTrue(BasicModel.hasRole(relationshipManager, userB, roleB));
assertTrue(BasicModel.hasRole(relationshipManager, userC, roleC));
partitionManager.remove(somePartition);
partitionManager.add(somePartition);
identityManager = partitionManager.createIdentityManager(somePartition);
assertNull(BasicModel.getRole(identityManager, roleA.getName()));
assertNull(BasicModel.getRole(identityManager, roleB.getName()));
assertNull(BasicModel.getRole(identityManager, roleC.getName()));
}
}