use of org.apache.felix.framework.ServiceRegistry.ServiceHolder in project felix by apache.
the class ServiceRegistryTest method testUngetService5.
@SuppressWarnings("unchecked")
public void testUngetService5() throws Exception {
ServiceRegistry sr = new ServiceRegistry(null, null);
Bundle b = Mockito.mock(Bundle.class);
ServiceRegistrationImpl reg = Mockito.mock(ServiceRegistrationImpl.class);
Mockito.doThrow(new RuntimeException("Test!")).when(reg).ungetService(Mockito.isA(Bundle.class), Mockito.any());
ServiceReferenceImpl ref = Mockito.mock(ServiceReferenceImpl.class);
Mockito.when(ref.getRegistration()).thenReturn(reg);
final ConcurrentMap<Bundle, UsageCount[]> inUseMap = (ConcurrentMap<Bundle, UsageCount[]>) getPrivateField(sr, "m_inUseMap");
String svc = "myService";
UsageCount uc = new UsageCount(ref, false);
ServiceHolder sh = new ServiceHolder();
sh.m_service = svc;
sh.m_latch.countDown();
uc.m_svcHolderRef.set(sh);
uc.m_count.set(1);
inUseMap.put(b, new UsageCount[] { uc });
try {
assertTrue(sr.ungetService(b, ref, null));
fail("Should have propagated the runtime exception");
} catch (RuntimeException re) {
assertEquals("Test!", re.getMessage());
}
assertNull(uc.m_svcHolderRef.get());
Mockito.verify(reg, Mockito.times(1)).ungetService(b, svc);
}
use of org.apache.felix.framework.ServiceRegistry.ServiceHolder in project felix by apache.
the class ServiceRegistryTest method testUngetService2.
@SuppressWarnings("unchecked")
public void testUngetService2() throws Exception {
ServiceRegistry sr = new ServiceRegistry(null, null);
Bundle b = Mockito.mock(Bundle.class);
ServiceRegistrationImpl reg = Mockito.mock(ServiceRegistrationImpl.class);
ServiceReferenceImpl ref = Mockito.mock(ServiceReferenceImpl.class);
Mockito.when(ref.getRegistration()).thenReturn(reg);
final ConcurrentMap<Bundle, UsageCount[]> inUseMap = (ConcurrentMap<Bundle, UsageCount[]>) getPrivateField(sr, "m_inUseMap");
UsageCount uc = new UsageCount(ref, false);
ServiceHolder sh = new ServiceHolder();
Object svc = new Object();
sh.m_service = svc;
uc.m_svcHolderRef.set(sh);
uc.m_count.incrementAndGet();
Mockito.verify(reg, Mockito.never()).ungetService(Mockito.isA(Bundle.class), Mockito.any());
inUseMap.put(b, new UsageCount[] { uc });
assertTrue(sr.ungetService(b, ref, null));
assertNull(uc.m_svcHolderRef.get());
Mockito.verify(reg, Mockito.times(1)).ungetService(Mockito.isA(Bundle.class), Mockito.eq(svc));
}
use of org.apache.felix.framework.ServiceRegistry.ServiceHolder in project felix by apache.
the class ServiceRegistryTest method testUngetService3.
@SuppressWarnings("unchecked")
public void testUngetService3() throws Exception {
ServiceRegistry sr = new ServiceRegistry(null, null);
Bundle b = Mockito.mock(Bundle.class);
ServiceRegistrationImpl reg = Mockito.mock(ServiceRegistrationImpl.class);
Mockito.when(reg.isValid()).thenReturn(true);
ServiceReferenceImpl ref = Mockito.mock(ServiceReferenceImpl.class);
Mockito.when(ref.getRegistration()).thenReturn(reg);
final ConcurrentMap<Bundle, UsageCount[]> inUseMap = (ConcurrentMap<Bundle, UsageCount[]>) getPrivateField(sr, "m_inUseMap");
UsageCount uc = new UsageCount(ref, false);
uc.m_svcHolderRef.set(new ServiceHolder());
uc.m_count.set(2);
inUseMap.put(b, new UsageCount[] { uc });
assertTrue(sr.ungetService(b, ref, null));
assertNotNull(uc.m_svcHolderRef.get());
assertNotNull(inUseMap.get(b));
Mockito.verify(reg, Mockito.never()).ungetService(Mockito.isA(Bundle.class), Mockito.any());
}
use of org.apache.felix.framework.ServiceRegistry.ServiceHolder in project felix by apache.
the class ServiceRegistryTest method testObtainUsageCountPrototypeUnknownLookup.
public void testObtainUsageCountPrototypeUnknownLookup() throws Exception {
ServiceRegistry sr = new ServiceRegistry(null, null);
@SuppressWarnings("unchecked") ConcurrentMap<Bundle, UsageCount[]> inUseMap = (ConcurrentMap<Bundle, UsageCount[]>) getPrivateField(sr, "m_inUseMap");
Bundle b = Mockito.mock(Bundle.class);
ServiceReference<?> ref = Mockito.mock(ServiceReference.class);
UsageCount uc = new UsageCount(ref, true);
ServiceHolder sh = new ServiceHolder();
String svc = "foobar";
sh.m_service = svc;
uc.m_svcHolderRef.set(sh);
inUseMap.put(b, new UsageCount[] { uc });
assertNull(sr.obtainUsageCount(b, Mockito.mock(ServiceReference.class), null, null));
UsageCount uc2 = sr.obtainUsageCount(b, ref, svc, null);
assertSame(uc, uc2);
}
use of org.apache.felix.framework.ServiceRegistry.ServiceHolder in project felix by apache.
the class ServiceRegistryTest method testUngetService4.
@SuppressWarnings("unchecked")
public void testUngetService4() throws Exception {
ServiceRegistry sr = new ServiceRegistry(null, null);
Bundle b = Mockito.mock(Bundle.class);
ServiceRegistrationImpl reg = Mockito.mock(ServiceRegistrationImpl.class);
Mockito.when(reg.isValid()).thenReturn(false);
ServiceReferenceImpl ref = Mockito.mock(ServiceReferenceImpl.class);
Mockito.when(ref.getRegistration()).thenReturn(reg);
final ConcurrentMap<Bundle, UsageCount[]> inUseMap = (ConcurrentMap<Bundle, UsageCount[]>) getPrivateField(sr, "m_inUseMap");
UsageCount uc = new UsageCount(ref, false);
uc.m_svcHolderRef.set(new ServiceHolder());
uc.m_count.set(2);
inUseMap.put(b, new UsageCount[] { uc });
assertTrue(sr.ungetService(b, ref, null));
assertNull(uc.m_svcHolderRef.get());
Mockito.verify(reg, Mockito.never()).ungetService(Mockito.isA(Bundle.class), Mockito.any());
}
Aggregations