package org.camunda.bpm.extension.osgi.container.deployment; import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import org.camunda.bpm.container.impl.jmx.services.JmxManagedProcessEngineController; import org.camunda.bpm.container.impl.metadata.spi.ProcessEngineXml; import org.camunda.bpm.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration; import org.junit.Test; import org.osgi.framework.BundleContext; public class OSGiStartProcessEngineStepTest { @Test public void createProcessEngineControllerInstance() { OSGiStartProcessEngineStep step = new OSGiStartProcessEngineStep(mock(ProcessEngineXml.class), mock(BundleContext.class)); JmxManagedProcessEngineController controller = step.createProcessEngineControllerInstance(new StandaloneInMemProcessEngineConfiguration()); assertThat(controller, is(instanceOf(BundleClassloaderAwareProcessEngineController.class))); } @SuppressWarnings({ "unchecked", "rawtypes" }) @Test public void loadClassWithCustomClassloader() throws ClassNotFoundException{ OSGiStartProcessEngineStep step = new OSGiStartProcessEngineStep(mock(ProcessEngineXml.class), mock(BundleContext.class)); ClassLoader classLoader = mock(ClassLoader.class); String clazz = "org.foo.Bar"; when(classLoader.loadClass(clazz)).thenReturn((Class) this.getClass()); Class<? extends Object> loadedClazz = step.loadClass(clazz, classLoader, null); assertThat(loadedClazz.getName(), is(this.getClass().getName())); } @Test public void loadClassWithNullCustomClassloader() throws ClassNotFoundException{ OSGiStartProcessEngineStep step = new OSGiStartProcessEngineStep(mock(ProcessEngineXml.class), mock(BundleContext.class)); String clazz = "java.lang.Object"; Class<? extends Object> loadedClazz = step.loadClass(clazz, null, null); assertThat(loadedClazz.getName(), is(Object.class.getName())); } @Test public void loadClassWithExceptionInCustomClassloader() throws ClassNotFoundException{ OSGiStartProcessEngineStep step = new OSGiStartProcessEngineStep(mock(ProcessEngineXml.class), mock(BundleContext.class)); String clazz = "java.lang.Object"; ClassLoader classLoader = mock(ClassLoader.class); when(classLoader.loadClass(clazz)).thenThrow(new ClassNotFoundException()); Class<? extends Object> loadedClazz = step.loadClass(clazz, null, null); assertThat(loadedClazz.getName(), is(Object.class.getName())); } }