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.api.service.ServiceReference;
import org.qi4j.bootstrap.AssemblyException;
import org.qi4j.bootstrap.ModuleAssembly;
import org.qi4j.core.testsupport.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 );
}
public void assemble( ModuleAssembly module )
throws AssemblyException
{
module.services( MyService.class ).setMetaInfo( bundleContext ).instantiateOnStartup();
}
@Test
public void givenFelixFrameworkWhenStartingQi4jApplicationExpectServiceToBeRegisteredToOsgiBundleContext()
{
ServiceReference<Object> ref = serviceLocator.findService( MyService.class );
MyService service = (MyService) ref.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.Activatable",
"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();
}
}