// 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...
assertFalse(check.check()); // Unregister
assertEquals(1, registrations);
assertEquals(2, unregistrations);
assertEquals(1, updates);
assertEquals(4, total);
assertTrue(check.check()); // Register
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
assertFalse(check.check()); // Unregister
assertEquals(2, registrations);
assertEquals(2, unregistrations);
assertEquals(1, updates);
assertEquals(5, total);
assertTrue(check.check()); // Register
assertEquals(2, registrations);
assertEquals(2, unregistrations);
assertEquals(1, updates);
assertEquals(5, total);
props.clear(); props.put("change3", "3"); ps.addProperties(props); // Modify