Search in sources :

Example 1 with ProvidedServiceListener

use of org.apache.felix.ipojo.handlers.providedservice.ProvidedServiceListener in project felix by apache.

the class TestListeners method testProvidedServiceListener.

/**
 * Test that the listeners registered on the tested instance are called when the instance provided service is
 * registered, updated or unregistered.
 */
@Test
public void testProvidedServiceListener() {
    ComponentInstance ci = ipojoHelper.createComponentInstance("PS-Controller-1-default");
    ProvidedServiceHandlerDescription pshd = (ProvidedServiceHandlerDescription) ci.getInstanceDescription().getHandlerDescription("org.apache.felix.ipojo:provides");
    ProvidedServiceDescription ps = getPS(FooService.class.getName(), pshd.getProvidedServices());
    // Controller set to true.
    osgiHelper.waitForService(FooService.class.getName(), null, 5000);
    osgiHelper.waitForService(CheckService.class.getName(), null, 5000);
    CheckService check = (CheckService) osgiHelper.getServiceObject(CheckService.class.getName(), null);
    assertNotNull(check);
    // Register listeners :
    // 1- CountingListener l1
    // 2- ThrowingListener bad
    // 3- TotalCountingListener l2
    // 4- AppendingListener l3
    ProvidedServiceListener l1 = new CountingListener();
    ps.addListener(l1);
    ProvidedServiceListener bad = new ThrowingListener();
    ps.addListener(bad);
    ProvidedServiceListener l2 = new TotalCountingListener();
    ps.addListener(l2);
    ProvidedServiceListener l3 = new AppendingListener();
    ps.addListener(l3);
    // Check initial valued are untouched
    assertEquals(0, registrations);
    assertEquals(0, unregistrations);
    assertEquals(0, updates);
    assertEquals(0, total);
    // Unregister the service and check.
    assertFalse(check.check());
    assertEquals(0, registrations);
    assertEquals(1, unregistrations);
    assertEquals(0, updates);
    assertEquals(1, total);
    // Modify the service while it is unregistered. Nothing should move.
    Hashtable<String, Object> props = new Hashtable<String, Object>();
    props.put("change1", "1");
    ps.addProperties(props);
    assertEquals(0, registrations);
    assertEquals(1, unregistrations);
    assertEquals(0, updates);
    assertEquals(1, total);
    // Register the service and check.
    assertTrue(check.check());
    assertEquals(1, registrations);
    assertEquals(1, unregistrations);
    assertEquals(0, updates);
    assertEquals(2, total);
    // Modify the service while it is REGISTERED
    props.clear();
    props.put("change2", "2");
    ps.addProperties(props);
    assertEquals(1, registrations);
    assertEquals(1, unregistrations);
    assertEquals(1, updates);
    assertEquals(3, total);
    // One more time, just to be sure...
    // Unregister
    assertFalse(check.check());
    assertEquals(1, registrations);
    assertEquals(2, unregistrations);
    assertEquals(1, updates);
    assertEquals(4, total);
    // Register
    assertTrue(check.check());
    assertEquals(2, registrations);
    assertEquals(2, unregistrations);
    assertEquals(1, updates);
    assertEquals(5, total);
    // Unregister the listener
    ps.removeListener(l1);
    ps.removeListener(bad);
    ps.removeListener(l2);
    ps.removeListener(l3);
    // Play with the controller and check that nothing moves
    // Unregister
    assertFalse(check.check());
    assertEquals(2, registrations);
    assertEquals(2, unregistrations);
    assertEquals(1, updates);
    assertEquals(5, total);
    // Register
    assertTrue(check.check());
    assertEquals(2, registrations);
    assertEquals(2, unregistrations);
    assertEquals(1, updates);
    assertEquals(5, total);
    // Modify
    props.clear();
    // Modify
    props.put("change3", "3");
    // Modify
    ps.addProperties(props);
    assertEquals(2, registrations);
    assertEquals(2, unregistrations);
    assertEquals(1, updates);
    assertEquals(5, total);
    // Check that instances contains $total times the ci component instance, and nothing else.
    assertEquals(5, instances.size());
    instances.removeAll(Collections.singleton(ci));
    assertEquals(0, instances.size());
    ci.dispose();
}
Also used : ProvidedServiceListener(org.apache.felix.ipojo.handlers.providedservice.ProvidedServiceListener) ProvidedServiceHandlerDescription(org.apache.felix.ipojo.handlers.providedservice.ProvidedServiceHandlerDescription) FooService(org.apache.felix.ipojo.runtime.core.services.FooService) ProvidedServiceDescription(org.apache.felix.ipojo.handlers.providedservice.ProvidedServiceDescription) ComponentInstance(org.apache.felix.ipojo.ComponentInstance) CheckService(org.apache.felix.ipojo.runtime.core.services.CheckService) Test(org.junit.Test)

Aggregations

ComponentInstance (org.apache.felix.ipojo.ComponentInstance)1 ProvidedServiceDescription (org.apache.felix.ipojo.handlers.providedservice.ProvidedServiceDescription)1 ProvidedServiceHandlerDescription (org.apache.felix.ipojo.handlers.providedservice.ProvidedServiceHandlerDescription)1 ProvidedServiceListener (org.apache.felix.ipojo.handlers.providedservice.ProvidedServiceListener)1 CheckService (org.apache.felix.ipojo.runtime.core.services.CheckService)1 FooService (org.apache.felix.ipojo.runtime.core.services.FooService)1 Test (org.junit.Test)1