/**
* $Id: EntityProviderManagerImplTest.java 105077 2012-02-24 22:54:29Z ottenhoff@longsight.com $
* $URL: https://source.sakaiproject.org/svn/entitybroker/trunk/impl/src/test/org/sakaiproject/entitybroker/impl/EntityProviderManagerImplTest.java $
* EntityHandlerImplTest.java - entity-broker - Apr 6, 2008 12:08:39 PM - azeckoski
**************************************************************************
* Copyright (c) 2007, 2008 The Sakai Foundation
*
* Licensed under the Educational Community 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.opensource.org/licenses/ECL-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.sakaiproject.entitybroker.impl;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import junit.framework.TestCase;
import org.sakaiproject.entitybroker.entityprovider.CoreEntityProvider;
import org.sakaiproject.entitybroker.entityprovider.EntityProvider;
import org.sakaiproject.entitybroker.entityprovider.capabilities.ActionsExecutable;
import org.sakaiproject.entitybroker.entityprovider.capabilities.CRUDable;
import org.sakaiproject.entitybroker.entityprovider.capabilities.CollectionResolvable;
import org.sakaiproject.entitybroker.entityprovider.capabilities.EntityViewUrlCustomizable;
import org.sakaiproject.entitybroker.entityprovider.capabilities.Outputable;
import org.sakaiproject.entitybroker.entityprovider.capabilities.RedirectDefinable;
import org.sakaiproject.entitybroker.entityprovider.capabilities.Resolvable;
import org.sakaiproject.entitybroker.entityprovider.capabilities.TagProvideable;
import org.sakaiproject.entitybroker.entityprovider.capabilities.Taggable;
import org.sakaiproject.entitybroker.entityprovider.extension.EntityProviderListener;
import org.sakaiproject.entitybroker.impl.entityprovider.EntityProviderManagerImpl;
import org.sakaiproject.entitybroker.mocks.data.TestData;
/**
* Testing the entity provider manager
*
* @author Aaron Zeckoski (aaronz@vt.edu)
*/
public class EntityProviderManagerImplTest extends TestCase {
protected EntityProviderManagerImpl entityProviderManager;
private TestData td;
@Override
protected void setUp() throws Exception {
super.setUp();
// setup things
td = new TestData();
entityProviderManager = new ServiceTestManager(td).entityProviderManager;
}
/**
* Test method for
* {@link org.sakaiproject.entitybroker.impl.entityprovider.EntityProviderManagerImpl#init()}.
*/
public void testInit() {
// simply make sure this does not fail
entityProviderManager.init();
}
/**
* Test method for
* {@link org.sakaiproject.entitybroker.impl.entityprovider.EntityProviderManagerImpl#getProviderByReference(java.lang.String)}.
*/
@SuppressWarnings("deprecation")
public void testGetProviderByReference() {
EntityProvider ep = null;
// get valid providers
ep = entityProviderManager.getProviderByReference(TestData.REF1);
assertNotNull(ep);
assertEquals(td.entityProvider1, ep);
ep = entityProviderManager.getProviderByReference(TestData.REF3A);
assertNotNull(ep);
assertEquals(td.entityProvider3, ep);
// test unregistered provider returns null
ep = entityProviderManager.getProviderByReference(TestData.REF9);
assertNull(ep);
// ensure invalid prefix dies
try {
ep = entityProviderManager.getProviderByReference(TestData.INVALID_REF);
fail("Should have thrown exception");
} catch (IllegalArgumentException e) {
assertNotNull(e.getMessage());
}
}
/**
* Test method for
* {@link org.sakaiproject.entitybroker.impl.entityprovider.EntityProviderManagerImpl#getProviderByPrefix(java.lang.String)}.
*/
public void testGetProviderByPrefix() {
EntityProvider ep = null;
// get valid providers
ep = entityProviderManager.getProviderByPrefix(TestData.PREFIX1);
assertNotNull(ep);
assertEquals(td.entityProvider1, ep);
ep = entityProviderManager.getProviderByPrefix(TestData.PREFIX2);
assertNotNull(ep);
assertEquals(td.entityProvider2, ep);
ep = entityProviderManager.getProviderByPrefix(TestData.PREFIX3);
assertNotNull(ep);
assertEquals(td.entityProvider3, ep);
// ensure invalid prefix simply returns null
ep = entityProviderManager.getProviderByPrefix(TestData.INVALID_REF);
assertNull(ep);
}
/**
* Test method for
* {@link org.sakaiproject.entitybroker.impl.entityprovider.EntityProviderManagerImpl#getProviderByPrefixAndCapability(java.lang.String, java.lang.Class)}.
*/
public void testGetProviderByPrefixAndCapability() {
EntityProvider ep = null;
// get valid providers
ep = entityProviderManager.getProviderByPrefixAndCapability(TestData.PREFIX1,
CoreEntityProvider.class);
assertNotNull(ep);
assertEquals(td.entityProvider1, ep);
// get valid providers for sub caps
ep = entityProviderManager.getProviderByPrefixAndCapability(TestData.PREFIX1, Taggable.class);
assertNotNull(ep);
assertEquals(td.entityProvider1T, ep);
ep = entityProviderManager.getProviderByPrefixAndCapability(TestData.PREFIX4,
Resolvable.class);
assertNotNull(ep);
assertEquals(td.entityProvider4, ep);
// attempt to get providers when there are none
ep = entityProviderManager.getProviderByPrefixAndCapability(TestData.PREFIX2,
CoreEntityProvider.class);
assertNull(ep);
ep = entityProviderManager.getProviderByPrefixAndCapability(TestData.PREFIX1,
Resolvable.class);
assertNull(ep);
}
/**
* Test method for
* {@link org.sakaiproject.entitybroker.impl.entityprovider.EntityProviderManagerImpl#getRegisteredPrefixes()}.
*/
public void testGetRegisteredPrefixes() {
Set<String> s = null;
s = entityProviderManager.getRegisteredPrefixes();
assertNotNull(s);
assertFalse(s.isEmpty());
assertTrue(s.contains(TestData.PREFIX1));
assertTrue(s.contains(TestData.PREFIX2));
assertTrue(s.contains(TestData.PREFIX3));
assertTrue(s.contains(TestData.PREFIX4));
assertFalse(s.contains(TestData.PREFIX9));
}
public void testGetPrefixCapabilities() {
List<Class<? extends EntityProvider>> caps = null;
caps = entityProviderManager.getPrefixCapabilities(TestData.PREFIX1);
assertNotNull(caps);
assertEquals(4, caps.size());
assertTrue(caps.contains(EntityProvider.class));
assertTrue(caps.contains(CoreEntityProvider.class));
assertTrue(caps.contains(Taggable.class));
assertTrue(caps.contains(TagProvideable.class));
caps = entityProviderManager.getPrefixCapabilities(TestData.PREFIX4);
assertNotNull(caps);
assertEquals(5, caps.size());
assertTrue(caps.contains(EntityProvider.class));
assertTrue(caps.contains(CoreEntityProvider.class));
assertTrue(caps.contains(Resolvable.class));
assertTrue(caps.contains(CollectionResolvable.class));
assertTrue(caps.contains(Outputable.class));
}
public void testGetRegisteredEntityCapabilities() {
Map<String, List<Class<? extends EntityProvider>>> m = null;
m = entityProviderManager.getRegisteredEntityCapabilities();
assertNotNull(m);
assertTrue(m.size() > 5);
assertTrue(m.containsKey(TestData.PREFIX1));
assertTrue(m.containsKey(TestData.PREFIX2));
assertTrue(m.containsKey(TestData.PREFIX3));
assertTrue(m.containsKey(TestData.PREFIX4));
assertFalse(m.containsKey(TestData.PREFIX9));
List<Class<? extends EntityProvider>> caps = m.get(TestData.PREFIX1);
assertNotNull(caps);
assertEquals(4, caps.size());
assertTrue(caps.contains(EntityProvider.class));
assertTrue(caps.contains(CoreEntityProvider.class));
assertTrue(caps.contains(Taggable.class));
assertTrue(caps.contains(TagProvideable.class));
}
public void testGetProvidersByCapability() {
List<? extends EntityProvider> providers = null;
providers = entityProviderManager.getProvidersByCapability(CRUDable.class);
assertNotNull(providers);
assertTrue(providers.size() >= 4);
assertTrue(providers.contains(td.entityProvider6));
assertTrue(providers.contains(td.entityProvider7));
assertTrue(providers.contains(td.entityProvider8));
assertFalse(providers.contains(td.entityProvider1));
assertFalse(providers.contains(td.entityProvider2));
assertFalse(providers.contains(td.entityProvider3));
providers = entityProviderManager.getProvidersByCapability(ActionsExecutable.class);
assertNotNull(providers);
assertTrue(providers.size() >= 3);
assertTrue(providers.contains(td.entityProviderA1));
assertTrue(providers.contains(td.entityProviderA2));
assertTrue(providers.contains(td.entityProviderA3));
assertFalse(providers.contains(td.entityProvider1));
assertFalse(providers.contains(td.entityProvider2));
assertFalse(providers.contains(td.entityProvider3));
providers = entityProviderManager.getProvidersByCapability(EntityViewUrlCustomizable.class);
assertNotNull(providers);
assertEquals(0, providers.size());
}
public void testGetPrefixesByCapability() {
List<String> prefixes = null;
prefixes = entityProviderManager.getPrefixesByCapability(CRUDable.class);
assertNotNull(prefixes);
assertTrue(prefixes.size() >= 4);
assertTrue(prefixes.contains(TestData.PREFIX6));
assertTrue(prefixes.contains(TestData.PREFIX7));
assertTrue(prefixes.contains(TestData.PREFIX8));
assertFalse(prefixes.contains(TestData.PREFIX1));
assertFalse(prefixes.contains(TestData.PREFIX2));
assertFalse(prefixes.contains(TestData.PREFIX3));
prefixes = entityProviderManager.getPrefixesByCapability(ActionsExecutable.class);
assertNotNull(prefixes);
assertTrue(prefixes.size() >= 3);
assertTrue(prefixes.contains(TestData.PREFIXA1));
assertTrue(prefixes.contains(TestData.PREFIXA2));
assertTrue(prefixes.contains(TestData.PREFIXA3));
assertFalse(prefixes.contains(TestData.PREFIX1));
assertFalse(prefixes.contains(TestData.PREFIX2));
assertFalse(prefixes.contains(TestData.PREFIX3));
prefixes = entityProviderManager.getPrefixesByCapability(EntityViewUrlCustomizable.class);
assertNotNull(prefixes);
assertEquals(0, prefixes.size());
}
/**
* Test method for
* {@link org.sakaiproject.entitybroker.impl.entityprovider.EntityProviderManagerImpl#registerEntityProvider(org.sakaiproject.entitybroker.entityprovider.EntityProvider)}.
*/
public void testRegisterEntityProvider() {
// test registering unregistered provider
entityProviderManager.registerEntityProvider(td.entityProvider9);
// test registering an already registered provider
entityProviderManager.registerEntityProvider(td.entityProvider1);
// test registering null dies horribly
try {
entityProviderManager.registerEntityProvider(null);
fail("Should have thrown exception");
} catch (IllegalArgumentException e) {
assertNotNull(e);
}
}
/**
* Test method for
* {@link org.sakaiproject.entitybroker.impl.entityprovider.EntityProviderManagerImpl#unregisterEntityProvider(org.sakaiproject.entitybroker.entityprovider.EntityProvider)}.
*/
public void testUnregisterEntityProvider() {
// test unregistering registered EP
entityProviderManager.unregisterEntityProvider(td.entityProvider1);
// test unregistering non registered EP
entityProviderManager.unregisterEntityProvider(td.entityProvider9);
// test unregistering null dies horribly
try {
entityProviderManager.unregisterEntityProvider(null);
fail("Should have thrown exception");
} catch (NullPointerException e) {
assertNotNull(e);
}
}
/**
* Test method for
* {@link org.sakaiproject.entitybroker.impl.entityprovider.EntityProviderManagerImpl#unregisterEntityProviderByPrefix(java.lang.String)}.
*/
public void testUnregisterEntityProviderByPrefix() {
// test unregistering registered EP
entityProviderManager.unregisterEntityProviderByPrefix(TestData.PREFIX1);
assertNull(entityProviderManager.getProviderByPrefix(TestData.PREFIX1));
entityProviderManager.unregisterEntityProviderByPrefix(TestData.PREFIX7);
assertNull(entityProviderManager.getProviderByPrefix(TestData.PREFIX7));
entityProviderManager.unregisterEntityProviderByPrefix(TestData.PREFIX8);
assertNull(entityProviderManager.getProviderByPrefix(TestData.PREFIX8));
entityProviderManager.unregisterEntityProviderByPrefix(TestData.PREFIXA);
assertNull(entityProviderManager.getProviderByPrefix(TestData.PREFIXA));
// test unregistering non registered EP
entityProviderManager.unregisterEntityProviderByPrefix(TestData.PREFIX9);
// test unregistering null dies horribly
try {
entityProviderManager.unregisterEntityProviderByPrefix(null);
fail("Should have thrown exception");
} catch (NullPointerException e) {
assertNotNull(e);
}
}
/**
* Test method for
* {@link org.sakaiproject.entitybroker.impl.entityprovider.EntityProviderManagerImpl#unregisterCapability(java.lang.String, java.lang.Class)}.
*/
public void testUnregisterEntityProviderCapability() {
// test unregistering an added capability
entityProviderManager.unregisterCapability(TestData.PREFIX1, Taggable.class);
assertNull(entityProviderManager.getProviderByPrefixAndCapability(TestData.PREFIX1,
Taggable.class));
// test unregistering something we just unregistered (should be ok)
entityProviderManager.unregisterCapability(TestData.PREFIX1, Taggable.class);
// test unregistering something not registered
entityProviderManager.unregisterCapability(TestData.PREFIX2, Taggable.class);
// test unregistering null dies horribly
try {
entityProviderManager.unregisterCapability(TestData.PREFIX3, null);
fail("Should have thrown exception");
} catch (IllegalArgumentException e) {
assertNotNull(e);
}
}
public void testRegisterListener() {
final int[] calls = new int[1];
final Map<String, EntityProvider> providers = new ConcurrentHashMap<String, EntityProvider>();
// test basic fetch
class Listener1 implements EntityProviderListener<EntityProvider> {
public Class<EntityProvider> getCapabilityFilter() {
return null;
}
public String getPrefixFilter() {
return null;
}
public void run(EntityProvider provider) {
calls[0]++;
String prefix = provider.getEntityPrefix();
providers.put(prefix, provider);
}
}
entityProviderManager.registerListener(new Listener1(), true);
assertNotNull(providers);
int psize = providers.size();
assertTrue(psize > 15);
assertEquals(psize, calls[0]); // assure we are not calling things too often
// test not getting existing ones
providers.clear();
entityProviderManager.registerListener(new Listener1(), false);
assertNotNull(providers);
assertEquals(0, providers.size());
// test filter by prefix
class Listener2 implements EntityProviderListener<EntityProvider> {
public Class<EntityProvider> getCapabilityFilter() {
return null;
}
public String getPrefixFilter() {
return TestData.PREFIX4;
}
public void run(EntityProvider provider) {
String prefix = provider.getEntityPrefix();
providers.put(prefix, provider);
}
}
providers.clear();
entityProviderManager.registerListener(new Listener2(), true);
assertNotNull(providers);
assertEquals(1, providers.size());
assertEquals(td.entityProvider4, providers.get(TestData.PREFIX4));
// test hit when new registration happens
providers.clear();
entityProviderManager.unregisterEntityProviderByPrefix(TestData.PREFIX4);
assertNotNull(providers);
assertEquals(0, providers.size());
entityProviderManager.registerEntityProvider(td.entityProvider4);
assertNotNull(providers);
assertEquals(1, providers.size());
assertEquals(td.entityProvider4, providers.get(TestData.PREFIX4));
// test filter by capability
class Listener3 implements EntityProviderListener<RedirectDefinable> {
public Class<RedirectDefinable> getCapabilityFilter() {
return RedirectDefinable.class;
}
public String getPrefixFilter() {
return null;
}
public void run(RedirectDefinable provider) {
String prefix = provider.getEntityPrefix();
providers.put(prefix, provider);
}
}
providers.clear();
entityProviderManager.registerListener(new Listener3(), true);
assertNotNull(providers);
assertEquals(1, providers.size());
assertEquals(td.entityProviderU2, providers.get(TestData.PREFIXU2));
assertTrue(RedirectDefinable.class.isAssignableFrom(providers.get(TestData.PREFIXU2).getClass()));
// test filter by both
class Listener4 implements EntityProviderListener<RedirectDefinable> {
public Class<RedirectDefinable> getCapabilityFilter() {
return RedirectDefinable.class;
}
public String getPrefixFilter() {
return TestData.PREFIXU2;
}
public void run(RedirectDefinable provider) {
String prefix = provider.getEntityPrefix();
providers.put(prefix, provider);
}
}
providers.clear();
entityProviderManager.registerListener(new Listener4(), true);
assertNotNull(providers);
assertEquals(1, providers.size());
assertEquals(td.entityProviderU2, providers.get(TestData.PREFIXU2));
assertTrue(RedirectDefinable.class.isAssignableFrom(providers.get(TestData.PREFIXU2).getClass()));
// test filter by invalid stuff (should get nothing)
class Listener5 implements EntityProviderListener<EntityProvider> {
public Class<EntityProvider> getCapabilityFilter() {
return null;
}
public String getPrefixFilter() {
return "XXXXXXXXXXXXXX";
}
public void run(EntityProvider provider) {
String prefix = provider.getEntityPrefix();
providers.put(prefix, provider);
}
}
providers.clear();
entityProviderManager.registerListener(new Listener5(), true);
assertNotNull(providers);
assertEquals(0, providers.size());
// make sure null dies
try {
entityProviderManager.registerListener(null, true);
fail("Should have thrown exception");
} catch (IllegalArgumentException e) {
assertNotNull(e);
}
}
public void testUnregisterListeners() {
final Map<String, EntityProvider> providers = new ConcurrentHashMap<String, EntityProvider>();
class Listener2 implements EntityProviderListener<EntityProvider> {
public Class<EntityProvider> getCapabilityFilter() {
return null;
}
public String getPrefixFilter() {
return TestData.PREFIX4;
}
public void run(EntityProvider provider) {
String prefix = provider.getEntityPrefix();
providers.put(prefix, provider);
}
}
providers.clear();
EntityProviderListener<EntityProvider> listener = new Listener2();
entityProviderManager.unregisterListener(listener); // nothing happens
assertNotNull(providers);
assertEquals(0, providers.size());
entityProviderManager.registerListener(listener, true);
assertNotNull(providers);
assertEquals(1, providers.size());
providers.clear();
entityProviderManager.unregisterListener(listener);
assertNotNull(providers);
assertEquals(0, providers.size());
entityProviderManager.unregisterEntityProviderByPrefix(TestData.PREFIX4);
entityProviderManager.registerEntityProvider(td.entityProvider4);
assertNotNull(providers);
assertEquals(0, providers.size());
// make sure null dies
try {
entityProviderManager.unregisterListener(null);
fail("Should have thrown exception");
} catch (IllegalArgumentException e) {
assertNotNull(e);
}
}
}