View Javadoc
1   package com.atlassian.plugin.osgi.bridge.external;
2   
3   import org.junit.Test;
4   import org.mockito.ArgumentCaptor;
5   import org.osgi.framework.BundleContext;
6   import org.osgi.framework.ServiceEvent;
7   import org.osgi.framework.ServiceListener;
8   import org.osgi.framework.ServiceReference;
9   
10  import java.util.concurrent.Callable;
11  
12  import static org.junit.Assert.assertEquals;
13  import static org.mockito.ArgumentMatchers.anyString;
14  import static org.mockito.Mockito.mock;
15  import static org.mockito.Mockito.verify;
16  import static org.mockito.Mockito.when;
17  
18  public class TestHostComponentFactoryBean {
19  
20      @SuppressWarnings("unchecked")
21      @Test
22      public void testGetService() throws Exception {
23          BundleContext ctx = mock(BundleContext.class);
24          ServiceReference<Callable<String>> ref = mock(ServiceReference.class);
25          when(ctx.getServiceReferences((String) null, "(foo=bar)")).thenReturn(new ServiceReference<?>[]{ref});
26          when(ctx.getService(ref)).thenReturn(() -> "foo");
27  
28          ArgumentCaptor<ServiceListener> serviceListener = ArgumentCaptor.forClass(ServiceListener.class);
29  
30          HostComponentFactoryBean bean = new HostComponentFactoryBean();
31          bean.setBundleContext(ctx);
32          bean.setFilter("(foo=bar)");
33          bean.setInterfaces(new Class[]{Callable.class});
34          bean.afterPropertiesSet();
35  
36          assertEquals("foo", ((Callable) bean.getObject()).call());
37  
38          verify(ctx).addServiceListener(serviceListener.capture(), anyString());
39          ServiceReference<Callable<String>> updatedRef = mock(ServiceReference.class);
40          when(ctx.getService(updatedRef)).thenReturn(() -> "boo");
41          serviceListener.getValue().serviceChanged(new ServiceEvent(ServiceEvent.REGISTERED, updatedRef));
42  
43          assertEquals("boo", ((Callable) bean.getObject()).call());
44      }
45  }