Search in sources :

Example 21 with ComponentConfigurationDTO

use of org.osgi.service.component.runtime.dto.ComponentConfigurationDTO in project felix by apache.

the class Felix4188Test method test_concurrent_deactivation.

@Test
public void test_concurrent_deactivation() throws Exception {
    final Bundle bundle1 = installBundle("/integration_test_FELIX_4188_1.xml", "org.apache.felix.scr.integration.components", "simplecomponent1");
    bundle1.start();
    final Bundle bundle2 = installBundle("/integration_test_FELIX_4188_2.xml", "org.apache.felix.scr.integration.components", "simplecomponent2");
    bundle2.start();
    final ComponentConfigurationDTO aComp1 = findComponentConfigurationByName(bundle1, "org.apache.felix.scr.integration.components.Felix4188Component-1", ComponentConfigurationDTO.SATISFIED);
    final Object aInst1 = getServiceFromConfigurationInAllClassSpaces(aComp1, Felix4188Component.class.getName());
    final ComponentConfigurationDTO aComp2 = findComponentConfigurationByName(bundle2, "org.apache.felix.scr.integration.components.Felix4188Component-2", ComponentConfigurationDTO.SATISFIED);
    final Object aInst2 = getServiceFromConfigurationInAllClassSpaces(aComp2, Felix4188Component.class.getName());
    final CountDownLatch latch = new CountDownLatch(1);
    new Thread() {

        public void run() {
            Bundle scrBundle = scrTracker.getServiceReference().getBundle();
            try {
                scrBundle.stop();
            } catch (Throwable t) {
                t.printStackTrace();
            } finally {
                latch.countDown();
            }
        }
    }.start();
    Thread.sleep(100);
    long t0 = System.currentTimeMillis();
    bundle1.stop();
    bundle2.stop();
    long t1 = System.currentTimeMillis();
    // It should have taken more than a second
    TestCase.assertTrue(t1 - t0 > 1000);
    TestCase.assertNull(getField(aInst1, "throwable"));
    TestCase.assertNull(getField(aInst2, "throwable"));
    latch.await();
    TestCase.assertNull(getField(aInst1, "throwable"));
    TestCase.assertNull(getField(aInst2, "throwable"));
}
Also used : Bundle(org.osgi.framework.Bundle) Felix4188Component(org.apache.felix.scr.integration.components.felix4188.Felix4188Component) CountDownLatch(java.util.concurrent.CountDownLatch) ComponentConfigurationDTO(org.osgi.service.component.runtime.dto.ComponentConfigurationDTO) Test(org.junit.Test)

Example 22 with ComponentConfigurationDTO

use of org.osgi.service.component.runtime.dto.ComponentConfigurationDTO in project felix by apache.

the class Felix5248Test method test_reconfigurationActivates.

@Test
public void test_reconfigurationActivates() throws Exception {
    Hashtable<String, Object> props = new Hashtable<String, Object>();
    props.put("FAIL", true);
    Configuration configC = configure("Component", null, props);
    log.log(LogService.LOG_INFO, "Component updated with FAIL props");
    delay();
    String componentName = "Component";
    ComponentConfigurationDTO component = findComponentConfigurationByName(componentName, ComponentConfigurationDTO.SATISFIED);
    log.log(LogService.LOG_INFO, "A checked satisfied (not active)");
    props.clear();
    configC.update(props);
    log.log(LogService.LOG_INFO, "Component updated with no props");
    delay();
    findComponentConfigurationByName(componentName, ComponentConfigurationDTO.ACTIVE);
    log.log(LogService.LOG_INFO, "C checked active");
}
Also used : Configuration(org.osgi.service.cm.Configuration) Hashtable(java.util.Hashtable) ComponentConfigurationDTO(org.osgi.service.component.runtime.dto.ComponentConfigurationDTO) Test(org.junit.Test)

Example 23 with ComponentConfigurationDTO

use of org.osgi.service.component.runtime.dto.ComponentConfigurationDTO in project felix by apache.

the class ServiceBindGreedyTest method test_required_single_static.

