blob: b718edb160eb92ab4c3176d9cbf90d54a33995b6 [file] [log] [blame]
/*******************************************************************************
* 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.0.RC1";
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;
}
}