/*
* JBoss, Home of Professional Open Source.
* Copyright 2012, Red Hat, Inc., and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.picketlink.test.idm.config;
import org.junit.Test;
import org.picketlink.idm.IdentityManagementException;
import org.picketlink.idm.IdentityManager;
import org.picketlink.idm.PartitionManager;
import org.picketlink.idm.config.IdentityConfigurationBuilder;
import org.picketlink.idm.config.OperationNotSupportedException;
import org.picketlink.idm.config.SecurityConfigurationException;
import org.picketlink.idm.credential.Password;
import org.picketlink.idm.internal.DefaultPartitionManager;
import org.picketlink.idm.jpa.model.sample.simple.AccountTypeEntity;
import org.picketlink.idm.jpa.model.sample.simple.AttributeTypeEntity;
import org.picketlink.idm.jpa.model.sample.simple.GroupTypeEntity;
import org.picketlink.idm.jpa.model.sample.simple.IdentityTypeEntity;
import org.picketlink.idm.jpa.model.sample.simple.PartitionTypeEntity;
import org.picketlink.idm.jpa.model.sample.simple.PasswordCredentialTypeEntity;
import org.picketlink.idm.jpa.model.sample.simple.RelationshipIdentityTypeEntity;
import org.picketlink.idm.jpa.model.sample.simple.RelationshipTypeEntity;
import org.picketlink.idm.jpa.model.sample.simple.RoleTypeEntity;
import org.picketlink.idm.model.IdentityType;
import org.picketlink.idm.model.Partition;
import org.picketlink.idm.model.Relationship;
import org.picketlink.idm.model.basic.Grant;
import org.picketlink.idm.model.basic.Realm;
import org.picketlink.idm.model.basic.Role;
import org.picketlink.idm.model.basic.User;
import static org.junit.Assert.assertEquals;
import static org.picketlink.test.idm.partition.CustomPartitionTestCase.CustomPartition;
/**
* <p>
* Test case for the Configuration API.
* </p>
*
* @author Pedro Silva
*
*/
public class ConfigurationTestCase {
@Test (expected = SecurityConfigurationException.class)
public void failNoIdentityStoreProvided() {
IdentityConfigurationBuilder builder = new IdentityConfigurationBuilder();
builder.named("default").stores();
builder.build();
}
@Test (expected = SecurityConfigurationException.class)
public void failNoSupportedTypeProvided() {
IdentityConfigurationBuilder builder = new IdentityConfigurationBuilder();
builder.named("default").stores().file();
builder.build();
}
@Test (expected = SecurityConfigurationException.class)
public void failMultipleConfigurationWithBuildMethod() {
IdentityConfigurationBuilder builder = new IdentityConfigurationBuilder();
builder
.named("default")
.stores()
.file()
.supportAllFeatures()
.named("anotherName")
.stores()
.file()
.supportAllFeatures();
builder.build();
}
@Test (expected = SecurityConfigurationException.class)
public void failMultipleConfigurationWithPartitions() {
IdentityConfigurationBuilder builder = new IdentityConfigurationBuilder();
builder
.named("default")
.stores()
.file()
.supportType(CustomPartition.class)
.jpa()
.supportType(Partition.class)
.mappedEntity(IdentityTypeEntity.class)
.supportAllFeatures();
builder.buildAll();
}
@Test (expected = SecurityConfigurationException.class)
public void failMultipleConfigurationWithCredentialSupport() {
IdentityConfigurationBuilder builder = new IdentityConfigurationBuilder();
builder
.named("default")
.stores()
.file()
.supportType(Partition.class)
.supportCredentials(true)
.jpa()
.mappedEntity(IdentityTypeEntity.class)
.supportCredentials(true)
.supportType(IdentityType.class);
builder.buildAll();
}
@Test (expected = IdentityManagementException.class)
public void failNoIdentityType() {
IdentityConfigurationBuilder builder = new IdentityConfigurationBuilder();
builder
.named("default")
.stores()
.file()
.supportType(Partition.class);
PartitionManager partitionManager = new DefaultPartitionManager(builder.buildAll());
partitionManager.add(new Realm(Realm.DEFAULT_REALM));
IdentityManager identityManager = partitionManager.createIdentityManager();
identityManager.add(new User("someUser"));
}
@Test (expected = OperationNotSupportedException.class)
public void failNoPartitionSupport() {
IdentityConfigurationBuilder builder = new IdentityConfigurationBuilder();
builder
.named("default")
.stores()
.file()
.supportType(IdentityType.class);
PartitionManager partitionManager = new DefaultPartitionManager(builder.buildAll());
partitionManager.add(new Realm(Realm.DEFAULT_REALM));
}
@Test (expected = IdentityManagementException.class)
public void failNoCredentialSupport() {
IdentityConfigurationBuilder builder = new IdentityConfigurationBuilder();
builder
.named("default")
.stores()
.file()
.supportType(Partition.class)
.supportType(IdentityType.class);
PartitionManager partitionManager = new DefaultPartitionManager(builder.buildAll());
partitionManager.add(new Realm(Realm.DEFAULT_REALM));
IdentityManager identityManager = partitionManager.createIdentityManager();
User user = new User("someUser");
identityManager.add(user);
identityManager.updateCredential(user, new Password("abcd1234"));
}
@Test (expected = SecurityConfigurationException.class)
public void failMultipleIdentityStoreWithCredentialSupport() {
IdentityConfigurationBuilder builder = new IdentityConfigurationBuilder();
builder
.named("default")
.stores()
.file()
.supportCredentials(true)
.supportType(Partition.class)
.supportType(IdentityType.class)
.jpa()
.supportCredentials(true)
.supportType(Relationship.class);
new DefaultPartitionManager(builder.buildAll());
}
@Test
public void testMultipleIdentityStoreWithValidCredentialSupport() {
IdentityConfigurationBuilder builder = new IdentityConfigurationBuilder();
builder
.named("default")
.stores()
.file()
.supportCredentials(true)
.supportType(Partition.class)
.supportType(User.class)
.jpa()
.mappedEntity(
PartitionTypeEntity.class,
RoleTypeEntity.class,
GroupTypeEntity.class,
IdentityTypeEntity.class,
RelationshipTypeEntity.class,
RelationshipIdentityTypeEntity.class,
PasswordCredentialTypeEntity.class,
AttributeTypeEntity.class,
AccountTypeEntity.class
)
.supportCredentials(false)
.supportType(Relationship.class);
new DefaultPartitionManager(builder.buildAll());
}
@Test
public void testMoreNamedCalls() {
IdentityConfigurationBuilder builder = new IdentityConfigurationBuilder();
builder
.named("default")
.stores()
.file()
.supportAllFeatures()
.named("default")
.stores()
.file()
.supportAllFeatures();
assertEquals(builder.buildAll().size(), 1);
}
@Test (expected = SecurityConfigurationException.class)
public void failDuplicatedSupportedType() {
IdentityConfigurationBuilder builder = new IdentityConfigurationBuilder();
builder
.named("default")
.stores()
.file()
.supportType(User.class, Partition.class)
.supportCredentials(false)
.jpa()
.mappedEntity(IdentityTypeEntity.class)
.supportType(User.class);
builder.buildAll();
}
@Test (expected = SecurityConfigurationException.class)
public void failInvalidSupportedTypeConfiguration() {
IdentityConfigurationBuilder builder = new IdentityConfigurationBuilder();
builder
.named("default")
.stores()
.file()
.supportType(Role.class)
.supportCredentials(false)
.jpa()
.mappedEntity(IdentityTypeEntity.class)
.supportType(IdentityType.class);
builder.buildAll();
}
@Test (expected = SecurityConfigurationException.class)
public void failInvalidSupportedRelationshipTypeConfiguration() {
IdentityConfigurationBuilder builder = new IdentityConfigurationBuilder();
builder
.named("default")
.stores()
.file()
.supportType(Relationship.class)
.supportCredentials(false)
.jpa()
.supportType(Grant.class)
.mappedEntity(IdentityTypeEntity.class);
builder.buildAll();
}
}