package org.picketlink.test.idm.usecases; import org.junit.Test; import org.picketlink.idm.PartitionManager; import org.picketlink.idm.config.IdentityConfigurationBuilder; import org.picketlink.idm.internal.DefaultPartitionManager; import org.picketlink.idm.model.Attribute; 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 java.io.Serializable; import java.util.List; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; /** * Created with IntelliJ IDEA. User: pedroigor Date: 8/6/13 Time: 7:32 PM To change this template use File | Settings | * File Templates. */ public class FileStorePreservingStateTestCase { public static final String REALM_A = "Realm A"; public static final String REALM_B = "Realm B"; public static final String REALM_C = "Realm C"; @Test public void testPreserveState() { IdentityConfigurationBuilder builder = new IdentityConfigurationBuilder(); builder .named("file-store-preserve-state") .stores() .file() .workingDirectory("/tmp/teste") .supportAllFeatures(); PartitionManager partitionManager = new DefaultPartitionManager(builder.buildAll()); Realm realmA = new Realm(REALM_A); partitionManager.add(realmA); Realm realmB = new Realm(REALM_B); partitionManager.add(realmB); Realm realmC = new Realm(REALM_C); partitionManager.add(realmC); User userA = new User("User Realm A"); partitionManager.createIdentityManager(realmA).add(userA); User userB = new User("User Realm B"); partitionManager.createIdentityManager(realmB).add(userB); User userC = new User("User Realm C"); partitionManager.createIdentityManager(realmC).add(userC); builder = new IdentityConfigurationBuilder(); builder .named("file-store-preserve-state") .stores() .file() .preserveState(true) .workingDirectory("/tmp/teste") .supportAllFeatures(); partitionManager = new DefaultPartitionManager(builder.buildAll()); Realm storedRealmA = partitionManager.getPartition(Realm.class, REALM_A); Realm storedRealmB = partitionManager.getPartition(Realm.class, REALM_B); Realm storedRealmC = partitionManager.getPartition(Realm.class, REALM_C); assertEquals(realmA.getId(), storedRealmA.getId()); assertEquals(realmB.getId(), storedRealmB.getId()); assertEquals(realmC.getId(), storedRealmC.getId()); storedRealmA.setAttribute(new Attribute<Serializable>("someAttribute", "1")); storedRealmB.setAttribute(new Attribute<Serializable>("someAttribute", "2")); storedRealmC.setAttribute(new Attribute<Serializable>("someAttribute", "3")); partitionManager.update(storedRealmA); partitionManager.update(storedRealmB); partitionManager.update(storedRealmC); builder = new IdentityConfigurationBuilder(); builder .named("file-store-preserve-state") .stores() .file() .preserveState(true) .workingDirectory("/tmp/teste") .supportAllFeatures(); partitionManager = new DefaultPartitionManager(builder.buildAll()); storedRealmA = partitionManager.getPartition(Realm.class, REALM_A); storedRealmB = partitionManager.getPartition(Realm.class, REALM_B); storedRealmC = partitionManager.getPartition(Realm.class, REALM_C); assertEquals(storedRealmA.getAttribute("someAttribute").getValue(), "1"); assertEquals(storedRealmB.getAttribute("someAttribute").getValue(), "2"); assertEquals(storedRealmC.getAttribute("someAttribute").getValue(), "3"); User storedUserA = partitionManager.createIdentityManager(storedRealmA).createIdentityQuery(User.class) .setParameter(User.LOGIN_NAME, "User Realm A").getResultList().get(0); User storedUserB = partitionManager.createIdentityManager(storedRealmB).createIdentityQuery(User.class) .setParameter(User.LOGIN_NAME, "User Realm B").getResultList().get(0); User storedUserC = partitionManager.createIdentityManager(storedRealmC).createIdentityQuery(User.class) .setParameter(User.LOGIN_NAME, "User Realm C").getResultList().get(0); assertEquals(userA.getId(), storedUserA.getId()); assertEquals(userB.getId(), storedUserB.getId()); assertEquals(userC.getId(), storedUserC.getId()); storedUserA.setAttribute(new Attribute<Serializable>("userAttribute", "1")); storedUserB.setAttribute(new Attribute<Serializable>("userAttribute", "2")); storedUserC.setAttribute(new Attribute<Serializable>("userAttribute", "3")); partitionManager.createIdentityManager(storedRealmA).update(storedUserA); partitionManager.createIdentityManager(storedRealmB).update(storedUserB); partitionManager.createIdentityManager(storedRealmC).update(storedUserC); storedUserA = partitionManager.createIdentityManager(storedRealmA).createIdentityQuery(User.class) .setParameter(User.LOGIN_NAME, "User Realm A").getResultList().get(0); storedUserB = partitionManager.createIdentityManager(storedRealmB).createIdentityQuery(User.class) .setParameter(User.LOGIN_NAME, "User Realm B").getResultList().get(0); storedUserC = partitionManager.createIdentityManager(storedRealmC).createIdentityQuery(User.class) .setParameter(User.LOGIN_NAME, "User Realm C").getResultList().get(0); assertEquals(storedUserA.getAttribute("userAttribute").getValue(), "1"); assertEquals(storedUserB.getAttribute("userAttribute").getValue(), "2"); assertEquals(storedUserC.getAttribute("userAttribute").getValue(), "3"); builder .named("file-store-preserve-state") .stores() .file() .preserveState(true) .workingDirectory("/tmp/teste") .supportAllFeatures(); storedRealmA = partitionManager.getPartition(Realm.class, REALM_A); Role roleA = new Role("Role A"); partitionManager.createIdentityManager(storedRealmA).add(roleA); partitionManager.createRelationshipManager().add(new Grant(storedUserA, roleA)); builder .named("file-store-preserve-state") .stores() .file() .preserveState(true) .workingDirectory("/tmp/teste") .supportAllFeatures(); storedRealmA = partitionManager.getPartition(Realm.class, REALM_A); Role storedRoleA = partitionManager.createIdentityManager(storedRealmA).createIdentityQuery(Role.class) .setParameter(Role.NAME, "Role A").getResultList().get(0); assertNotNull(storedRoleA); List<Grant> result = partitionManager.createRelationshipManager().createRelationshipQuery(Grant.class) .setParameter(Grant.ASSIGNEE, storedUserA) .setParameter(Grant.ROLE, storedRoleA).getResultList(); assertFalse(result.isEmpty()); } }