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"));
             }
         };
     }


Reply via email to