package org.qi4j.library.osgi; import org.junit.Test; import org.osgi.framework.BundleContext; import org.qi4j.api.common.UseDefaults; import org.qi4j.api.property.Property; import org.qi4j.bootstrap.AssemblyException; import org.qi4j.bootstrap.ModuleAssembly; import org.qi4j.test.AbstractQi4jTest; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; public class OSGiServiceTest extends AbstractQi4jTest { private BundleContext bundleContext; public OSGiServiceTest() { bundleContext = mock( BundleContext.class ); } @Override public void assemble( ModuleAssembly module ) throws AssemblyException { module.services( MyService.class ).setMetaInfo( bundleContext ).instantiateOnStartup(); } @Test public void givenFelixFrameworkWhenStartingQi4jApplicationExpectServiceToBeRegisteredToOsgiBundleContext() { MyService service = module.findService( MyService.class ).get(); service.value().set( 15 ); assertEquals( (Integer) 15, service.value().get() ); String[] expectedClasses = new String[] { "org.qi4j.library.osgi.OSGiServiceTest$MyService", "org.qi4j.library.osgi.OSGiEnabledService", "org.qi4j.api.service.ServiceComposite", "org.qi4j.api.entity.Identity", "org.qi4j.api.composite.Composite" }; verify( bundleContext ).registerService( expectedClasses, service, null ); } public interface MyService extends OSGiEnabledService { @UseDefaults Property<Integer> value(); } }