Search in sources :

Example 11 with ServiceContext

use of org.apache.felix.ipojo.ServiceContext in project felix by apache.

the class TestOptionalImport method testSimple.

@Test
public void testSimple() {
    // No provider -> valid
    assertTrue("Test component invalidity", import3.getState() == ComponentInstance.VALID);
    ComponentInstance foo = null;
    Properties p = new Properties();
    p.put("instance.name", "foo");
    try {
        foo = fooProvider.createComponentInstance(p);
    } catch (Exception e) {
        fail("Fail to instantiate the foo component " + e.getMessage());
    }
    ComponentInstance foo2 = null;
    Properties p2 = new Properties();
    p2.put("instance.name", "foo2");
    try {
        foo2 = fooProvider.createComponentInstance(p2);
    } catch (Exception e) {
        fail("Fail to instantiate the foo2 component " + e.getMessage());
    }
    // The foo service is available => import1 must be valid
    assertTrue("Test component validity", import3.getState() == ComponentInstance.VALID);
    ServiceContext sc = getServiceContext(import3);
    ServiceReference[] refs = ipojoHelper.getServiceReferences(sc, FooService.class.getName(), null);
    assertNotNull("Test foo availability inside the composite - 1", refs);
    assertEquals("Test foo availability inside the composite - 1.2", refs.length, 1);
    FooService fs = (FooService) sc.getService(refs[0]);
    assertTrue("Test foo invocation", fs.foo());
    sc.ungetService(refs[0]);
    // Stop the second provider
    foo2.dispose();
    assertTrue("Test component validity", import3.getState() == ComponentInstance.VALID);
    sc = getServiceContext(import3);
    refs = ipojoHelper.getServiceReferences(sc, FooService.class.getName(), null);
    assertNotNull("Test foo availability inside the composite - 2", refs);
    assertEquals("Test foo availability inside the composite - 2.1 (" + refs.length + ")", refs.length, 1);
    fs = (FooService) sc.getService(refs[0]);
    assertTrue("Test foo invocation", fs.foo());
    sc.ungetService(refs[0]);
    // stop the foo provider
    foo.stop();
    // No provider -> Invalid
    assertTrue("Test component invalidity - 2", import3.getState() == ComponentInstance.VALID);
    foo.start();
    assertTrue("Test component validity", import3.getState() == ComponentInstance.VALID);
    sc = getServiceContext(import3);
    refs = ipojoHelper.getServiceReferences(sc, FooService.class.getName(), null);
    assertNotNull("Test foo availability inside the composite - 3", refs);
    assertEquals("Test foo availability inside the composite - 3.1", refs.length, 1);
    fs = (FooService) sc.getService(refs[0]);
    assertTrue("Test foo invocation", fs.foo());
    sc.ungetService(refs[0]);
    foo.dispose();
    // No provider -> Invalid
    assertTrue("Test component invalidity - 3", import3.getState() == ComponentInstance.VALID);
}
Also used : FooService(org.apache.felix.ipojo.runtime.core.services.FooService) ServiceContext(org.apache.felix.ipojo.ServiceContext) ComponentInstance(org.apache.felix.ipojo.ComponentInstance) Properties(java.util.Properties) ServiceReference(org.osgi.framework.ServiceReference) Test(org.junit.Test)

Example 12 with ServiceContext

use of org.apache.felix.ipojo.ServiceContext in project felix by apache.

the class TestOptionalMultipleImport method testSimple2.

