package com.buglabs.common.tests.osgi;
import java.util.ArrayList;
import java.util.List;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;
import org.osgi.service.log.LogService;
import com.buglabs.common.tests.Activator;
import com.buglabs.common.tests.osgi.pub.ServiceA;
import com.buglabs.util.osgi.LogServiceUtil;
import com.buglabs.util.osgi.OSGiServiceLoader;
import junit.framework.TestCase;
/**
* Test OSGi functionality provided by com.buglabs.common.
* @author kgilmer
*
*/
public class OSGiTestCommon extends TestCase {
/**
* Test to see if can get a reference to LogService using LogServiceUtil.
*/
public void testGetLogService() {
BundleContext context = Activator.getDefault().getContext();
assertNotNull(context);
LogService ls = LogServiceUtil.getLogService(context);
assertNotNull(ls);
}
/**
* Test the OSGiServiceLoader class
* @throws Exception
*/
public void testOSGiServiceLoader() throws Exception {
BundleContext context = Activator.getDefault().getContext();
assertNotNull(context);
final List<Object> services = new ArrayList<Object>();
//Test base case
OSGiServiceLoader.loadServices(context, ServiceA.class.getName(), null, new OSGiServiceLoader.IServiceLoader() {
@Override
public void load(Object service) throws Exception {
services.add(service);
}
});
assertTrue(services.size() == 0);
ServiceRegistration sr = context.registerService(ServiceA.class.getName(), new ServiceAImpl(), null);
assertNotNull(sr);
//Test one registration
OSGiServiceLoader.loadServices(context, ServiceA.class.getName(), null, new OSGiServiceLoader.IServiceLoader() {
@Override
public void load(Object service) throws Exception {
services.add(service);
}
});
assertTrue(services.size() == 1);
sr.unregister();
services.clear();
//Test after deregistration
OSGiServiceLoader.loadServices(context, ServiceA.class.getName(), null, new OSGiServiceLoader.IServiceLoader() {
@Override
public void load(Object service) throws Exception {
services.add(service);
}
});
assertTrue(services.size() == 0);
}
private class ServiceAImpl implements ServiceA {
@Override
public int methodA() {
return 0;
}
}
}