/******************************************************************************* | |
* Copyright (c) 2010 Oracle. | |
* All rights reserved. This program and the accompanying materials | |
* are made available under the terms of the Eclipse Public License v1.0 | |
* and Apache License v2.0 which accompanies this distribution. | |
* The Eclipse Public License is available at | |
* http://www.eclipse.org/legal/epl-v10.html | |
* and the Apache License v2.0 is available at | |
* http://www.opensource.org/licenses/apache2.0.php. | |
* You may elect to redistribute this code under either of these licenses. | |
* | |
* Contributors: | |
* Bob Nettleton - Initial Developer tests for Reference Implementation | |
******************************************************************************/ | |
/** | |
* This class is a common base class for the developer tests for the Gemini | |
* Naming project. | |
*/ | |
package org.eclipse.gemini.naming.test; | |
import java.util.Dictionary; | |
import java.util.HashMap; | |
import java.util.Iterator; | |
import java.util.Map; | |
import java.util.Set; | |
import org.osgi.framework.BundleContext; | |
import org.osgi.framework.ServiceRegistration; | |
import org.springframework.osgi.test.AbstractConfigurableBundleCreatorTests; | |
public abstract class NamingTestCase extends AbstractConfigurableBundleCreatorTests { | |
private static String VERSION = "1.0.1.RELEASE"; | |
private Map m_mapOfServicesToRegistrations = | |
new HashMap(); | |
protected void onSetUp() throws Exception { | |
m_mapOfServicesToRegistrations = new HashMap(); | |
} | |
protected void onTearDown() throws Exception { | |
super.onTearDown(); | |
unregisterAllServices(); | |
} | |
/** | |
* Override getTestFrameworkBundlesNames() in order to modify the | |
* dynamic dependency on Apache Log4J. The Spring OSGi Test framework | |
* relies by default on a SNAPSHOT version of Log4J. | |
* | |
* This method should be considered a workaround for this issue. If future | |
* versions of Spring OSGi Test use a later version of Log4J, then this | |
* method can/should be removed. | |
*/ | |
protected String[] getTestFrameworkBundlesNames() { | |
String[] originalBundleNames = super.getTestFrameworkBundlesNames(); | |
for(int i = 0; i < originalBundleNames.length; i++) { | |
if(originalBundleNames[i].startsWith("org.springframework.osgi,log4j.osgi")) { | |
// set framework to use apache log4j dependency instead | |
String newBundleName = | |
"org.apache.log4j,com.springsource.org.apache.log4j,1.2.15"; | |
originalBundleNames[i] = newBundleName; | |
} | |
} | |
return originalBundleNames; | |
} | |
/** | |
* Declaratively specify the dependency on the Gemini Naming bundle. | |
*/ | |
protected String[] getTestBundlesNames() { | |
return new String[]{ "org.eclipse.gemini.naming, org.eclipse.gemini.naming," + VERSION }; | |
} | |
protected void registerService(String serviceType, Object service, Dictionary properties) { | |
ServiceRegistration registration = | |
bundleContext.registerService(serviceType, service, properties); | |
m_mapOfServicesToRegistrations.put(service, registration); | |
} | |
protected void unregisterService(Object service) { | |
if(m_mapOfServicesToRegistrations.containsKey(service)) { | |
ServiceRegistration registration = | |
(ServiceRegistration)m_mapOfServicesToRegistrations.get(service); | |
registration.unregister(); | |
} | |
} | |
protected void unregisterAllServices() { | |
Set keySet = m_mapOfServicesToRegistrations.keySet(); | |
Iterator iterator = keySet.iterator(); | |
while(iterator.hasNext()) { | |
unregisterService(iterator.next()); | |
} | |
} | |
protected BundleContext getContext() { | |
return bundleContext; | |
} | |
/** | |
* Indicates if the automatic manifest creation should consider only the | |
* test class (<code>true</code>) or all classes included in the test | |
* bundle(<code>false</code>). The latter should be used when the test | |
* bundle contains additional classes that help with the test case. | |
* | |
* <p/> By default, this method returns <code>true</code>, meaning that | |
* only the test class will be searched for dependencies. | |
* | |
* @return true if only the test hierarchy is searched for dependencies or | |
* false if all classes discovered in the test archive need to be | |
* parsed. | |
*/ | |
protected boolean createManifestOnlyFromTestClass() { | |
return false; | |
} | |
} |