package org.camunda.bpm.extension.osgi.container.deployment; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.Hashtable; import org.camunda.bpm.container.impl.spi.PlatformServiceContainer; import org.camunda.bpm.engine.ProcessEngine; import org.camunda.bpm.engine.ProcessEngineConfiguration; import org.camunda.bpm.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration; import org.camunda.bpm.extension.osgi.engine.ProcessEngineFactory; import org.junit.Test; import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceRegistration; public class BundleClassloaderAwareProcessEngineControllerTest { @SuppressWarnings("unchecked") @Test public void start(){ BundleContext context = mock(BundleContext.class); when(context.getBundle()).thenReturn(mock(Bundle.class)); BundleClassloaderAwareProcessEngineController controller = new TestBundleClassloaderAwareProcessEngineController(new StandaloneInMemProcessEngineConfiguration(), context); controller.start(mock(PlatformServiceContainer.class)); verify(context, atLeastOnce()).registerService(eq(ProcessEngine.class), any(ProcessEngine.class), any(Hashtable.class)); } @SuppressWarnings("unchecked") @Test public void stop(){ BundleContext context = mock(BundleContext.class); when(context.getBundle()).thenReturn(mock(Bundle.class)); TestBundleClassloaderAwareProcessEngineController controller = new TestBundleClassloaderAwareProcessEngineController(new StandaloneInMemProcessEngineConfiguration(), context); ServiceRegistration<ProcessEngine> reg = mock(ServiceRegistration.class); controller.setRegistration(reg); controller.stop(null); verify(reg, atLeastOnce()).unregister(); verify(controller.getFactory(), atLeastOnce()).destroy(); } private static class TestBundleClassloaderAwareProcessEngineController extends BundleClassloaderAwareProcessEngineController{ public TestBundleClassloaderAwareProcessEngineController(ProcessEngineConfiguration processEngineConfiguration, BundleContext context) { super(processEngineConfiguration, context); this.processEngineFactory = mock(ProcessEngineFactory.class); when(processEngineFactory.getObject()).thenReturn(mock(ProcessEngine.class)); } void setRegistration(ServiceRegistration<ProcessEngine> reg){ this.registration = reg; } ProcessEngineFactory getFactory(){ return processEngineFactory; } } }