/*******************************************************************************
* Copyright (c) 2006-2010 eBay Inc. All Rights Reserved.
* 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
*******************************************************************************/
package org.ebayopensource.turmeric.policyservice.provider;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.persistence.Query;
import org.easymock.EasyMock;
import org.ebayopensource.turmeric.policyservice.provider.common.OperationEditObject;
import org.ebayopensource.turmeric.security.v1.services.Resource;
import org.ebayopensource.turmeric.security.v1.services.ResourceKey;
import org.ebayopensource.turmeric.security.v1.services.Subject;
import org.ebayopensource.turmeric.security.v1.services.SubjectKey;
import org.ebayopensource.turmeric.utils.jpa.EntityManagerContext;
import org.junit.Before;
import org.junit.Test;
/**
* The Class GENERICResourceTest.
*/
public class GENERICResourceTest extends ResourceTestBase {
private OperationEditObject operationEditObject;
private GENERICResource genericResource;
private Resource resource;
private SubjectKey userKey;
/**
* Setup.
*/
@Before
public void setup() {
operationEditObject = EasyMock.createMock(OperationEditObject.class);
genericResource = new GENERICResource();
resource = createResource("rs_test_1_name", "rs_test_1_description",
"GENERIC");
}
/**
* Creates the resource test.
*
* @throws Exception
* the exception
*/
@Test
public void createResourceTest() throws Exception {
EasyMock.reset(operationEditObject);
// Operation List to add
List<String> addOpNameList = new ArrayList<String>();
addOpNameList.add("operation_1");
addOpNameList.add("operation_2");
EasyMock.expect(operationEditObject.getAddList()).andReturn(
addOpNameList);
EasyMock.replay(operationEditObject);
userKey = getUserKey("jdoe");
ResourceKey genericKey = genericResource.createResource(resource,
operationEditObject, userKey);
EasyMock.verify(operationEditObject);
EntityManagerContext.open(factory);
try {
org.ebayopensource.turmeric.policyservice.model.Resource savedResource = EntityManagerContext
.get()
.find(org.ebayopensource.turmeric.policyservice.model.Resource.class,
genericKey.getResourceId());
assertNotNull(savedResource);
assertEquals(2, savedResource.getOperations().size());
} finally {
EntityManagerContext.close();
}
}
/**
* Update resource test.
*
* @throws Exception
* the exception
*/
@Test
public void updateResourceTest() throws Exception {
userKey = getUserKey("jdoe");
EasyMock.reset(operationEditObject);
// Operation List to add
List<String> addOpNameList = new ArrayList<String>();
addOpNameList.add("operation_1");
addOpNameList.add("operation_2");
EasyMock.expect(operationEditObject.getAddList()).andReturn(
addOpNameList);
EasyMock.replay(operationEditObject);
ResourceKey genericKey = genericResource.createResource(resource,
operationEditObject, userKey);
resource.setResourceId(genericKey.getResourceId());
EasyMock.reset(operationEditObject);
// Operation List to add
addOpNameList = new ArrayList<String>();
addOpNameList.add("operation_new");
EasyMock.expect(operationEditObject.getAddList()).andReturn(
addOpNameList);
// Operation List to remove
List<String> removeOpNameList = new ArrayList<String>();
EasyMock.expect(operationEditObject.getRemoveList()).andReturn(
removeOpNameList);
EasyMock.replay(operationEditObject);
genericKey = genericResource.updateResource(resource,
operationEditObject, userKey);
EasyMock.verify(operationEditObject);
EntityManagerContext.open(factory);
try {
org.ebayopensource.turmeric.policyservice.model.Resource savedResource = EntityManagerContext
.get()
.find(org.ebayopensource.turmeric.policyservice.model.Resource.class,
genericKey.getResourceId());
assertNotNull(savedResource);
Query query = EntityManagerContext
.get()
.createQuery(
"select rs.operations from "
+ "org.ebayopensource.turmeric.policyservice.model.Resource as rs "
+ "where rs.id = "
+ genericKey.getResourceId());
@SuppressWarnings("unchecked")
List<org.ebayopensource.turmeric.policyservice.model.Operation> operationList = query
.getResultList();
assertEquals(3, operationList.size());
} finally {
EntityManagerContext.close();
}
}
/**
* Delete resource test.
*
* @throws Exception
* the exception
*/
@Test
public void deleteResourceTest() throws Exception {
EasyMock.reset(operationEditObject);
// Operation List to add
List<String> addOpNameList = new ArrayList<String>();
addOpNameList.add("operation_1");
addOpNameList.add("operation_2");
EasyMock.expect(operationEditObject.getAddList()).andReturn(
addOpNameList);
EasyMock.replay(operationEditObject);
userKey = getUserKey("jdoe");
ResourceKey genericKey = genericResource.createResource(resource,
operationEditObject, userKey);
genericResource.deleteResource(genericKey.getResourceId());
EntityManagerContext.open(factory);
try {
org.ebayopensource.turmeric.policyservice.model.Resource deletedResource = EntityManagerContext
.get()
.find(org.ebayopensource.turmeric.policyservice.model.Resource.class,
genericKey.getResourceId());
assertNull(deletedResource);
} finally {
EntityManagerContext.close();
}
}
/**
* Creates the empty resource test.
*
* @throws Exception
* the exception
*/
@Test
public void createEmptyResourceTest() throws Exception {
userKey = getUserKey("jdoe");
EasyMock.reset(operationEditObject);
// No Operation added
EasyMock.expect(operationEditObject.getAddList()).andReturn(null);
EasyMock.replay(operationEditObject);
ResourceKey genericKey = genericResource.createResource(resource,
operationEditObject, userKey);
EasyMock.verify(operationEditObject);
EntityManagerContext.open(factory);
try {
org.ebayopensource.turmeric.policyservice.model.Resource savedResource = EntityManagerContext
.get()
.find(org.ebayopensource.turmeric.policyservice.model.Resource.class,
genericKey.getResourceId());
assertNotNull(savedResource);
assertEquals(0, savedResource.getOperations().size());
} finally {
EntityManagerContext.close();
}
}
/**
* Creates the another empty resource test.
*
* @throws Exception
* the exception
*/
@Test
public void createAnotherEmptyResourceTest() throws Exception {
userKey = getUserKey("jdoe");
ResourceKey genericKey = genericResource.createResource(resource, null,
userKey);
EntityManagerContext.open(factory);
try {
org.ebayopensource.turmeric.policyservice.model.Resource savedResource = EntityManagerContext
.get()
.find(org.ebayopensource.turmeric.policyservice.model.Resource.class,
genericKey.getResourceId());
assertNotNull(savedResource);
assertEquals(0, savedResource.getOperations().size());
} finally {
EntityManagerContext.close();
}
}
private Resource createResource(final String rdName,
final String rsDescription, final String rsType) {
final Resource resource = new Resource();
resource.setResourceName(rdName);
resource.setDescription(rsDescription);
resource.setResourceType(rsType);
return resource;
}
private SubjectKey getUserKey(final String name) throws Exception {
final USERSubject userProvider = new USERSubject();
final Map<Long, Subject> usrMap = userProvider.getSubjectByName(name);
final SubjectKey userKey = new SubjectKey();
final Subject subject = usrMap.values().toArray(new Subject[1])[0];
userKey.setSubjectId((Long) usrMap.keySet().toArray(new Long[1])[0]);
userKey.setSubjectName(subject.getSubjectName());
userKey.setSubjectType(subject.getSubjectType());
return userKey;
}
}