/* * 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.query; import org.junit.Test; import org.picketlink.idm.RelationshipManager; import org.picketlink.idm.model.Attribute; import org.picketlink.idm.model.AttributedType; import org.picketlink.idm.model.Relationship; 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.Role; import org.picketlink.idm.model.basic.User; import org.picketlink.idm.query.RelationshipQuery; 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.LDAPStoreConfigurationTester; import org.picketlink.test.idm.testers.LDAPUserGroupJPARoleConfigurationTester; import org.picketlink.test.idm.testers.SingleConfigLDAPJPAStoreConfigurationTester; import java.util.List; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.picketlink.test.idm.relationship.CustomRelationshipTestCase.CustomRelationship; /** * @author Pedro Silva * */ @Configuration(include= {JPAStoreConfigurationTester.class, FileStoreConfigurationTester.class, SingleConfigLDAPJPAStoreConfigurationTester.class, LDAPStoreConfigurationTester.class, LDAPUserGroupJPARoleConfigurationTester.class}) public class RelationshipQueryTestCase extends AbstractPartitionManagerTestCase { public RelationshipQueryTestCase(IdentityConfigurationTester builder) { super(builder); } @Test @Configuration (exclude = {LDAPStoreConfigurationTester.class, LDAPUserGroupJPARoleConfigurationTester.class}) public void testFindById() throws Exception { User user = createUser("user"); Role role = createRole("role"); Group group = createGroup("group"); RelationshipManager relationshipManager = getPartitionManager().createRelationshipManager(); Grant grant = new Grant(user, role); relationshipManager.add(grant); GroupMembership groupMembership = new GroupMembership(); groupMembership.setGroup(group); groupMembership.setMember(user); relationshipManager.add(groupMembership); RelationshipQuery<? extends Relationship> query = relationshipManager.createRelationshipQuery(Relationship .class); query.setParameter(Relationship.ID, grant.getId()); List<? extends Relationship> result = query.getResultList(); assertFalse(result.isEmpty()); assertEquals(1, result.size()); assertEquals(grant.getId(), result.get(0).getId()); query = relationshipManager.createRelationshipQuery(GroupMembership.class); query.setParameter(Relationship.ID, groupMembership.getId()); result = query.getResultList(); assertFalse(result.isEmpty()); assertEquals(1, result.size()); assertEquals(groupMembership.getId(), result.get(0).getId()); query = relationshipManager.createRelationshipQuery(Grant.class); query.setParameter(Relationship.ID, groupMembership.getId()); result = query.getResultList(); assertTrue(result.isEmpty()); } @Test @Configuration (exclude = LDAPStoreConfigurationTester.class) public void testFindGrantRelationshipId() throws Exception { User user = createUser("user"); Role role = createRole("role"); Group group = createGroup("group"); RelationshipManager relationshipManager = getPartitionManager().createRelationshipManager(); Grant grant = new Grant(user, role); relationshipManager.add(grant); RelationshipQuery<? extends Relationship> query = relationshipManager.createRelationshipQuery(Relationship .class); query.setParameter(Relationship.ID, grant.getId()); List<? extends Relationship> result = query.getResultList(); assertFalse(result.isEmpty()); assertEquals(1, result.size()); assertEquals(grant.getId(), result.get(0).getId()); } @Test public void testFindAllRelationshipsForUser() throws Exception { User user = createUser("user"); Role role = createRole("role"); Group group = createGroup("group"); RelationshipManager relationshipManager = getPartitionManager().createRelationshipManager(); BasicModel.grantRole(relationshipManager, user, role); BasicModel.addToGroup(relationshipManager, user, group); RelationshipQuery<Relationship> query = relationshipManager.createRelationshipQuery(Relationship.class); query.setParameter(Relationship.IDENTITY, user); List<Relationship> result = query.getResultList(); assertFalse(result.isEmpty()); assertEquals(2, result.size()); query = relationshipManager.createRelationshipQuery(Relationship.class); query.setParameter(Relationship.IDENTITY, role); result = query.getResultList(); assertFalse(result.isEmpty()); assertEquals(1, result.size()); query = relationshipManager.createRelationshipQuery(Relationship.class); query.setParameter(Relationship.IDENTITY, group); result = query.getResultList(); assertFalse(result.isEmpty()); assertEquals(1, result.size()); query = relationshipManager.createRelationshipQuery(Relationship.class); query.setParameter(Relationship.IDENTITY, user); result = query.getResultList(); assertFalse(result.isEmpty()); assertEquals(2, result.size()); } @Test @Configuration(exclude = LDAPStoreConfigurationTester.class) public void testFindByAttributes() throws Exception { User someUser = createUser("someUser"); Role someRole = createRole("someRole"); Grant grant = new Grant(someUser, someRole); RelationshipManager relationshipManager = getPartitionManager().createRelationshipManager(); relationshipManager.add(grant); RelationshipQuery<Grant> query = relationshipManager.createRelationshipQuery(Grant.class); query.setParameter(AttributedType.QUERY_ATTRIBUTE.byName("attribute1"), "1"); List<Grant> result = query.getResultList(); assertTrue(result.isEmpty()); grant.setAttribute(new Attribute<String>("attribute1", "1")); grant.setAttribute(new Attribute<String[]>("attribute2", new String[]{"1", "2", "3"})); relationshipManager.update(grant); result = query.getResultList(); assertEquals(1, result.size()); assertEquals(grant.getId(), result.get(0).getId()); grant = result.get(0); assertEquals(someUser.getId(), grant.getAssignee().getId()); assertEquals(someRole.getId(), grant.getRole().getId()); query = relationshipManager.createRelationshipQuery(Grant.class); query.setParameter(AttributedType.QUERY_ATTRIBUTE.byName("attribute1"), "2"); result = query.getResultList(); assertTrue(result.isEmpty()); query = relationshipManager.createRelationshipQuery(Grant.class); query.setParameter(AttributedType.QUERY_ATTRIBUTE.byName("attribute3"), "2"); result = query.getResultList(); assertTrue(result.isEmpty()); query = relationshipManager.createRelationshipQuery(Grant.class); query.setParameter(AttributedType.QUERY_ATTRIBUTE.byName("attribute2"), "1", "2", "3"); result = query.getResultList(); assertFalse(result.isEmpty()); } @Test @Configuration (exclude = LDAPStoreConfigurationTester.class) public void testFormalAttributes() throws Exception { CustomRelationship relationship = new CustomRelationship(); User user = createUser("user"); relationship.setIdentityTypeA(user); Role role = createRole("role"); relationship.setIdentityTypeB(role); Group group = createGroup("group"); relationship.setIdentityTypeC(group); relationship.setAttributeA("Value for A"); relationship.setAttributeB(99l); relationship.setAttributeC(true); RelationshipManager relationshipManager = getPartitionManager().createRelationshipManager(); relationshipManager.add(relationship); RelationshipQuery<CustomRelationship> query = relationshipManager.createRelationshipQuery(CustomRelationship.class); query.setParameter(CustomRelationship.ID, relationship.getId()); List<CustomRelationship> result = query.getResultList(); assertFalse(result.isEmpty()); assertEquals(1, result.size()); assertEquals(relationship.getId(), result.get(0).getId()); assertEquals(relationship.getAttributeA(), result.get(0).getAttributeA()); assertEquals(relationship.getAttributeB(), result.get(0).getAttributeB()); assertEquals(relationship.isAttributeC(), result.get(0).isAttributeC()); query = relationshipManager.createRelationshipQuery(CustomRelationship.class); query.setParameter(CustomRelationship.QUERY_ATTRIBUTE.byName("attributeA"), "Value for A"); result = query.getResultList(); assertFalse(result.isEmpty()); assertEquals(1, result.size()); assertEquals(relationship.getId(), result.get(0).getId()); assertEquals(relationship.getAttributeA(), result.get(0).getAttributeA()); query = relationshipManager.createRelationshipQuery(CustomRelationship.class); query.setParameter(CustomRelationship.QUERY_ATTRIBUTE.byName("attributeA"), "Invalid Value for A"); result = query.getResultList(); assertTrue(result.isEmpty()); query = relationshipManager.createRelationshipQuery(CustomRelationship.class); query.setParameter(CustomRelationship.QUERY_ATTRIBUTE.byName("attributeB"), 99l); result = query.getResultList(); assertFalse(result.isEmpty()); assertEquals(1, result.size()); assertEquals(relationship.getId(), result.get(0).getId()); assertEquals(relationship.getAttributeB(), result.get(0).getAttributeB()); query = relationshipManager.createRelationshipQuery(CustomRelationship.class); query.setParameter(CustomRelationship.QUERY_ATTRIBUTE.byName("attributeC"), false); result = query.getResultList(); assertTrue(result.isEmpty()); query = relationshipManager.createRelationshipQuery(CustomRelationship.class); query.setParameter(CustomRelationship.QUERY_ATTRIBUTE.byName("attributeC"), true); result = query.getResultList(); assertFalse(result.isEmpty()); assertEquals(1, result.size()); assertEquals(relationship.getId(), result.get(0).getId()); assertEquals(relationship.isAttributeC(), result.get(0).isAttributeC()); } }