@Test
public void testSimple2() {
    // No provider -> Invalid
    assertTrue("Test component validity", import2.getState() == ComponentInstance.VALID);
    ComponentInstance foo1 = null;
    Properties p = new Properties();
    p.put("instance.name", "foo");
    try {
        foo1 = fooProvider.createComponentInstance(p);
    } catch (Exception e) {
        fail("Fail to instantiate the foo component " + e.getMessage());
    }
    ComponentInstance foo2 = null;
    Properties p2 = new Properties();
    p2.put("instance.name", "foo2");
    try {
        foo2 = fooProvider.createComponentInstance(p2);
    } catch (Exception e) {
        fail("Fail to instantiate the foo2 component " + e.getMessage());
    }
    // The foo service is available => import1 must be valid
    assertTrue("Test component validity", import2.getState() == ComponentInstance.VALID);
    ServiceContext sc = getServiceContext(import2);
    ServiceReference[] refs = ipojoHelper.getServiceReferences(sc, FooService.class.getName(), null);
    assertNotNull("Test foo availability inside the composite - 1", refs);
    assertEquals("Test foo availability inside the composite - 1.2 (" + refs.length + ")", refs.length, 2);
    FooService fs = (FooService) sc.getService(refs[0]);
    assertTrue("Test foo invocation", fs.foo());
    FooService fs2 = (FooService) sc.getService(refs[1]);
    assertTrue("Test foo invocation", fs2.foo());
    sc.ungetService(refs[0]);
    sc.ungetService(refs[1]);
    // Stop the first provider
    foo1.stop();
    assertTrue("Test component validity", import2.getState() == ComponentInstance.VALID);
    sc = getServiceContext(import2);
    refs = ipojoHelper.getServiceReferences(sc, FooService.class.getName(), null);
    assertNotNull("Test foo availability inside the composite - 2", refs);
    assertEquals("Test foo availability inside the composite - 2.1 (" + refs.length + ")", refs.length, 1);
    fs = (FooService) sc.getService(refs[0]);
    assertTrue("Test foo invocation", fs.foo());
    sc.ungetService(refs[0]);
    // stop the second foo provider
    foo2.dispose();
    // No provider -> Invalid
    assertTrue("Test component validity - 2", import2.getState() == ComponentInstance.VALID);
    sc = getServiceContext(import2);
    refs = ipojoHelper.getServiceReferences(sc, FooService.class.getName(), null);
    assertEquals("Test foo non-availability inside the composite - 1", refs.length, 0);
    foo1.start();
    assertTrue("Test component validity", import2.getState() == ComponentInstance.VALID);
    sc = getServiceContext(import2);
    refs = ipojoHelper.getServiceReferences(sc, FooService.class.getName(), null);
    assertNotNull("Test foo availability inside the composite - 3", refs);
    assertEquals("Test foo availability inside the composite - 3.1", refs.length, 1);
    fs = (FooService) sc.getService(refs[0]);
    assertTrue("Test foo invocation", fs.foo());
    sc.ungetService(refs[0]);
    foo1.dispose();
    // No provider -> Invalid
    assertTrue("Test component invalidity - 3", import2.getState() == ComponentInstance.VALID);
    sc = getServiceContext(import2);
    refs = ipojoHelper.getServiceReferences(sc, FooService.class.getName(), null);
    assertEquals("Test foo non-availability inside the composite - 2", refs.length, 0);
}
Also used : FooService(org.apache.felix.ipojo.runtime.core.services.FooService) ServiceContext(org.apache.felix.ipojo.ServiceContext) ComponentInstance(org.apache.felix.ipojo.ComponentInstance) Properties(java.util.Properties) ServiceReference(org.osgi.framework.ServiceReference) Test(org.junit.Test)

Example 13 with ServiceContext

use of org.apache.felix.ipojo.ServiceContext in project felix by apache.

the class TestSimpleImport method testSimple2.

@Test
public void testSimple2() {
    // No provider -> Invalid
    assertTrue("Test component invalidity", import1.getState() == ComponentInstance.INVALID);
    ComponentInstance foo1 = null;
    Properties p = new Properties();
    p.put("instance.name", "foo");
    try {
        foo1 = fooProvider.createComponentInstance(p);
    } catch (Exception e) {
        fail("Fail to instantiate the foo component " + e.getMessage());
    }
    ComponentInstance foo2 = null;
    Properties p2 = new Properties();
    p2.put("instance.name", "foo2");
    try {
        foo2 = fooProvider.createComponentInstance(p2);
    } catch (Exception e) {
        fail("Fail to instantiate the foo2 component " + e.getMessage());
    }
    // The foo service is available => import1 must be valid
    assertTrue("Test component validity", import1.getState() == ComponentInstance.VALID);
    ServiceContext sc = getServiceContext(import1);
    ServiceReference[] refs = ipojoHelper.getServiceReferences(sc, FooService.class.getName(), null);
    assertNotNull("Test foo availability inside the composite - 1", refs);
    assertEquals("Test foo availability inside the composite - 1.2", refs.length, 1);
    FooService fs = (FooService) sc.getService(refs[0]);
    assertTrue("Test foo invocation", fs.foo());
    sc.ungetService(refs[0]);
    // Stop the first provider
    foo1.stop();
    assertTrue("Test component validity", import1.getState() == ComponentInstance.VALID);
    sc = getServiceContext(import1);
    refs = ipojoHelper.getServiceReferences(sc, FooService.class.getName(), null);
    assertNotNull("Test foo availability inside the composite - 2", refs);
    assertEquals("Test foo availability inside the composite - 2.1 (" + refs.length + ")", refs.length, 1);
    fs = (FooService) sc.getService(refs[0]);
    assertTrue("Test foo invocation", fs.foo());
    sc.ungetService(refs[0]);
    // stop the second foo provider
    foo2.dispose();
    // No provider -> Invalid
    assertTrue("Test component invalidity - 2", import1.getState() == ComponentInstance.INVALID);
    foo1.start();
    assertTrue("Test component validity", import1.getState() == ComponentInstance.VALID);
    sc = getServiceContext(import1);
    refs = ipojoHelper.getServiceReferences(sc, FooService.class.getName(), null);
    assertNotNull("Test foo availability inside the composite - 3", refs);
    assertEquals("Test foo availability inside the composite - 3.1", refs.length, 1);
    fs = (FooService) sc.getService(refs[0]);
    assertTrue("Test foo invocation", fs.foo());
    sc.ungetService(refs[0]);
    foo1.dispose();
    // No provider -> Invalid
    assertTrue("Test component invalidity - 3", import1.getState() == ComponentInstance.INVALID);
}
Also used : FooService(org.apache.felix.ipojo.runtime.core.services.FooService) ServiceContext(org.apache.felix.ipojo.ServiceContext) ComponentInstance(org.apache.felix.ipojo.ComponentInstance) Properties(java.util.Properties) ServiceReference(org.osgi.framework.ServiceReference) Test(org.junit.Test)

