Author: davsclaus Date: Sun Jun 26 08:36:18 2011 New Revision: 1139733 URL: http://svn.apache.org/viewvc?rev=1139733&view=rev Log: CAMEL-4154: Added removeEventNotifier to ManagementStrategy
Added: camel/trunk/camel-core/src/test/java/org/apache/camel/management/AddEventNotifierTest.java camel/trunk/camel-core/src/test/java/org/apache/camel/management/RemoveEventNotifierTest.java - copied, changed from r1139719, camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierEventsTest.java Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ManagementStrategy.java Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java?rev=1139733&r1=1139732&r2=1139733&view=diff ============================================================================== --- camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java (original) +++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/DefaultManagementStrategy.java Sun Jun 26 08:36:18 2011 @@ -63,6 +63,10 @@ public class DefaultManagementStrategy i this.eventNotifiers.add(eventNotifier); } + public boolean removeEventNotifier(EventNotifier eventNotifier) { + return eventNotifiers.remove(eventNotifier); + } + public void setEventNotifiers(List<EventNotifier> eventNotifiers) { this.eventNotifiers = eventNotifiers; } Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ManagementStrategy.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ManagementStrategy.java?rev=1139733&r1=1139732&r2=1139733&view=diff ============================================================================== --- camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ManagementStrategy.java (original) +++ camel/trunk/camel-core/src/main/java/org/apache/camel/spi/ManagementStrategy.java Sun Jun 26 08:36:18 2011 @@ -51,12 +51,23 @@ public interface ManagementStrategy exte /** * Adds the event notifier to use. + * <p/> + * Ensure the event notifier has been started if its a {@link Service}, as otherwise + * it would not be used. * * @param eventNotifier event notifier */ void addEventNotifier(EventNotifier eventNotifier); /** + * Removes the event notifier + * + * @param eventNotifier event notifier to remove + * @return <tt>true</tt> if removed, <tt>false</tt> if already removed + */ + boolean removeEventNotifier(EventNotifier eventNotifier); + + /** * Gets the event factory * * @return event factory Added: camel/trunk/camel-core/src/test/java/org/apache/camel/management/AddEventNotifierTest.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/management/AddEventNotifierTest.java?rev=1139733&view=auto ============================================================================== --- camel/trunk/camel-core/src/test/java/org/apache/camel/management/AddEventNotifierTest.java (added) +++ camel/trunk/camel-core/src/test/java/org/apache/camel/management/AddEventNotifierTest.java Sun Jun 26 08:36:18 2011 @@ -0,0 +1,98 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.management; + +import java.util.ArrayList; +import java.util.EventObject; +import java.util.List; + +import org.apache.camel.ContextTestSupport; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.spi.EventNotifier; + +/** + * @version + */ +public class AddEventNotifierTest extends ContextTestSupport { + + private static List<EventObject> events = new ArrayList<EventObject>(); + private EventNotifier notifier; + + @Override + public void setUp() throws Exception { + events.clear(); + super.setUp(); + } + + public void testAddAndRemove() throws Exception { + getMockEndpoint("mock:result").expectedMessageCount(1); + template.sendBody("direct:start", "Hello World"); + assertMockEndpointsSatisfied(); + + assertEquals(0, events.size()); + + // we should be able to add after CamelContext has been started + notifier = new EventNotifierSupport() { + public void notify(EventObject event) throws Exception { + events.add(event); + } + + public boolean isEnabled(EventObject event) { + return true; + } + + @Override + protected void doStart() throws Exception { + } + + @Override + protected void doStop() throws Exception { + } + }; + // must add notifier as a service so its started + context.addService(notifier); + context.getManagementStrategy().addEventNotifier(notifier); + + resetMocks(); + getMockEndpoint("mock:result").expectedMessageCount(1); + template.sendBody("direct:start", "Bye World"); + assertMockEndpointsSatisfied(); + + assertEquals(5, events.size()); + + // remove and we should not get new events + context.getManagementStrategy().removeEventNotifier(notifier); + + resetMocks(); + getMockEndpoint("mock:result").expectedMessageCount(1); + template.sendBody("direct:start", "Hi World"); + assertMockEndpointsSatisfied(); + + assertEquals(5, events.size()); + } + + @Override + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + @Override + public void configure() throws Exception { + from("direct:start").to("log:foo").to("mock:result"); + } + }; + } + +} Copied: camel/trunk/camel-core/src/test/java/org/apache/camel/management/RemoveEventNotifierTest.java (from r1139719, camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierEventsTest.java) URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/management/RemoveEventNotifierTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/management/RemoveEventNotifierTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierEventsTest.java&r1=1139719&r2=1139733&rev=1139733&view=diff ============================================================================== --- camel/trunk/camel-core/src/test/java/org/apache/camel/management/EventNotifierEventsTest.java (original) +++ camel/trunk/camel-core/src/test/java/org/apache/camel/management/RemoveEventNotifierTest.java Sun Jun 26 08:36:18 2011 @@ -24,27 +24,15 @@ import org.apache.camel.CamelContext; import org.apache.camel.ContextTestSupport; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.impl.DefaultCamelContext; -import org.apache.camel.management.event.CamelContextResumedEvent; -import org.apache.camel.management.event.CamelContextResumingEvent; -import org.apache.camel.management.event.CamelContextStartedEvent; -import org.apache.camel.management.event.CamelContextStartingEvent; -import org.apache.camel.management.event.CamelContextStoppedEvent; -import org.apache.camel.management.event.CamelContextStoppingEvent; -import org.apache.camel.management.event.CamelContextSuspendedEvent; -import org.apache.camel.management.event.CamelContextSuspendingEvent; -import org.apache.camel.management.event.ExchangeCompletedEvent; -import org.apache.camel.management.event.ExchangeCreatedEvent; -import org.apache.camel.management.event.ExchangeFailedEvent; -import org.apache.camel.management.event.ExchangeSentEvent; -import org.apache.camel.management.event.RouteStartedEvent; -import org.apache.camel.management.event.RouteStoppedEvent; +import org.apache.camel.spi.EventNotifier; /** * @version */ -public class EventNotifierEventsTest extends ContextTestSupport { +public class RemoveEventNotifierTest extends ContextTestSupport { private static List<EventObject> events = new ArrayList<EventObject>(); + private EventNotifier notifier; @Override public void setUp() throws Exception { @@ -55,7 +43,8 @@ public class EventNotifierEventsTest ext @Override protected CamelContext createCamelContext() throws Exception { DefaultCamelContext context = new DefaultCamelContext(createRegistry()); - context.getManagementStrategy().addEventNotifier(new EventNotifierSupport() { + + notifier = new EventNotifierSupport() { public void notify(EventObject event) throws Exception { events.add(event); } @@ -71,88 +60,28 @@ public class EventNotifierEventsTest ext @Override protected void doStop() throws Exception { } - }); + }; + context.getManagementStrategy().addEventNotifier(notifier); + return context; } - public void testExchangeDone() throws Exception { + public void testRemove() throws Exception { getMockEndpoint("mock:result").expectedMessageCount(1); - template.sendBody("direct:start", "Hello World"); - assertMockEndpointsSatisfied(); - assertEquals(9, events.size()); - assertIsInstanceOf(CamelContextStartingEvent.class, events.get(0)); - assertIsInstanceOf(RouteStartedEvent.class, events.get(1)); - assertIsInstanceOf(RouteStartedEvent.class, events.get(2)); - assertIsInstanceOf(CamelContextStartedEvent.class, events.get(3)); - assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(4)); - assertIsInstanceOf(ExchangeSentEvent.class, events.get(5)); - assertIsInstanceOf(ExchangeSentEvent.class, events.get(6)); - assertIsInstanceOf(ExchangeCompletedEvent.class, events.get(7)); - - // this is the sent using the produce template to start the test - assertIsInstanceOf(ExchangeSentEvent.class, events.get(8)); - - context.stop(); - - assertEquals(13, events.size()); - assertIsInstanceOf(CamelContextStoppingEvent.class, events.get(9)); - assertIsInstanceOf(RouteStoppedEvent.class, events.get(10)); - assertIsInstanceOf(RouteStoppedEvent.class, events.get(11)); - assertIsInstanceOf(CamelContextStoppedEvent.class, events.get(12)); - } + assertEquals(8, events.size()); - public void testExchangeFailed() throws Exception { - try { - template.sendBody("direct:fail", "Hello World"); - fail("Should have thrown an exception"); - } catch (Exception e) { - // expected - assertIsInstanceOf(IllegalArgumentException.class, e.getCause()); - } - - assertEquals(7, events.size()); - assertIsInstanceOf(CamelContextStartingEvent.class, events.get(0)); - assertIsInstanceOf(RouteStartedEvent.class, events.get(1)); - assertIsInstanceOf(RouteStartedEvent.class, events.get(2)); - assertIsInstanceOf(CamelContextStartedEvent.class, events.get(3)); - assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(4)); - assertIsInstanceOf(ExchangeFailedEvent.class, events.get(5)); - // this is the sent using the produce template to start the test - assertIsInstanceOf(ExchangeSentEvent.class, events.get(6)); - - context.stop(); - - assertEquals(11, events.size()); - assertIsInstanceOf(CamelContextStoppingEvent.class, events.get(7)); - assertIsInstanceOf(RouteStoppedEvent.class, events.get(8)); - assertIsInstanceOf(RouteStoppedEvent.class, events.get(9)); - assertIsInstanceOf(CamelContextStoppedEvent.class, events.get(10)); - } + // remove and we should not get new events + context.getManagementStrategy().removeEventNotifier(notifier); - public void testSuspendResume() throws Exception { - assertEquals(4, events.size()); - assertIsInstanceOf(CamelContextStartingEvent.class, events.get(0)); - assertIsInstanceOf(RouteStartedEvent.class, events.get(1)); - assertIsInstanceOf(RouteStartedEvent.class, events.get(2)); - assertIsInstanceOf(CamelContextStartedEvent.class, events.get(3)); - - context.suspend(); - - assertEquals(6, events.size()); - assertIsInstanceOf(CamelContextSuspendingEvent.class, events.get(4)); - // notice direct component is not suspended (as they are internal) - assertIsInstanceOf(CamelContextSuspendedEvent.class, events.get(5)); - - context.resume(); - - assertEquals(10, events.size()); - assertIsInstanceOf(CamelContextResumingEvent.class, events.get(6)); - assertIsInstanceOf(RouteStartedEvent.class, events.get(7)); - assertIsInstanceOf(RouteStartedEvent.class, events.get(8)); - assertIsInstanceOf(CamelContextResumedEvent.class, events.get(9)); + resetMocks(); + getMockEndpoint("mock:result").expectedMessageCount(1); + template.sendBody("direct:start", "Bye World"); + assertMockEndpointsSatisfied(); + + assertEquals(8, events.size()); } @Override @@ -161,8 +90,6 @@ public class EventNotifierEventsTest ext @Override public void configure() throws Exception { from("direct:start").to("log:foo").to("mock:result"); - - from("direct:fail").throwException(new IllegalArgumentException("Damn")); } }; }