/*
* 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.basic;
import org.junit.Test;
import org.picketlink.idm.IdentityManager;
import org.picketlink.idm.RelationshipManager;
import org.picketlink.idm.model.Attribute;
import org.picketlink.idm.model.basic.Agent;
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.Realm;
import org.picketlink.idm.model.basic.Role;
import org.picketlink.idm.query.RelationshipQuery;
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.SingleConfigLDAPJPAStoreConfigurationTester;
import java.util.Date;
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;
/**
* <p>
* Test case for the {@link Agent} basic management operations using only the default realm.
* </p>
*
* @author <a href="mailto:psilva@redhat.com">Pedro Silva</a>
*/
@Configuration(include = {JPAStoreConfigurationTester.class, FileStoreConfigurationTester.class,
LDAPStoreConfigurationTester.class, SingleConfigLDAPJPAStoreConfigurationTester.class})
public class AgentManagementTestCase extends AbstractIdentityTypeTestCase<Agent> {
public AgentManagementTestCase(IdentityConfigurationTester builder) {
super(builder);
}
@Test
public void testCreate() throws Exception {
Agent newAgent = createIdentityType();
Agent storedAgent = getAgent(newAgent.getLoginName());
assertNotNull(storedAgent);
assertEquals(newAgent.getId(), storedAgent.getId());
assertEquals(newAgent.getLoginName(), storedAgent.getLoginName());
assertTrue(storedAgent.isEnabled());
assertNotNull(storedAgent.getPartition());
assertEquals(Realm.DEFAULT_REALM, storedAgent.getPartition().getName());
assertTrue(storedAgent.isEnabled());
assertNull(storedAgent.getExpirationDate());
assertNotNull(storedAgent.getCreatedDate());
assertTrue(new Date().compareTo(storedAgent.getCreatedDate()) >= 0);
}
@Test
@Configuration(exclude = {LDAPStoreConfigurationTester.class})
public void testUpdate() throws Exception {
Agent storedAgent = createIdentityType();
IdentityManager identityManager = getIdentityManager();
Date actualDate = new Date();
storedAgent.setExpirationDate(actualDate);
storedAgent.setAttribute(new Attribute<String>("someAttribute", "1"));
identityManager.update(storedAgent);
Agent updatedUser = getAgent(storedAgent.getLoginName());
assertNotNull(updatedUser.getAttribute("someAttribute"));
assertEquals("1", updatedUser.getAttribute("someAttribute").getValue());
}
@Test
public void testRemove() throws Exception {
IdentityManager identityManager = getIdentityManager();
Agent someAgent = createIdentityType();
Agent anotherAgent = createAgent("someAnotherAgent");
identityManager.remove(someAgent);
Agent removedUserInstance = getAgent(someAgent.getLoginName());
assertNull(removedUserInstance);
anotherAgent = getAgent(anotherAgent.getLoginName());
assertNotNull(anotherAgent);
Role role = createRole("role");
Group group = createGroup("group", null);
RelationshipManager relationshipManager = getPartitionManager().createRelationshipManager();
BasicModel.grantRole(relationshipManager, anotherAgent, role);
BasicModel.addToGroup(relationshipManager, anotherAgent, group);
RelationshipQuery<?> relationshipQuery = relationshipManager.createRelationshipQuery(Grant.class);
relationshipQuery.setParameter(Grant.ASSIGNEE, anotherAgent);
assertFalse(relationshipQuery.getResultList().isEmpty());
relationshipQuery = relationshipManager.createRelationshipQuery(GroupMembership.class);
relationshipQuery.setParameter(GroupMembership.MEMBER, anotherAgent);
assertFalse(relationshipQuery.getResultList().isEmpty());
identityManager.remove(anotherAgent);
relationshipQuery = relationshipManager.createRelationshipQuery(Grant.class);
relationshipQuery.setParameter(Grant.ASSIGNEE, anotherAgent);
assertTrue(relationshipQuery.getResultList().isEmpty());
relationshipQuery = relationshipManager.createRelationshipQuery(GroupMembership.class);
relationshipQuery.setParameter(GroupMembership.MEMBER, anotherAgent);
assertTrue(relationshipQuery.getResultList().isEmpty());
}
@Override
protected Agent getIdentityType() {
return getAgent("someSimpleAgent");
}
@Override
protected Agent createIdentityType() {
return createAgent("someSimpleAgent");
}
@Test
public void testEqualsMethod() {
Agent instanceA = createAgent("agentA");
Agent instanceB = createAgent("agentB");
assertFalse(instanceA.equals(instanceB));
assertTrue(instanceA.getLoginName().equals(getAgent(instanceA.getLoginName()).getLoginName()));
}
}