Example 14 with ServiceContext

use of org.apache.felix.ipojo.ServiceContext in project felix by apache.

the class TestInstanceScope method testScope.

@Test
public void testScope() {
    ServiceReference ref = ipojoHelper.getServiceReferenceByName(Architecture.class.getName(), instance.getInstanceName());
    assertNotNull("Check architecture availability", ref);
    Architecture arch = (Architecture) getContext().getService(ref);
    assertTrue("Validity", arch.getInstanceDescription().getState() == ComponentInstance.VALID);
    // Get internal service
    ServiceContext sc = getServiceContext(instance);
    ServiceReference ref2 = ipojoHelper.getServiceReference(sc, CheckService.class.getName(), null);
    assertNotNull("Check CheckService availability", ref2);
    CheckService svc = (CheckService) sc.getService(ref2);
    Properties props = svc.getProps();
    assertEquals("Check props - 1", 1, ((Integer) props.get("1")).intValue());
    assertEquals("Check props - 2", 2, ((Integer) props.get("2")).intValue());
    assertEquals("Check props - 3", 3, ((Integer) props.get("3")).intValue());
}
Also used : Architecture(org.apache.felix.ipojo.architecture.Architecture) ServiceContext(org.apache.felix.ipojo.ServiceContext) CheckService(org.apache.felix.ipojo.runtime.core.services.CheckService) Properties(java.util.Properties) ServiceReference(org.osgi.framework.ServiceReference) Test(org.junit.Test)

Example 15 with ServiceContext

use of org.apache.felix.ipojo.ServiceContext in project felix by apache.

the class TestSimpleInstance method testServiceAvailabilityLevel2.

@Test
public void testServiceAvailabilityLevel2() {
    ServiceContext sc = getServiceContext(empty);
    Properties props = new Properties();
    props.put("instance.name", "under-X");
    ComponentInstance under = null;
    try {
        under = compoFactory.createComponentInstance(props, sc);
    } catch (Exception e) {
        fail("Cannot instantiate under : " + e.getMessage());
    }
    assertTrue("Check instance validity", under.getState() == ComponentInstance.VALID);
    ServiceContext sc2 = getServiceContext(under);
    assertNotNull("Check service availability", sc2.getServiceReference(FooService.class.getName()));
    assertEquals("Check service providers", ipojoHelper.getServiceReferences(sc2, FooService.class.getName(), null).length, 2);
    under.dispose();
}
Also used : FooService(org.apache.felix.ipojo.runtime.core.services.FooService) ServiceContext(org.apache.felix.ipojo.ServiceContext) ComponentInstance(org.apache.felix.ipojo.ComponentInstance) Properties(java.util.Properties) Test(org.junit.Test)

Aggregations

ServiceContext (org.apache.felix.ipojo.ServiceContext)62 Test (org.junit.Test)60 Properties (java.util.Properties)48 ComponentInstance (org.apache.felix.ipojo.ComponentInstance)47 ServiceReference (org.osgi.framework.ServiceReference)35 FooService (org.apache.felix.ipojo.runtime.core.services.FooService)25 InvalidSyntaxException (org.osgi.framework.InvalidSyntaxException)17 Factory (org.apache.felix.ipojo.Factory)14 CheckService (org.apache.felix.ipojo.runtime.core.services.CheckService)10 ComponentFactory (org.apache.felix.ipojo.ComponentFactory)7 BarService (org.apache.felix.ipojo.runtime.core.services.BarService)6 CompositeInstanceDescription (org.apache.felix.ipojo.composite.CompositeInstanceDescription)4 CompositeManager (org.apache.felix.ipojo.composite.CompositeManager)4 Architecture (org.apache.felix.ipojo.architecture.Architecture)2 List (java.util.List)1 ComponentTypeDescription (org.apache.felix.ipojo.architecture.ComponentTypeDescription)1 InstanceDescription (org.apache.felix.ipojo.architecture.InstanceDescription)1 Attribute (org.apache.felix.ipojo.metadata.Attribute)1 Element (org.apache.felix.ipojo.metadata.Element)1 Ignore (org.junit.Ignore)1