Search in sources :

Example 1 with ServiceHolder

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);
}
Also used : Bundle(org.osgi.framework.Bundle) ConcurrentMap(java.util.concurrent.ConcurrentMap) ServiceHolder(org.apache.felix.framework.ServiceRegistry.ServiceHolder) UsageCount(org.apache.felix.framework.ServiceRegistry.UsageCount) ServiceReferenceImpl(org.apache.felix.framework.ServiceRegistrationImpl.ServiceReferenceImpl)

Example 2 with ServiceHolder

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));
}
Also used : Bundle(org.osgi.framework.Bundle) ConcurrentMap(java.util.concurrent.ConcurrentMap) ServiceHolder(org.apache.felix.framework.ServiceRegistry.ServiceHolder) UsageCount(org.apache.felix.framework.ServiceRegistry.UsageCount) ServiceReferenceImpl(org.apache.felix.framework.ServiceRegistrationImpl.ServiceReferenceImpl)

Example 3 with ServiceHolder

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());
}
Also used : Bundle(org.osgi.framework.Bundle) ConcurrentMap(java.util.concurrent.ConcurrentMap) ServiceHolder(org.apache.felix.framework.ServiceRegistry.ServiceHolder) UsageCount(org.apache.felix.framework.ServiceRegistry.UsageCount) ServiceReferenceImpl(org.apache.felix.framework.ServiceRegistrationImpl.ServiceReferenceImpl)

Example 4 with ServiceHolder

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);
}
Also used : Bundle(org.osgi.framework.Bundle) ConcurrentMap(java.util.concurrent.ConcurrentMap) ServiceHolder(org.apache.felix.framework.ServiceRegistry.ServiceHolder) UsageCount(org.apache.felix.framework.ServiceRegistry.UsageCount)

Example 5 with ServiceHolder

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());
}
Also used : Bundle(org.osgi.framework.Bundle) ConcurrentMap(java.util.concurrent.ConcurrentMap) ServiceHolder(org.apache.felix.framework.ServiceRegistry.ServiceHolder) UsageCount(org.apache.felix.framework.ServiceRegistry.UsageCount) ServiceReferenceImpl(org.apache.felix.framework.ServiceRegistrationImpl.ServiceReferenceImpl)

Aggregations

ServiceHolder (org.apache.felix.framework.ServiceRegistry.ServiceHolder)7 UsageCount (org.apache.felix.framework.ServiceRegistry.UsageCount)7 Bundle (org.osgi.framework.Bundle)7 ConcurrentMap (java.util.concurrent.ConcurrentMap)6 ServiceReferenceImpl (org.apache.felix.framework.ServiceRegistrationImpl.ServiceReferenceImpl)6 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)1