blob: 0f9256f85cbd15d26c50ba4e44d7a30101da14a2 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2010 IBM Corporation and others
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.equinox.event.tests;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import java.util.Dictionary;
import java.util.Hashtable;
import org.eclipse.equinox.compendium.tests.Activator;
import org.junit.*;
import org.osgi.framework.*;
import org.osgi.service.event.*;
public class EventAdminTest {
private EventAdmin eventAdmin;
private ServiceReference<EventAdmin> eventAdminReference;
@Before
public void setUp() throws Exception {
eventAdminReference = Activator.getBundleContext().getServiceReference(EventAdmin.class);
eventAdmin = Activator.getBundleContext().getService(eventAdminReference);
}
@After
public void tearDown() throws Exception {
Activator.getBundleContext().ungetService(eventAdminReference);
}
/*
* Ensures EventAdmin does not deliver an event published on topic "a/b/c"
* to an EventHandler listening to topic a/b/c/*.
*
* See https://bugs.eclipse.org/bugs/show_bug.cgi?id=325064.
*/
@Test
public void testEventDeliveryForWildcardTopic1() {
Dictionary<String, Object> properties = new Hashtable<String, Object>();
properties.put(EventConstants.EVENT_TOPIC, "a/b/c/*"); //$NON-NLS-1$
BundleContext bundleContext = Activator.getBundleContext();
EventHandlerHelper handler = new EventHandlerHelper();
ServiceRegistration<EventHandler> handlerRegistration = bundleContext.registerService(EventHandler.class, handler, properties);
Event event = new Event("a/b/c", (Dictionary<String, Object>) null); //$NON-NLS-1$
eventAdmin.sendEvent(event);
assertNull("Received event published to topic 'a/b/c' while listening to 'a/b/c/*'", handler.lastEvent()); //$NON-NLS-1$
handlerRegistration.unregister();
}
/*
* Ensures EventAdmin does not deliver an event published on topic "a/b" to
* an EventHandler listening to topic a/b/c/*.
*/
@Test
public void testEventDeliveryForWildcardTopic2() {
Dictionary<String, Object> properties = new Hashtable<String, Object>();
properties.put(EventConstants.EVENT_TOPIC, "a/b/c/*"); //$NON-NLS-1$
BundleContext bundleContext = Activator.getBundleContext();
EventHandlerHelper handler = new EventHandlerHelper();
ServiceRegistration<EventHandler> handlerRegistration = bundleContext.registerService(EventHandler.class, handler, properties);
Event event = new Event("a/b", (Dictionary<String, Object>) null); //$NON-NLS-1$
eventAdmin.sendEvent(event);
assertNull("Received event published to topic 'a/b' while listening to 'a/b/c/*'", handler.lastEvent()); //$NON-NLS-1$
handlerRegistration.unregister();
}
/*
* Ensures EventAdmin does not deliver an event published on topic "a" to
* an EventHandler listening to topic a/b/c/*.
*/
@Test
public void testEventDeliveryForWildcardTopic3() {
Dictionary<String, Object> properties = new Hashtable<String, Object>();
properties.put(EventConstants.EVENT_TOPIC, "a/b/c/*"); //$NON-NLS-1$
BundleContext bundleContext = Activator.getBundleContext();
EventHandlerHelper handler = new EventHandlerHelper();
ServiceRegistration<EventHandler> handlerRegistration = bundleContext.registerService(EventHandler.class, handler, properties);
Event event = new Event("a", (Dictionary<String, Object>) null); //$NON-NLS-1$
eventAdmin.sendEvent(event);
assertNull("Received event published to topic 'a' while listening to 'a/b/c/*'", handler.lastEvent()); //$NON-NLS-1$
handlerRegistration.unregister();
}
/*
* Ensures EventAdmin delivers an event published on topic "a/b/c/d" to an
* EventHandler listening to topic "a/b/c/*".
*/
@Test
public void testEventDeliveryForWildcardTopic4() {
Dictionary<String, Object> properties = new Hashtable<String, Object>();
properties.put(EventConstants.EVENT_TOPIC, "a/b/c/*"); //$NON-NLS-1$
BundleContext bundleContext = Activator.getBundleContext();
EventHandlerHelper handler = new EventHandlerHelper();
ServiceRegistration<EventHandler> handlerRegistration = bundleContext.registerService(EventHandler.class, handler, properties);
Event event = new Event("a/b/c/d", (Dictionary<String, Object>) null); //$NON-NLS-1$
eventAdmin.sendEvent(event);
assertNotNull("Did not receive event published to topic 'a/b/c/d' while listening to 'a/b/c/*'", handler.lastEvent()); //$NON-NLS-1$
handlerRegistration.unregister();
}
/*
* Ensures EventAdmin delivers an event published on topic "a/b/c/d/e" to
* an EventHandler listening to topic "a/b/c/*".
*/
@Test
public void testEventDeliveryForWildcardTopic5() {
Dictionary<String, Object> properties = new Hashtable<String, Object>();
properties.put(EventConstants.EVENT_TOPIC, "a/b/c/*"); //$NON-NLS-1$
BundleContext bundleContext = Activator.getBundleContext();
EventHandlerHelper handler = new EventHandlerHelper();
ServiceRegistration<EventHandler> handlerRegistration = bundleContext.registerService(EventHandler.class, handler, properties);
Event event = new Event("a/b/c/d/e", (Dictionary<String, Object>) null); //$NON-NLS-1$
eventAdmin.sendEvent(event);
assertNotNull("Did not receive event published to topic 'a/b/c/d/e' while listening to 'a/b/c/*'", handler.lastEvent()); //$NON-NLS-1$
handlerRegistration.unregister();
}
/*
* Ensures EventAdmin delivers an event published on topic "a/b/c/d/e/f" to
* an EventHandler listening to topic "a/b/c/*".
*/
@Test
public void testEventDeliveryForWildcardTopic6() {
Dictionary<String, Object> properties = new Hashtable<String, Object>();
properties.put(EventConstants.EVENT_TOPIC, "a/b/c/*"); //$NON-NLS-1$
BundleContext bundleContext = Activator.getBundleContext();
EventHandlerHelper handler = new EventHandlerHelper();
ServiceRegistration<EventHandler> handlerRegistration = bundleContext.registerService(EventHandler.class, handler, properties);
Event event = new Event("a/b/c/d/e/f", (Dictionary<String, Object>) null); //$NON-NLS-1$
eventAdmin.sendEvent(event);
assertNotNull("Did not receive event published to topic 'a/b/c/d/e/f' while listening to 'a/b/c/*'", handler.lastEvent()); //$NON-NLS-1$
handlerRegistration.unregister();
}
/*
* Ensures EventAdmin delivers an event published to topics "a/b/c" and
* "a/b/c/d" to an EventHandler listening to topics "a/b/c" and "a/b/c/*".
*
* See https://bugs.eclipse.org/bugs/show_bug.cgi?id=325064.
*/
@Test
public void testEventDeliveryForWildcardTopic7() {
Dictionary<String, Object> properties = new Hashtable<String, Object>();
properties.put(EventConstants.EVENT_TOPIC, new String[] {"a/b/c", "a/b/c/*"}); //$NON-NLS-1$ //$NON-NLS-2$
BundleContext bundleContext = Activator.getBundleContext();
EventHandlerHelper handler = new EventHandlerHelper();
ServiceRegistration<EventHandler> handlerRegistration = bundleContext.registerService(EventHandler.class, handler, properties);
Event event = new Event("a/b/c", (Dictionary<String, Object>) null); //$NON-NLS-1$
eventAdmin.sendEvent(event);
assertNotNull("Did not receive event published to topic 'a/b/c' while listening to 'a/b/c'", handler.clearLastEvent()); //$NON-NLS-1$
event = new Event("a/b/c/d", (Dictionary<String, Object>) null); //$NON-NLS-1$
eventAdmin.sendEvent(event);
assertNotNull("Did not receive event published to topic 'a/b/c/d' while listening to 'a/b/c/*'", handler.lastEvent()); //$NON-NLS-1$
handlerRegistration.unregister();
}
}