@Override protected ServerNotificationManager createNotificationManager() { ServerNotificationManager manager = new ServerNotificationManager(); manager.addInterfaceToType(MuleContextNotificationListener.class, MuleContextNotification.class); manager.addInterfaceToType(SecurityNotificationListener.class, SecurityNotification.class); manager.addInterfaceToType(ManagementNotificationListener.class, ManagementNotification.class); manager.addInterfaceToType(CustomNotificationListener.class, CustomNotification.class); manager.addInterfaceToType(ConnectionNotificationListener.class, ConnectionNotification.class); manager.addInterfaceToType(ExceptionNotificationListener.class, ExceptionNotification.class); manager.addInterfaceToType(ClusterNodeNotificationListener.class, ClusterNodeNotification.class); manager.addInterfaceToType(ExceptionNotificationListener.class, ExtensionNotification.class); return manager; } }
@Override protected boolean matchesSafely(FlowStackElement flowStackElement) { return flowStackElement.getFlowName().startsWith(flowName) && (executingMessageProcessor == null ? flowStackElement.getProcessorPath() == null : flowStackElement.getProcessorPath().startsWith(executingMessageProcessor + " @")); }
protected void registerDefaultEvents() throws ClassNotFoundException { manager.addInterfaceToType(Listener1.class, SubEvent1.class); manager.addInterfaceToType(Listener2.class, Event2.class); }
@Test public void testNotification() throws ClassNotFoundException { registerDefaultEvents(); registerDefaultListeners(); assertNoListenersNotified(); manager.notifyListeners(new Event1(), (listener, nfn) -> listener.onNotification(nfn)); assertNoListenersNotified(); manager.notifyListeners(new SubEvent1(), (listener, nfn) -> listener.onNotification(nfn)); assertNoListenersNotified(); manager.notifyListeners(new Event1("id1"), (listener, nfn) -> listener.onNotification(nfn)); assertNoListenersNotified(); manager.notifyListeners(new SubSubEvent1("id1"), (listener, nfn) -> listener.onNotification(nfn)); assertTrue(listener1.isNotified()); assertFalse(listener2.isNotified()); manager.notifyListeners(new Event2(), (listener, nfn) -> listener.onNotification(nfn)); assertTrue(listener1.isNotified()); assertTrue(listener2.isNotified()); }
@Test public void fireSpecificNotificationForEvent() { TestServerNotification notification = new TestServerNotification(); helper.fireNotification(notification); verify(eventNotificationHandler).fireNotification(notification); }
@Test public void testDynamicResponseToDisablingInterfaces() throws ClassNotFoundException { registerDefaultEvents(); registerDefaultListeners(); assertStandardEventsEnabled(); // now disable listener 1 manager.disableInterface(Listener1.class); assertFalse("via subclass, but no listener", manager.isNotificationEnabled(Event1.class)); assertFalse("disabled", manager.isNotificationEnabled(SubEvent1.class)); assertFalse("via superclass, but no listener", manager.isNotificationEnabled(SubSubEvent1.class)); assertTrue("direct", manager.isNotificationEnabled(Event2.class)); assertTrue("via superclass", manager.isNotificationEnabled(SubEvent2.class)); assertFalse("not specified at all", manager.isNotificationEnabled(Event3.class)); }
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { if (bean instanceof NotificationListener) { if (!muleContext.getNotificationManager().isListenerRegistered((NotificationListener) bean)) { muleContext.getNotificationManager().addListener((NotificationListener) bean); } } return bean; }
/** * A new policy should only be generated when the configuration changes */ @Test public void testPolicyCaching() throws ClassNotFoundException { registerDefaultEvents(); registerDefaultListeners(); Policy policy = manager.getPolicy(); assertStandardEventsEnabled(); assertSame(policy, manager.getPolicy()); manager.disableType(Event2.class); assertNotSame(policy, manager.getPolicy()); }
@Test public void testDynamicManagerDecisions() throws ClassNotFoundException { registerDefaultEvents(); registerDefaultListeners(); manager.setNotificationDynamic(true); OptimisedNotificationHandler decision = new OptimisedNotificationHandler(manager, Event2.class); assertTrue(decision.isNotificationEnabled(Event2.class)); manager.disableType(Event2.class); assertFalse(decision.isNotificationEnabled(Event2.class)); }
@Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { if (bean instanceof NotificationListener) { muleContext.getNotificationManager().addListener((NotificationListener) bean); } return bean; }
@Before public void setUpListeners() { listener1 = new Listener1(); listener2 = new Listener2(); manager = new ServerNotificationManager(); }
/** * When the manager is not dynamic (the default), decisions should not change */ @Test public void testNonDynamicManagerDecisions() throws ClassNotFoundException { registerDefaultEvents(); registerDefaultListeners(); OptimisedNotificationHandler decision = new OptimisedNotificationHandler(manager, Event2.class); assertTrue(decision.isNotificationEnabled(Event2.class)); manager.disableType(Event2.class); assertTrue(decision.isNotificationEnabled(Event2.class)); }
@Test public void testAssociationOfInterfacesAndEvents() throws ClassNotFoundException { registerDefaultEvents(); registerDefaultListeners(); assertStandardEventsEnabled(); }
protected void assertNoEventsEnabled() { assertFalse(manager.isNotificationEnabled(Event1.class)); assertFalse(manager.isNotificationEnabled(SubEvent1.class)); assertFalse(manager.isNotificationEnabled(SubSubEvent1.class)); assertFalse(manager.isNotificationEnabled(Event2.class)); assertFalse(manager.isNotificationEnabled(SubEvent2.class)); assertFalse(manager.isNotificationEnabled(Event3.class)); }
@Test public void testNoListenersMeansNoEvents() throws ClassNotFoundException { registerDefaultEvents(); assertNoEventsEnabled(); }
protected void assertNoListenersNotified() { assertFalse(listener1.isNotified()); assertFalse(listener2.isNotified()); }
public ServerNotificationsTestCase() { setStartContext(true); }
@Override protected void describeMismatchSafely(ProcessorsTrace item, Description description) { description.appendText("was ").appendValue(item.getExecutedProcessors()); } };
@Test public void fireSpecificNotificationOnDefaultHandler() { TestServerNotification notification = new TestServerNotification(); helper.fireNotification(notification); verify(eventNotificationHandler).fireNotification(notification); }
protected void assertStandardEventsEnabled() { assertTrue("via subclass", manager.isNotificationEnabled(Event1.class)); assertTrue("direct", manager.isNotificationEnabled(SubEvent1.class)); assertTrue("via superclass", manager.isNotificationEnabled(SubSubEvent1.class)); assertTrue("direct", manager.isNotificationEnabled(Event2.class)); assertTrue("via superclass", manager.isNotificationEnabled(SubEvent2.class)); assertFalse("not specified at all", manager.isNotificationEnabled(Event3.class)); }