@Test
public void test_required_single_static() throws Exception {
    final SimpleServiceImpl srv1 = SimpleServiceImpl.create(bundleContext, "srv1");
    String name = "test_required_single_static";
    ComponentConfigurationDTO cc = getDisabledConfigurationAndEnable(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp10 = SimpleComponent.INSTANCE;
    TestCase.assertNotNull(comp10);
    TestCase.assertEquals(srv1, comp10.m_singleRef);
    TestCase.assertTrue(comp10.m_multiRef.isEmpty());
    srv1.drop();
    // async reactivate
    delay();
    findComponentConfigurationByName(name, ComponentConfigurationDTO.UNSATISFIED_REFERENCE);
    final SimpleComponent comp11 = SimpleComponent.INSTANCE;
    TestCase.assertNull(comp11);
    final SimpleServiceImpl srv2 = SimpleServiceImpl.create(bundleContext, "srv2");
    // async binding
    delay();
    findComponentConfigurationByName(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp12 = SimpleComponent.INSTANCE;
    TestCase.assertNotSame(comp10, comp12);
    TestCase.assertEquals(srv2, comp12.m_singleRef);
    TestCase.assertTrue(comp12.m_multiRef.isEmpty());
    disableAndCheck(cc);
    // async disabling
    delay();
    final SimpleServiceImpl srv3 = SimpleServiceImpl.create(bundleContext, "srv3");
    // enable component with two services available, expect srv2 bind
    // async enabling
    enableAndCheck(cc.description);
    delay();
    findComponentConfigurationByName(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp20 = SimpleComponent.INSTANCE;
    TestCase.assertNotNull(comp20);
    TestCase.assertNotSame(comp10, comp20);
    TestCase.assertEquals(srv2, comp20.m_singleRef);
    TestCase.assertTrue(comp20.m_multiRef.isEmpty());
    // drop srv2, expect rebind to srv3
    srv2.drop();
    // async reactivate
    delay();
    findComponentConfigurationByName(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp21 = SimpleComponent.INSTANCE;
    TestCase.assertNotSame(comp20, comp21);
    TestCase.assertEquals(srv3, comp21.m_singleRef);
    TestCase.assertTrue(comp21.m_multiRef.isEmpty());
    // create srv4, expect no rebind
    final SimpleServiceImpl srv4 = SimpleServiceImpl.create(bundleContext, "srv4");
    delay();
    findComponentConfigurationByName(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp22 = SimpleComponent.INSTANCE;
    TestCase.assertNotSame(comp20, comp22);
    TestCase.assertSame(comp21, comp22);
    TestCase.assertEquals(srv3, comp22.m_singleRef);
    TestCase.assertTrue(comp22.m_multiRef.isEmpty());
    // drop srv4 again, expect no rebind
    srv4.drop();
    delay();
    findComponentConfigurationByName(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp23 = SimpleComponent.INSTANCE;
    TestCase.assertNotSame(comp20, comp23);
    TestCase.assertSame(comp21, comp23);
    TestCase.assertSame(comp22, comp23);
    TestCase.assertEquals(srv3, comp23.m_singleRef);
    TestCase.assertTrue(comp23.m_multiRef.isEmpty());
    // "reset"
    disableAndCheck(cc);
    srv3.drop();
    delay();
    // two services with service ranking (srv6 > srv5)
    final SimpleServiceImpl srv5 = SimpleServiceImpl.create(bundleContext, "srv5", 10);
    final SimpleServiceImpl srv6 = SimpleServiceImpl.create(bundleContext, "srv6", 20);
    enableAndCheck(cc.description);
    delay();
    findComponentConfigurationByName(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp30 = SimpleComponent.INSTANCE;
    TestCase.assertNotSame(comp23, comp30);
    TestCase.assertEquals(srv6, comp30.m_singleRef);
    TestCase.assertTrue(comp30.m_multiRef.isEmpty());
    // another service with higher ranking -- rebind !
    final SimpleServiceImpl srv7 = SimpleServiceImpl.create(bundleContext, "srv7", 30);
    delay();
    findComponentConfigurationByName(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp31 = SimpleComponent.INSTANCE;
    TestCase.assertNotSame(comp30, comp31);
    TestCase.assertEquals(srv7, comp31.m_singleRef);
    TestCase.assertTrue(comp31.m_multiRef.isEmpty());
    // srv6 goes, no rebind to srv7
    srv6.drop();
    delay();
    findComponentConfigurationByName(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp32 = SimpleComponent.INSTANCE;
    TestCase.assertNotSame(comp30, comp32);
    TestCase.assertSame(comp31, comp32);
    TestCase.assertEquals(srv7, comp32.m_singleRef);
    TestCase.assertTrue(comp32.m_multiRef.isEmpty());
}
Also used : SimpleComponent(org.apache.felix.scr.integration.components.SimpleComponent) ComponentConfigurationDTO(org.osgi.service.component.runtime.dto.ComponentConfigurationDTO) SimpleServiceImpl(org.apache.felix.scr.integration.components.SimpleServiceImpl) Test(org.junit.Test)

Example 24 with ComponentConfigurationDTO

use of org.osgi.service.component.runtime.dto.ComponentConfigurationDTO in project felix by apache.

the class ServiceBindGreedyTest method test_optional_multiple_static.

@Test
public void test_optional_multiple_static() throws Exception {
    final SimpleServiceImpl srv1 = SimpleServiceImpl.create(bundleContext, "srv1");
    String name = "test_optional_multiple_static";
    ComponentConfigurationDTO cc = getDisabledConfigurationAndEnable(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp10 = SimpleComponent.INSTANCE;
    TestCase.assertNotNull(comp10);
    TestCase.assertNull(comp10.m_singleRef);
    TestCase.assertTrue(comp10.m_multiRef.contains(srv1));
    srv1.drop();
    // async reactivate
    delay();
    findComponentConfigurationByName(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp11 = SimpleComponent.INSTANCE;
    TestCase.assertNotSame(comp10, comp11);
    TestCase.assertNull(comp11.m_singleRef);
    TestCase.assertTrue(comp11.m_multiRef.isEmpty());
    final SimpleServiceImpl srv2 = SimpleServiceImpl.create(bundleContext, "srv2");
    // async binding
    delay();
    findComponentConfigurationByName(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp12 = SimpleComponent.INSTANCE;
    TestCase.assertNotSame(comp10, comp12);
    TestCase.assertNotSame(comp11, comp12);
    TestCase.assertNull(comp12.m_singleRef);
    TestCase.assertTrue(comp12.m_multiRef.contains(srv2));
    disableAndCheck(cc);
    // async disabling
    delay();
    final SimpleServiceImpl srv3 = SimpleServiceImpl.create(bundleContext, "srv3");
    // enable component with two services available, expect both bind
    // async enabling
    enableAndCheck(cc.description);
    delay();
    findComponentConfigurationByName(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp20 = SimpleComponent.INSTANCE;
    TestCase.assertNotNull(comp20);
    TestCase.assertNotSame(comp10, comp20);
    TestCase.assertNotSame(comp11, comp20);
    TestCase.assertNotSame(comp12, comp20);
    TestCase.assertNull(comp20.m_singleRef);
    TestCase.assertTrue(comp20.m_multiRef.contains(srv2));
    TestCase.assertTrue(comp20.m_multiRef.contains(srv3));
    srv2.drop();
    // async reactivate
    delay();
    findComponentConfigurationByName(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp21 = SimpleComponent.INSTANCE;
    TestCase.assertNotSame(comp20, comp21);
    TestCase.assertNull(comp21.m_singleRef);
    TestCase.assertFalse(comp21.m_multiRef.contains(srv2));
    TestCase.assertTrue(comp21.m_multiRef.contains(srv3));
    // create srv4, expect greedy bind (static case)
    final SimpleServiceImpl srv4 = SimpleServiceImpl.create(bundleContext, "srv4");
    delay();
    findComponentConfigurationByName(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp22 = SimpleComponent.INSTANCE;
    TestCase.assertNotSame(comp20, comp22);
    TestCase.assertNotSame(comp21, comp22);
    TestCase.assertNull(comp22.m_singleRef);
    TestCase.assertFalse(comp22.m_multiRef.contains(srv2));
    TestCase.assertTrue(comp22.m_multiRef.contains(srv3));
    TestCase.assertTrue(comp22.m_multiRef.contains(srv4));
    // drop srv4 again, expect rebind
    srv4.drop();
    delay();
    findComponentConfigurationByName(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp23 = SimpleComponent.INSTANCE;
    TestCase.assertNotSame(comp20, comp23);
    TestCase.assertNotSame(comp21, comp23);
    TestCase.assertNotSame(comp22, comp23);
    TestCase.assertNull(comp23.m_singleRef);
    TestCase.assertFalse(comp23.m_multiRef.contains(srv2));
    TestCase.assertTrue(comp23.m_multiRef.contains(srv3));
    TestCase.assertFalse(comp23.m_multiRef.contains(srv4));
    // "reset"
    disableAndCheck(cc);
    srv3.drop();
    delay();
    // two services with service ranking (srv6 > srv5)
    final SimpleServiceImpl srv5 = SimpleServiceImpl.create(bundleContext, "srv5", 10);
    final SimpleServiceImpl srv6 = SimpleServiceImpl.create(bundleContext, "srv6", 20);
    enableAndCheck(cc.description);
    delay();
    findComponentConfigurationByName(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp30 = SimpleComponent.INSTANCE;
    TestCase.assertNotSame(comp23, comp30);
    TestCase.assertNull(comp30.m_singleRef);
    TestCase.assertTrue(comp30.m_multiRef.contains(srv5));
    TestCase.assertTrue(comp30.m_multiRef.contains(srv6));
    // another service with higher ranking -- greedy rebind !
    final SimpleServiceImpl srv7 = SimpleServiceImpl.create(bundleContext, "srv7", 30);
    delay();
    findComponentConfigurationByName(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp31 = SimpleComponent.INSTANCE;
    TestCase.assertNotSame(comp30, comp31);
    TestCase.assertNull(comp31.m_singleRef);
    TestCase.assertTrue(comp31.m_multiRef.contains(srv5));
    TestCase.assertTrue(comp31.m_multiRef.contains(srv6));
    TestCase.assertTrue(comp31.m_multiRef.contains(srv7));
    // srv6 goes, rebind to srv7
    srv6.drop();
    delay();
    findComponentConfigurationByName(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp32 = SimpleComponent.INSTANCE;
    TestCase.assertNotSame(comp30, comp32);
    TestCase.assertNotSame(comp31, comp32);
    TestCase.assertNull(comp32.m_singleRef);
    TestCase.assertTrue(comp32.m_multiRef.contains(srv5));
    TestCase.assertFalse(comp32.m_multiRef.contains(srv6));
    TestCase.assertTrue(comp32.m_multiRef.contains(srv7));
}
Also used : SimpleComponent(org.apache.felix.scr.integration.components.SimpleComponent) ComponentConfigurationDTO(org.osgi.service.component.runtime.dto.ComponentConfigurationDTO) SimpleServiceImpl(org.apache.felix.scr.integration.components.SimpleServiceImpl) Test(org.junit.Test)

Example 25 with ComponentConfigurationDTO

use of org.osgi.service.component.runtime.dto.ComponentConfigurationDTO in project felix by apache.

the class ServiceBindGreedyTest method test_optional_single_static.

@Test
public void test_optional_single_static() throws Exception {
    final SimpleServiceImpl srv1 = SimpleServiceImpl.create(bundleContext, "srv1");
    String name = "test_optional_single_static";
    ComponentConfigurationDTO cc = getDisabledConfigurationAndEnable(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp10 = SimpleComponent.INSTANCE;
    TestCase.assertNotNull(comp10);
    TestCase.assertEquals(srv1, comp10.m_singleRef);
    TestCase.assertTrue(comp10.m_multiRef.isEmpty());
    srv1.drop();
    // async reactivate
    delay();
    findComponentConfigurationByName(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp11 = SimpleComponent.INSTANCE;
    TestCase.assertNotSame(comp10, comp11);
    TestCase.assertNull(comp11.m_singleRef);
    TestCase.assertTrue(comp11.m_multiRef.isEmpty());
    final SimpleServiceImpl srv2 = SimpleServiceImpl.create(bundleContext, "srv2");
    // async binding
    delay();
    // greedy static reference rebinds
    findComponentConfigurationByName(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp12 = SimpleComponent.INSTANCE;
    TestCase.assertNotSame(comp10, comp12);
    TestCase.assertNotSame(comp11, comp12);
    TestCase.assertEquals(srv2, comp12.m_singleRef);
    TestCase.assertTrue(comp12.m_multiRef.isEmpty());
    disableAndCheck(cc);
    // async disabling
    delay();
    final SimpleServiceImpl srv3 = SimpleServiceImpl.create(bundleContext, "srv3");
    // enable component with two services available, expect srv2 bind
    // async enabling
    enableAndCheck(cc.description);
    delay();
    findComponentConfigurationByName(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp20 = SimpleComponent.INSTANCE;
    TestCase.assertNotNull(comp20);
    TestCase.assertNotSame(comp10, comp20);
    TestCase.assertEquals(srv2, comp20.m_singleRef);
    TestCase.assertTrue(comp20.m_multiRef.isEmpty());
    // drop srv2, expect rebind to srv3 (synchronously)
    srv2.drop();
    // async reactivate
    delay();
    findComponentConfigurationByName(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp21 = SimpleComponent.INSTANCE;
    TestCase.assertNotSame(comp20, comp21);
    TestCase.assertEquals(srv3, comp21.m_singleRef);
    TestCase.assertTrue(comp21.m_multiRef.isEmpty());
    // create srv4 of lower rank, expect no rebind
    final SimpleServiceImpl srv4 = SimpleServiceImpl.create(bundleContext, "srv4", -1);
    delay();
    findComponentConfigurationByName(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp22 = SimpleComponent.INSTANCE;
    TestCase.assertNotSame(comp20, comp22);
    TestCase.assertSame(comp21, comp22);
    TestCase.assertEquals(srv3, comp22.m_singleRef);
    TestCase.assertTrue(comp22.m_multiRef.isEmpty());
    // drop srv4 again, expect no rebind
    srv4.drop();
    delay();
    findComponentConfigurationByName(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp23 = SimpleComponent.INSTANCE;
    TestCase.assertNotSame(comp20, comp23);
    TestCase.assertSame(comp21, comp23);
    TestCase.assertSame(comp22, comp23);
    TestCase.assertEquals(srv3, comp23.m_singleRef);
    TestCase.assertTrue(comp23.m_multiRef.isEmpty());
    // "reset"
    disableAndCheck(cc);
    srv3.drop();
    delay();
    // two services with service ranking (srv6 > srv5)
    final SimpleServiceImpl srv5 = SimpleServiceImpl.create(bundleContext, "srv5", 10);
    final SimpleServiceImpl srv6 = SimpleServiceImpl.create(bundleContext, "srv6", 20);
    enableAndCheck(cc.description);
    delay();
    findComponentConfigurationByName(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp30 = SimpleComponent.INSTANCE;
    TestCase.assertNotSame(comp23, comp30);
    TestCase.assertEquals(srv6, comp30.m_singleRef);
    TestCase.assertTrue(comp30.m_multiRef.isEmpty());
    // another service with higher ranking rebind !
    final SimpleServiceImpl srv7 = SimpleServiceImpl.create(bundleContext, "srv7", 30);
    delay();
    findComponentConfigurationByName(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp31 = SimpleComponent.INSTANCE;
    TestCase.assertNotSame(comp30, comp31);
    TestCase.assertEquals(srv7, comp31.m_singleRef);
    TestCase.assertTrue(comp31.m_multiRef.isEmpty());
    // srv6 goes, rebind to srv7
    srv6.drop();
    delay();
    findComponentConfigurationByName(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp32 = SimpleComponent.INSTANCE;
    TestCase.assertNotSame(comp30, comp32);
    TestCase.assertSame(comp31, comp32);
    TestCase.assertEquals(srv7, comp32.m_singleRef);
    TestCase.assertTrue(comp32.m_multiRef.isEmpty());
}
Also used : SimpleComponent(org.apache.felix.scr.integration.components.SimpleComponent) ComponentConfigurationDTO(org.osgi.service.component.runtime.dto.ComponentConfigurationDTO) SimpleServiceImpl(org.apache.felix.scr.integration.components.SimpleServiceImpl) Test(org.junit.Test)

Aggregations

ComponentConfigurationDTO (org.osgi.service.component.runtime.dto.ComponentConfigurationDTO)90 Test (org.junit.Test)63 SimpleComponent (org.apache.felix.scr.integration.components.SimpleComponent)23 SimpleServiceImpl (org.apache.felix.scr.integration.components.SimpleServiceImpl)22 ComponentDescriptionDTO (org.osgi.service.component.runtime.dto.ComponentDescriptionDTO)20 A (org.apache.felix.scr.integration.components.circular.A)9 B (org.apache.felix.scr.integration.components.circular.B)9 ArrayList (java.util.ArrayList)7 Configuration (org.osgi.service.cm.Configuration)6 Bundle (org.osgi.framework.Bundle)5 ServiceReference (org.osgi.framework.ServiceReference)5 ServiceComponentRuntime (org.osgi.service.component.runtime.ServiceComponentRuntime)5 Hashtable (java.util.Hashtable)3 ConstructorComponent (org.apache.felix.scr.integration.components.ConstructorComponent)3 FieldActivatorComponent (org.apache.felix.scr.integration.components.FieldActivatorComponent)3 ReferenceDTO (org.osgi.service.component.runtime.dto.ReferenceDTO)3 UnsatisfiedReferenceDTO (org.osgi.service.component.runtime.dto.UnsatisfiedReferenceDTO)3 TreeMap (java.util.TreeMap)2 Component (org.apache.felix.scr.Component)2 ActivatorComponent (org.apache.felix.scr.integration.components.ActivatorComponent)2