Search in sources :

Example 16 with SimpleServiceImpl

use of org.apache.felix.scr.integration.components.SimpleServiceImpl in project felix by apache.

the class ServiceBindTest method test_required_multiple_dynamic.

@Test
public void test_required_multiple_dynamic() throws Exception {
    final SimpleServiceImpl srv1 = SimpleServiceImpl.create(bundleContext, "srv1");
    String name = "test_required_multiple_dynamic";
    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();
    // no delay, should be immediate
    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.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.assertNull(comp20.m_singleRef);
    TestCase.assertTrue(comp20.m_multiRef.contains(srv2));
    TestCase.assertTrue(comp20.m_multiRef.contains(srv3));
    srv2.drop();
    findComponentConfigurationByName(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp21 = SimpleComponent.INSTANCE;
    TestCase.assertSame(comp20, comp21);
    TestCase.assertNull(comp21.m_singleRef);
    TestCase.assertFalse(comp21.m_multiRef.contains(srv2));
    TestCase.assertTrue(comp21.m_multiRef.contains(srv3));
    // create srv4, expect bind
    final SimpleServiceImpl srv4 = SimpleServiceImpl.create(bundleContext, "srv4");
    delay();
    findComponentConfigurationByName(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp22 = SimpleComponent.INSTANCE;
    TestCase.assertSame(comp20, 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 no rebind
    srv4.drop();
    delay();
    findComponentConfigurationByName(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp23 = SimpleComponent.INSTANCE;
    TestCase.assertSame(comp20, 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(comp20, 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 -- no rebind !
    final SimpleServiceImpl srv7 = SimpleServiceImpl.create(bundleContext, "srv7", 30);
    delay();
    findComponentConfigurationByName(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp31 = SimpleComponent.INSTANCE;
    TestCase.assertSame(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.assertSame(comp30, 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 17 with SimpleServiceImpl

use of org.apache.felix.scr.integration.components.SimpleServiceImpl in project felix by apache.

the class ServiceBindTest method test_required_single_dynamic.

@Test
public void test_required_single_dynamic() throws Exception {
    final SimpleServiceImpl srv1 = SimpleServiceImpl.create(bundleContext, "srv1");
    String name = "test_required_single_dynamic";
    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();
    // no delay, should be immediate
    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 (synchronously)
    srv2.drop();
    findComponentConfigurationByName(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp21 = SimpleComponent.INSTANCE;
    TestCase.assertSame(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.assertSame(comp20, 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.assertSame(comp20, 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(comp20, comp30);
    TestCase.assertEquals(srv6, comp30.m_singleRef);
    TestCase.assertTrue(comp30.m_multiRef.isEmpty());
    // another service with higher ranking -- no rebind !
    final SimpleServiceImpl srv7 = SimpleServiceImpl.create(bundleContext, "srv7", 30);
    delay();
    findComponentConfigurationByName(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp31 = SimpleComponent.INSTANCE;
    TestCase.assertSame(comp30, comp31);
    TestCase.assertEquals(srv6, 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.assertSame(comp30, 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 18 with SimpleServiceImpl

use of org.apache.felix.scr.integration.components.SimpleServiceImpl in project felix by apache.

the class ServiceChangedTest method test_optional_single_dynamic.

@Test
public void test_optional_single_dynamic() throws Exception {
    final SimpleServiceImpl srv1 = SimpleServiceImpl.create(bundleContext, "srv1");
    String name = "test_optional_single_dynamic_target";
    getDisabledConfigurationAndEnable(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp10 = SimpleComponent.INSTANCE;
    TestCase.assertNotNull(comp10);
    TestCase.assertEquals(srv1, comp10.m_singleRef);
    TestCase.assertTrue(comp10.m_multiRef.isEmpty());
    TestCase.assertEquals(1, comp10.m_singleRefBind);
    TestCase.assertEquals(0, comp10.m_singleRefUnbind);
    // update a service property
    srv1.update("srv1-modified");
    // no changes in bindings expected
    TestCase.assertEquals(srv1, comp10.m_singleRef);
    TestCase.assertTrue(comp10.m_multiRef.isEmpty());
    TestCase.assertEquals(1, comp10.m_singleRefBind);
    TestCase.assertEquals(0, comp10.m_singleRefUnbind);
    // set target to not match any more
    srv1.setFilterProperty("don't match");
    findComponentConfigurationByName(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp11 = SimpleComponent.INSTANCE;
    TestCase.assertSame(comp10, comp11);
    TestCase.assertNull(comp11.m_singleRef);
    TestCase.assertTrue(comp11.m_multiRef.isEmpty());
    TestCase.assertEquals(1, comp10.m_singleRefBind);
    TestCase.assertEquals(1, comp10.m_singleRefUnbind);
    final SimpleServiceImpl srv2 = SimpleServiceImpl.create(bundleContext, "srv2");
    // async binding
    delay();
    findComponentConfigurationByName(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp12 = SimpleComponent.INSTANCE;
    TestCase.assertSame(comp10, comp12);
    TestCase.assertEquals(srv2, comp12.m_singleRef);
    TestCase.assertTrue(comp12.m_multiRef.isEmpty());
    TestCase.assertEquals(2, comp10.m_singleRefBind);
    TestCase.assertEquals(1, comp10.m_singleRefUnbind);
    // make srv1 match again, expect not changes in bindings
    srv1.setFilterProperty("match");
    TestCase.assertEquals(srv2, comp12.m_singleRef);
    TestCase.assertTrue(comp12.m_multiRef.isEmpty());
    TestCase.assertEquals(2, comp10.m_singleRefBind);
    TestCase.assertEquals(1, comp10.m_singleRefUnbind);
    // make srv2 to not match, expect binding to srv1
    srv2.setFilterProperty("don't match");
    TestCase.assertEquals(srv1, comp12.m_singleRef);
    TestCase.assertTrue(comp12.m_multiRef.isEmpty());
    TestCase.assertEquals(3, comp10.m_singleRefBind);
    TestCase.assertEquals(2, comp10.m_singleRefUnbind);
}
Also used : SimpleComponent(org.apache.felix.scr.integration.components.SimpleComponent) SimpleServiceImpl(org.apache.felix.scr.integration.components.SimpleServiceImpl) Test(org.junit.Test)

Example 19 with SimpleServiceImpl

use of org.apache.felix.scr.integration.components.SimpleServiceImpl in project felix by apache.

the class ServiceChangedTest method test_optional_multiple_dynamic.

@Test
public void test_optional_multiple_dynamic() throws Exception {
    final SimpleServiceImpl srv1 = SimpleServiceImpl.create(bundleContext, "srv1");
    String name = "test_optional_multiple_dynamic_target";
    getDisabledConfigurationAndEnable(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp10 = SimpleComponent.INSTANCE;
    TestCase.assertNotNull(comp10);
    TestCase.assertNull(comp10.m_singleRef);
    TestCase.assertTrue(comp10.m_multiRef.contains(srv1));
    TestCase.assertEquals(1, comp10.m_multiRefBind);
    TestCase.assertEquals(0, comp10.m_multiRefUnbind);
    // update a service property
    srv1.update("srv1-modified");
    // no changes in bindings expected
    TestCase.assertNull(comp10.m_singleRef);
    TestCase.assertTrue(comp10.m_multiRef.contains(srv1));
    TestCase.assertEquals(1, comp10.m_multiRefBind);
    TestCase.assertEquals(0, comp10.m_multiRefUnbind);
    // set target to not match any more
    srv1.setFilterProperty("don't match");
    findComponentConfigurationByName(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp11 = SimpleComponent.INSTANCE;
    TestCase.assertSame(comp10, comp11);
    TestCase.assertNull(comp10.m_singleRef);
    TestCase.assertFalse(comp10.m_multiRef.contains(srv1));
    TestCase.assertEquals(1, comp10.m_multiRefBind);
    TestCase.assertEquals(1, comp10.m_multiRefUnbind);
    final SimpleServiceImpl srv2 = SimpleServiceImpl.create(bundleContext, "srv2");
    // async binding
    delay();
    findComponentConfigurationByName(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp12 = SimpleComponent.INSTANCE;
    TestCase.assertSame(comp10, comp12);
    TestCase.assertNull(comp10.m_singleRef);
    TestCase.assertFalse(comp10.m_multiRef.contains(srv1));
    TestCase.assertTrue(comp10.m_multiRef.contains(srv2));
    TestCase.assertEquals(2, comp10.m_multiRefBind);
    TestCase.assertEquals(1, comp10.m_multiRefUnbind);
    // make srv1 match again, expect not changes in bindings
    srv1.setFilterProperty("match");
    TestCase.assertNull(comp10.m_singleRef);
    TestCase.assertTrue(comp10.m_multiRef.contains(srv1));
    TestCase.assertTrue(comp10.m_multiRef.contains(srv2));
    TestCase.assertEquals(3, comp10.m_multiRefBind);
    TestCase.assertEquals(1, comp10.m_multiRefUnbind);
    // make srv2 to not match, expect binding to srv1
    srv2.setFilterProperty("don't match");
    TestCase.assertNull(comp10.m_singleRef);
    TestCase.assertTrue(comp10.m_multiRef.contains(srv1));
    TestCase.assertFalse(comp10.m_multiRef.contains(srv2));
    TestCase.assertEquals(3, comp10.m_multiRefBind);
    TestCase.assertEquals(2, comp10.m_multiRefUnbind);
}
Also used : SimpleComponent(org.apache.felix.scr.integration.components.SimpleComponent) SimpleServiceImpl(org.apache.felix.scr.integration.components.SimpleServiceImpl) Test(org.junit.Test)

Example 20 with SimpleServiceImpl

use of org.apache.felix.scr.integration.components.SimpleServiceImpl in project felix by apache.

the class ServiceChangedTest method test_required_multiple_dynamic.

@Test
public void test_required_multiple_dynamic() throws Exception {
    final SimpleServiceImpl srv1 = SimpleServiceImpl.create(bundleContext, "srv1");
    String name = "test_required_multiple_dynamic_target";
    getDisabledConfigurationAndEnable(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp10 = SimpleComponent.INSTANCE;
    TestCase.assertNotNull(comp10);
    TestCase.assertNull(comp10.m_singleRef);
    TestCase.assertTrue(comp10.m_multiRef.contains(srv1));
    TestCase.assertEquals(1, comp10.m_multiRefBind);
    TestCase.assertEquals(0, comp10.m_multiRefUnbind);
    // update a service property
    srv1.update("srv1-modified");
    // no changes in bindings expected
    TestCase.assertNull(comp10.m_singleRef);
    TestCase.assertTrue(comp10.m_multiRef.contains(srv1));
    TestCase.assertEquals(1, comp10.m_multiRefBind);
    TestCase.assertEquals(0, comp10.m_multiRefUnbind);
    // set target to not match any more
    srv1.setFilterProperty("don't match");
    findComponentConfigurationByName(name, ComponentConfigurationDTO.UNSATISFIED_REFERENCE);
    final SimpleComponent comp11 = SimpleComponent.INSTANCE;
    TestCase.assertNull(comp11);
    TestCase.assertNull(comp10.m_singleRef);
    TestCase.assertFalse(comp10.m_multiRef.contains(srv1));
    TestCase.assertEquals(1, comp10.m_multiRefBind);
    TestCase.assertEquals(1, comp10.m_multiRefUnbind);
    final SimpleServiceImpl srv2 = SimpleServiceImpl.create(bundleContext, "srv2");
    // async binding
    delay();
    findComponentConfigurationByName(name, ComponentConfigurationDTO.ACTIVE);
    final SimpleComponent comp12 = SimpleComponent.INSTANCE;
    TestCase.assertNotSame(comp10, comp12);
    TestCase.assertNull(comp12.m_singleRef);
    TestCase.assertFalse(comp12.m_multiRef.contains(srv1));
    TestCase.assertTrue(comp12.m_multiRef.contains(srv2));
    TestCase.assertEquals(1, comp12.m_multiRefBind);
    TestCase.assertEquals(0, comp12.m_multiRefUnbind);
    // make srv1 match again, expect not changes in bindings
    srv1.setFilterProperty("match");
    TestCase.assertNull(comp12.m_singleRef);
    TestCase.assertTrue(comp12.m_multiRef.contains(srv1));
    TestCase.assertTrue(comp12.m_multiRef.contains(srv2));
    TestCase.assertEquals(2, comp12.m_multiRefBind);
    TestCase.assertEquals(0, comp12.m_multiRefUnbind);
    // make srv2 to not match, expect binding to srv1
    srv2.setFilterProperty("don't match");
    TestCase.assertNull(comp12.m_singleRef);
    TestCase.assertTrue(comp12.m_multiRef.contains(srv1));
    TestCase.assertFalse(comp12.m_multiRef.contains(srv2));
    TestCase.assertEquals(2, comp12.m_multiRefBind);
    TestCase.assertEquals(1, comp12.m_multiRefUnbind);
}
Also used : SimpleComponent(org.apache.felix.scr.integration.components.SimpleComponent) SimpleServiceImpl(org.apache.felix.scr.integration.components.SimpleServiceImpl) Test(org.junit.Test)

Aggregations

SimpleServiceImpl (org.apache.felix.scr.integration.components.SimpleServiceImpl)42 Test (org.junit.Test)36 SimpleComponent (org.apache.felix.scr.integration.components.SimpleComponent)32 ComponentConfigurationDTO (org.osgi.service.component.runtime.dto.ComponentConfigurationDTO)22 Hashtable (java.util.Hashtable)7 ComponentInstance (org.osgi.service.component.ComponentInstance)7 ComponentFactory (org.osgi.service.component.ComponentFactory)5 ServiceReference (org.osgi.framework.ServiceReference)4 SimpleComponent2 (org.apache.felix.scr.integration.components.SimpleComponent2)2 SimpleService2Impl (org.apache.felix.scr.integration.components.SimpleService2Impl)2 ArrayList (java.util.ArrayList)1 ActivatorComponent (org.apache.felix.scr.integration.components.ActivatorComponent)1 MutatingService (org.apache.felix.scr.integration.components.MutatingService)1 ComponentException (org.osgi.service.component.ComponentException)1