Added header to enable overriding metrics name in the URI.

Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/85ca4c1f
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/85ca4c1f
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/85ca4c1f

Branch: refs/heads/master
Commit: 85ca4c1f8b67480415077f0316e4ac66f11db079
Parents: 89abb88
Author: Lauri Kimmel <lauri.kim...@gmx.com>
Authored: Tue May 20 23:03:48 2014 +1000
Committer: Lauri Kimmel <lauri.kim...@gmx.com>
Committed: Tue May 20 23:03:48 2014 +1000

----------------------------------------------------------------------
 README.md                                       | 16 ++++
 .../camel/metrics/AbstractMetricsEndpoint.java  | 18 +++++
 .../apache/camel/metrics/MetricsComponent.java  |  1 +
 .../camel/metrics/counter/CounterProducer.java  |  2 +-
 .../metrics/histogram/HistogramProducer.java    |  2 +-
 .../camel/metrics/meter/MeterProducer.java      |  2 +-
 .../camel/metrics/timer/TimerProducer.java      |  2 +-
 .../metrics/AbstractMetricsEndpointTest.java    | 82 +++++++++++++++++++-
 .../metrics/MetricComponentSpringTest.java      |  2 +-
 .../metrics/MetricsComponentRouteTest.java      | 22 ++++++
 .../metrics/counter/CounterProducerTest.java    | 10 +--
 .../camel/metrics/counter/CounterRouteTest.java | 78 +++++++++++++++++++
 .../histogram/HistogramProducerTest.java        |  6 +-
 .../metrics/histogram/HistogramRouteTest.java   | 78 +++++++++++++++++++
 .../camel/metrics/meter/MeterProducerTest.java  |  6 +-
 .../camel/metrics/meter/MeterRouteTest.java     | 78 +++++++++++++++++++
 .../camel/metrics/timer/TimerProducerTest.java  |  8 +-
 .../camel/metrics/timer/TimerRouteTest.java     | 78 +++++++++++++++++++
 18 files changed, 470 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/85ca4c1f/README.md
----------------------------------------------------------------------
diff --git a/README.md b/README.md
index 6a46282..34bbb23 100644
--- a/README.md
+++ b/README.md
@@ -57,6 +57,22 @@ MetricRegistry instance can be configured by adding bean 
with name ```metricRegi
 
 Each metric has type and name. Supported types are ```counter```, ```meter```, 
```histogram``` and ```timer```. Metric name is simple string. If metric type 
is not provided then type ```meter``` is used by default.
 
+### Headers
+
+Metric name defined in URI can be overridden by using Header with name 
```org.apache.camel.metrics.metricName```.
+
+For example
+
+```java
+from("direct:in")
+    .setHeader(MetricsComponent.HEADER_METRIC_NAME, constant("new.name"))
+    .to("metrics:counter:name.not.used")
+    .to("direct:out")
+```
+
+will update counter with name ```new.name``` instead of ```name.not.used```.
+
+
 ## Metrics type counter
 
 ```

http://git-wip-us.apache.org/repos/asf/camel/blob/85ca4c1f/src/main/java/org/apache/camel/metrics/AbstractMetricsEndpoint.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/camel/metrics/AbstractMetricsEndpoint.java 
b/src/main/java/org/apache/camel/metrics/AbstractMetricsEndpoint.java
index d8c8af7..9560758 100644
--- a/src/main/java/org/apache/camel/metrics/AbstractMetricsEndpoint.java
+++ b/src/main/java/org/apache/camel/metrics/AbstractMetricsEndpoint.java
@@ -1,9 +1,12 @@
 package org.apache.camel.metrics;
 
 import org.apache.camel.Consumer;
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
 import org.apache.camel.Processor;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.impl.DefaultEndpoint;
+import org.apache.camel.util.ObjectHelper;
 
 import com.codahale.metrics.MetricRegistry;
 
@@ -34,4 +37,19 @@ public abstract class AbstractMetricsEndpoint extends 
DefaultEndpoint {
     public String getMetricsName() {
         return metricsName;
     }
+
+    public String getMetricsName(Exchange exchange) {
+        return getStringHeader(exchange, MetricsComponent.HEADER_METRIC_NAME, 
metricsName);
+    }
+
+    public String getStringHeader(Exchange exchange, String header, String 
defaultValue) {
+        Message in = exchange.getIn();
+        String headerValue = in.getHeader(header, String.class);
+        return ObjectHelper.isNotEmpty(headerValue) ? headerValue : 
defaultValue;
+    }
+
+    public Long getLongHeader(Exchange exchange, String header, Long 
defaultValue) {
+        Message in = exchange.getIn();
+        return in.getHeader(header, defaultValue, Long.class);
+    }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/85ca4c1f/src/main/java/org/apache/camel/metrics/MetricsComponent.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/camel/metrics/MetricsComponent.java 
b/src/main/java/org/apache/camel/metrics/MetricsComponent.java
index 1f467c4..bc4a2af 100644
--- a/src/main/java/org/apache/camel/metrics/MetricsComponent.java
+++ b/src/main/java/org/apache/camel/metrics/MetricsComponent.java
@@ -26,6 +26,7 @@ public class MetricsComponent extends DefaultComponent {
     public static final String METRIC_REGISTRY_NAME = "metricRegistry";
     public static final MetricsType DEFAULT_METRICS_TYPE = MetricsType.METER;
     public static final long DEFAULT_REPORTING_INTERVAL_SECONDS = 60L;
+    public static final String HEADER_METRIC_NAME = 
"org.apache.camel.metrics.metricName";
 
     private static final Logger LOG = 
LoggerFactory.getLogger(MetricsComponent.class);
 

http://git-wip-us.apache.org/repos/asf/camel/blob/85ca4c1f/src/main/java/org/apache/camel/metrics/counter/CounterProducer.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/camel/metrics/counter/CounterProducer.java 
b/src/main/java/org/apache/camel/metrics/counter/CounterProducer.java
index 19c470f..ec9f426 100644
--- a/src/main/java/org/apache/camel/metrics/counter/CounterProducer.java
+++ b/src/main/java/org/apache/camel/metrics/counter/CounterProducer.java
@@ -15,7 +15,7 @@ public class CounterProducer extends DefaultProducer {
     @Override
     public void process(Exchange exchange) throws Exception {
         CounterEndpoint endpoint = (CounterEndpoint) getEndpoint();
-        String metricName = endpoint.getMetricsName();
+        String metricName = endpoint.getMetricsName(exchange);
         Counter counter = endpoint.getRegistry().counter(metricName);
         Long increment = endpoint.getIncrement();
         Long decrement = endpoint.getDecrement();

http://git-wip-us.apache.org/repos/asf/camel/blob/85ca4c1f/src/main/java/org/apache/camel/metrics/histogram/HistogramProducer.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/camel/metrics/histogram/HistogramProducer.java 
b/src/main/java/org/apache/camel/metrics/histogram/HistogramProducer.java
index 9a15607..41b5cf7 100644
--- a/src/main/java/org/apache/camel/metrics/histogram/HistogramProducer.java
+++ b/src/main/java/org/apache/camel/metrics/histogram/HistogramProducer.java
@@ -21,7 +21,7 @@ public class HistogramProducer extends DefaultProducer {
     public void process(Exchange exchange) throws Exception {
         HistogramEndpoint endpoint = (HistogramEndpoint) getEndpoint();
         MetricRegistry registry = endpoint.getRegistry();
-        String metricsName = endpoint.getMetricsName();
+        String metricsName = endpoint.getMetricsName(exchange);
         Histogram histogram = registry.histogram(metricsName);
         Long value = endpoint.getValue();
         if (value != null) {

http://git-wip-us.apache.org/repos/asf/camel/blob/85ca4c1f/src/main/java/org/apache/camel/metrics/meter/MeterProducer.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/camel/metrics/meter/MeterProducer.java 
b/src/main/java/org/apache/camel/metrics/meter/MeterProducer.java
index 6cb7896..0de6ba5 100644
--- a/src/main/java/org/apache/camel/metrics/meter/MeterProducer.java
+++ b/src/main/java/org/apache/camel/metrics/meter/MeterProducer.java
@@ -16,7 +16,7 @@ public class MeterProducer extends DefaultProducer {
     @Override
     public void process(Exchange exchange) throws Exception {
         MeterEndpoint endpoint = (MeterEndpoint) getEndpoint();
-        String metricsName = endpoint.getMetricsName();
+        String metricsName = endpoint.getMetricsName(exchange);
         MetricRegistry registry = endpoint.getRegistry();
         Meter meter = registry.meter(metricsName);
         Long mark = endpoint.getMark();

http://git-wip-us.apache.org/repos/asf/camel/blob/85ca4c1f/src/main/java/org/apache/camel/metrics/timer/TimerProducer.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/camel/metrics/timer/TimerProducer.java 
b/src/main/java/org/apache/camel/metrics/timer/TimerProducer.java
index f655352..bd8e2b1 100644
--- a/src/main/java/org/apache/camel/metrics/timer/TimerProducer.java
+++ b/src/main/java/org/apache/camel/metrics/timer/TimerProducer.java
@@ -22,7 +22,7 @@ public class TimerProducer extends DefaultProducer {
     public void process(Exchange exchange) throws Exception {
         TimerEndpoint endpoint = (TimerEndpoint) getEndpoint();
         MetricRegistry registry = endpoint.getRegistry();
-        String metricsName = endpoint.getMetricsName();
+        String metricsName = endpoint.getMetricsName(exchange);
         TimerAction action = endpoint.getAction();
         if (action == TimerAction.start) {
             handleStart(exchange, registry, metricsName);

http://git-wip-us.apache.org/repos/asf/camel/blob/85ca4c1f/src/test/java/org/apache/camel/metrics/AbstractMetricsEndpointTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/camel/metrics/AbstractMetricsEndpointTest.java 
b/src/test/java/org/apache/camel/metrics/AbstractMetricsEndpointTest.java
index 0b24cf8..824581c 100644
--- a/src/test/java/org/apache/camel/metrics/AbstractMetricsEndpointTest.java
+++ b/src/test/java/org/apache/camel/metrics/AbstractMetricsEndpointTest.java
@@ -2,7 +2,11 @@ package org.apache.camel.metrics;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.when;
 
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
 import org.apache.camel.RuntimeCamelException;
@@ -21,6 +25,11 @@ import com.codahale.metrics.MetricRegistry;
 public class AbstractMetricsEndpointTest {
 
     private static final String METRICS_NAME = "metrics.name";
+    private static final String HEADER = "header";
+    private static final String STRING_VALUE = "string-value";
+    private static final String DEFAULT_STRING_VALUE = "default-value";
+    private static final Long LONG_VALUE = System.currentTimeMillis();
+    private static final Long DEFAULT_LONG_VALUE = -10101L;
 
     @Mock
     private MetricRegistry registry;
@@ -28,6 +37,12 @@ public class AbstractMetricsEndpointTest {
     @Mock
     private Processor processor;
 
+    @Mock
+    private Exchange exchange;
+
+    @Mock
+    private Message in;
+
     private AbstractMetricsEndpoint endpoint;
 
     private InOrder inOrder;
@@ -45,7 +60,8 @@ public class AbstractMetricsEndpointTest {
                 return "not real endpoint";
             }
         };
-        inOrder = Mockito.inOrder(registry, processor);
+        inOrder = Mockito.inOrder(registry, processor, exchange, in);
+        when(exchange.getIn()).thenReturn(in);
     }
 
     @After
@@ -78,4 +94,68 @@ public class AbstractMetricsEndpointTest {
     public void testGetMetricsName() throws Exception {
         assertThat(endpoint.getMetricsName(), is(METRICS_NAME));
     }
+
+    @Test
+    public void testGetStringHeaderValue() {
+        when(in.getHeader(HEADER, String.class)).thenReturn(STRING_VALUE);
+        assertThat(endpoint.getStringHeader(exchange, HEADER, 
DEFAULT_STRING_VALUE), is(STRING_VALUE));
+        inOrder.verify(exchange, times(1)).getIn();
+        inOrder.verify(in, times(1)).getHeader(HEADER, String.class);
+    }
+
+    @Test
+    public void testGetStringHeaderValueNotFound() {
+        when(in.getHeader(HEADER, String.class)).thenReturn(null);
+        assertThat(endpoint.getStringHeader(exchange, HEADER, 
DEFAULT_STRING_VALUE), is(DEFAULT_STRING_VALUE));
+        inOrder.verify(exchange, times(1)).getIn();
+        inOrder.verify(in, times(1)).getHeader(HEADER, String.class);
+    }
+
+    @Test
+    public void testGetStringHeaderValueEmptyString() {
+        when(in.getHeader(HEADER, String.class)).thenReturn("");
+        assertThat(endpoint.getStringHeader(exchange, HEADER, 
DEFAULT_STRING_VALUE), is(DEFAULT_STRING_VALUE));
+        inOrder.verify(exchange, times(1)).getIn();
+        inOrder.verify(in, times(1)).getHeader(HEADER, String.class);
+    }
+
+    @Test
+    public void testGetStringHeaderValueWhiteSpaces() {
+        when(in.getHeader(HEADER, String.class)).thenReturn(" \n\t\r");
+        assertThat(endpoint.getStringHeader(exchange, HEADER, 
DEFAULT_STRING_VALUE), is(DEFAULT_STRING_VALUE));
+        inOrder.verify(exchange, times(1)).getIn();
+        inOrder.verify(in, times(1)).getHeader(HEADER, String.class);
+    }
+
+    @Test
+    public void testGetLongHeaderValue() {
+        when(in.getHeader(HEADER, DEFAULT_LONG_VALUE, 
Long.class)).thenReturn(LONG_VALUE);
+        assertThat(endpoint.getLongHeader(exchange, HEADER, 
DEFAULT_LONG_VALUE), is(LONG_VALUE));
+        inOrder.verify(exchange, times(1)).getIn();
+        inOrder.verify(in, times(1)).getHeader(HEADER, DEFAULT_LONG_VALUE, 
Long.class);
+    }
+
+    @Test
+    public void testGetLongHeaderValueNotFound() {
+        when(in.getHeader(HEADER, DEFAULT_LONG_VALUE, 
Long.class)).thenReturn(DEFAULT_LONG_VALUE);
+        assertThat(endpoint.getLongHeader(exchange, HEADER, 
DEFAULT_LONG_VALUE), is(DEFAULT_LONG_VALUE));
+        inOrder.verify(exchange, times(1)).getIn();
+        inOrder.verify(in, times(1)).getHeader(HEADER, DEFAULT_LONG_VALUE, 
Long.class);
+    }
+
+    @Test
+    public void testGetMetricsNameFromExchange() {
+        when(in.getHeader(MetricsComponent.HEADER_METRIC_NAME, 
String.class)).thenReturn(STRING_VALUE);
+        assertThat(endpoint.getMetricsName(exchange), is(STRING_VALUE));
+        inOrder.verify(exchange, times(1)).getIn();
+        inOrder.verify(in, 
times(1)).getHeader(MetricsComponent.HEADER_METRIC_NAME, String.class);
+    }
+
+    @Test
+    public void testGetMetricsNameFromExchangeNotFound() {
+        when(in.getHeader(MetricsComponent.HEADER_METRIC_NAME, 
String.class)).thenReturn(null);
+        assertThat(endpoint.getMetricsName(exchange), is(METRICS_NAME));
+        inOrder.verify(exchange, times(1)).getIn();
+        inOrder.verify(in, 
times(1)).getHeader(MetricsComponent.HEADER_METRIC_NAME, String.class);
+    }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/85ca4c1f/src/test/java/org/apache/camel/metrics/MetricComponentSpringTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/camel/metrics/MetricComponentSpringTest.java 
b/src/test/java/org/apache/camel/metrics/MetricComponentSpringTest.java
index 2dd9391..a6590c5 100644
--- a/src/test/java/org/apache/camel/metrics/MetricComponentSpringTest.java
+++ b/src/test/java/org/apache/camel/metrics/MetricComponentSpringTest.java
@@ -71,7 +71,7 @@ public class MetricComponentSpringTest {
         producer.sendBody(new Object());
         endpoint.assertIsSatisfied();
         inOrder.verify(mockRegistry, times(1)).counter("A");
-        inOrder.verify(mockCounter, times(1)).inc(512);
+        inOrder.verify(mockCounter, times(1)).inc(512L);
         inOrder.verifyNoMoreInteractions();
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/85ca4c1f/src/test/java/org/apache/camel/metrics/MetricsComponentRouteTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/camel/metrics/MetricsComponentRouteTest.java 
b/src/test/java/org/apache/camel/metrics/MetricsComponentRouteTest.java
index 5af70b9..97301c3 100644
--- a/src/test/java/org/apache/camel/metrics/MetricsComponentRouteTest.java
+++ b/src/test/java/org/apache/camel/metrics/MetricsComponentRouteTest.java
@@ -1,5 +1,9 @@
 package org.apache.camel.metrics;
 
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
 import org.apache.camel.Produce;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.builder.RouteBuilder;
@@ -20,6 +24,24 @@ public class MetricsComponentRouteTest extends 
CamelTestSupport {
         assertMockEndpointsSatisfied();
     }
 
+    @Test
+    public void testMessageContentDelivery() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        String body = "Message Body";
+        String header1 = "Header 1";
+        String header2 = "Header 2";
+        Object value1 = new Date();
+        Object value2 = System.currentTimeMillis();
+        mock.expectedBodiesReceived(body);
+        mock.expectedHeaderReceived(header1, value1);
+        mock.expectedHeaderReceived(header2, value2);
+        Map<String, Object> headers = new HashMap<String, Object>();
+        headers.put(header1, value1);
+        headers.put(header2, value2);
+        template.sendBodyAndHeaders(body, headers);
+        assertMockEndpointsSatisfied();
+    }
+
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {

http://git-wip-us.apache.org/repos/asf/camel/blob/85ca4c1f/src/test/java/org/apache/camel/metrics/counter/CounterProducerTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/camel/metrics/counter/CounterProducerTest.java 
b/src/test/java/org/apache/camel/metrics/counter/CounterProducerTest.java
index 3b1b89b..c6ecaa4 100644
--- a/src/test/java/org/apache/camel/metrics/counter/CounterProducerTest.java
+++ b/src/test/java/org/apache/camel/metrics/counter/CounterProducerTest.java
@@ -44,7 +44,7 @@ public class CounterProducerTest {
     public void setUp() throws Exception {
         producer = new CounterProducer(endpoint);
         inOrder = Mockito.inOrder(endpoint, exchange, registry, counter);
-        when(endpoint.getMetricsName()).thenReturn(ENDPOINT_NAME);
+        when(endpoint.getMetricsName(exchange)).thenReturn(ENDPOINT_NAME);
         when(endpoint.getRegistry()).thenReturn(registry);
         when(registry.counter(ENDPOINT_NAME)).thenReturn(counter);
     }
@@ -59,7 +59,7 @@ public class CounterProducerTest {
         when(endpoint.getIncrement()).thenReturn(INCREMENT);
         when(endpoint.getDecrement()).thenReturn(null);
         producer.process(exchange);
-        inOrder.verify(endpoint, times(1)).getMetricsName();
+        inOrder.verify(endpoint, times(1)).getMetricsName(exchange);
         inOrder.verify(endpoint, times(1)).getRegistry();
         inOrder.verify(registry, times(1)).counter(ENDPOINT_NAME);
         inOrder.verify(endpoint, times(1)).getIncrement();
@@ -73,7 +73,7 @@ public class CounterProducerTest {
         when(endpoint.getIncrement()).thenReturn(null);
         when(endpoint.getDecrement()).thenReturn(DECREMENT);
         producer.process(exchange);
-        inOrder.verify(endpoint, times(1)).getMetricsName();
+        inOrder.verify(endpoint, times(1)).getMetricsName(exchange);
         inOrder.verify(endpoint, times(1)).getRegistry();
         inOrder.verify(registry, times(1)).counter(ENDPOINT_NAME);
         inOrder.verify(endpoint, times(1)).getIncrement();
@@ -87,7 +87,7 @@ public class CounterProducerTest {
         when(endpoint.getIncrement()).thenReturn(INCREMENT);
         when(endpoint.getDecrement()).thenReturn(DECREMENT);
         producer.process(exchange);
-        inOrder.verify(endpoint, times(1)).getMetricsName();
+        inOrder.verify(endpoint, times(1)).getMetricsName(exchange);
         inOrder.verify(endpoint, times(1)).getRegistry();
         inOrder.verify(registry, times(1)).counter(ENDPOINT_NAME);
         inOrder.verify(endpoint, times(1)).getIncrement();
@@ -101,7 +101,7 @@ public class CounterProducerTest {
         when(endpoint.getIncrement()).thenReturn(null);
         when(endpoint.getDecrement()).thenReturn(null);
         producer.process(exchange);
-        inOrder.verify(endpoint, times(1)).getMetricsName();
+        inOrder.verify(endpoint, times(1)).getMetricsName(exchange);
         inOrder.verify(endpoint, times(1)).getRegistry();
         inOrder.verify(registry, times(1)).counter(ENDPOINT_NAME);
         inOrder.verify(endpoint, times(1)).getIncrement();

http://git-wip-us.apache.org/repos/asf/camel/blob/85ca4c1f/src/test/java/org/apache/camel/metrics/counter/CounterRouteTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/camel/metrics/counter/CounterRouteTest.java 
b/src/test/java/org/apache/camel/metrics/counter/CounterRouteTest.java
new file mode 100644
index 0000000..df9185b
--- /dev/null
+++ b/src/test/java/org/apache/camel/metrics/counter/CounterRouteTest.java
@@ -0,0 +1,78 @@
+package org.apache.camel.metrics.counter;
+
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.when;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.Produce;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.metrics.MetricsComponent;
+import org.apache.camel.spring.javaconfig.SingleRouteCamelConfiguration;
+import org.apache.camel.test.spring.CamelSpringDelegatingTestContextLoader;
+import org.apache.camel.test.spring.CamelSpringJUnit4ClassRunner;
+import org.apache.camel.test.spring.MockEndpoints;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InOrder;
+import org.mockito.Mockito;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.test.context.ContextConfiguration;
+
+import com.codahale.metrics.Counter;
+import com.codahale.metrics.MetricRegistry;
+
+@RunWith(CamelSpringJUnit4ClassRunner.class)
+@ContextConfiguration(
+        classes = { CounterRouteTest.TestConfig.class },
+        loader = CamelSpringDelegatingTestContextLoader.class)
+@MockEndpoints
+public class CounterRouteTest {
+
+    @EndpointInject(uri = "mock:out")
+    private MockEndpoint endpoint;
+
+    @Produce(uri = "direct:in")
+    private ProducerTemplate producer;
+
+    @Configuration
+    public static class TestConfig extends SingleRouteCamelConfiguration {
+
+        @Bean
+        @Override
+        public RouteBuilder route() {
+            return new RouteBuilder() {
+
+                @Override
+                public void configure() throws Exception {
+                    from("direct:in")
+                            .to("metrics:counter:A?increment=5")
+                            .to("mock:out");
+                }
+            };
+        }
+
+        @Bean(name = MetricsComponent.METRIC_REGISTRY_NAME)
+        public MetricRegistry getMetricRegistry() {
+            return Mockito.mock(MetricRegistry.class);
+        }
+    }
+
+    @Test
+    public void testOverrideMetricsName() throws Exception {
+        // TODO - 12.05.2014, Lauri - is there any better way to set this up?
+        MetricRegistry mockRegistry = 
endpoint.getCamelContext().getRegistry().lookupByNameAndType(MetricsComponent.METRIC_REGISTRY_NAME,
 MetricRegistry.class);
+        Counter mockCounter = Mockito.mock(Counter.class);
+        InOrder inOrder = Mockito.inOrder(mockRegistry, mockCounter);
+        when(mockRegistry.counter("B")).thenReturn(mockCounter);
+
+        endpoint.expectedMessageCount(1);
+        producer.sendBodyAndHeader(new Object(), 
MetricsComponent.HEADER_METRIC_NAME, "B");
+        endpoint.assertIsSatisfied();
+        inOrder.verify(mockRegistry, times(1)).counter("B");
+        inOrder.verify(mockCounter, times(1)).inc(5L);
+        inOrder.verifyNoMoreInteractions();
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/85ca4c1f/src/test/java/org/apache/camel/metrics/histogram/HistogramProducerTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/camel/metrics/histogram/HistogramProducerTest.java 
b/src/test/java/org/apache/camel/metrics/histogram/HistogramProducerTest.java
index 296c52c..8662e9d 100644
--- 
a/src/test/java/org/apache/camel/metrics/histogram/HistogramProducerTest.java
+++ 
b/src/test/java/org/apache/camel/metrics/histogram/HistogramProducerTest.java
@@ -44,7 +44,7 @@ public class HistogramProducerTest {
         producer = new HistogramProducer(endpoint);
         inOrder = Mockito.inOrder(endpoint, registry, histogram, exchange);
         when(endpoint.getRegistry()).thenReturn(registry);
-        when(endpoint.getMetricsName()).thenReturn(METRICS_NAME);
+        when(endpoint.getMetricsName(exchange)).thenReturn(METRICS_NAME);
         when(registry.histogram(METRICS_NAME)).thenReturn(histogram);
     }
 
@@ -58,7 +58,7 @@ public class HistogramProducerTest {
         when(endpoint.getValue()).thenReturn(VALUE);
         producer.process(exchange);
         inOrder.verify(endpoint, times(1)).getRegistry();
-        inOrder.verify(endpoint, times(1)).getMetricsName();
+        inOrder.verify(endpoint, times(1)).getMetricsName(exchange);
         inOrder.verify(registry, times(1)).histogram(METRICS_NAME);
         inOrder.verify(endpoint, times(1)).getValue();
         inOrder.verify(histogram, times(1)).update(VALUE);
@@ -70,7 +70,7 @@ public class HistogramProducerTest {
         when(endpoint.getValue()).thenReturn(null);
         producer.process(exchange);
         inOrder.verify(endpoint, times(1)).getRegistry();
-        inOrder.verify(endpoint, times(1)).getMetricsName();
+        inOrder.verify(endpoint, times(1)).getMetricsName(exchange);
         inOrder.verify(registry, times(1)).histogram(METRICS_NAME);
         inOrder.verify(endpoint, times(1)).getValue();
         inOrder.verifyNoMoreInteractions();

http://git-wip-us.apache.org/repos/asf/camel/blob/85ca4c1f/src/test/java/org/apache/camel/metrics/histogram/HistogramRouteTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/camel/metrics/histogram/HistogramRouteTest.java 
b/src/test/java/org/apache/camel/metrics/histogram/HistogramRouteTest.java
new file mode 100644
index 0000000..e8646cb
--- /dev/null
+++ b/src/test/java/org/apache/camel/metrics/histogram/HistogramRouteTest.java
@@ -0,0 +1,78 @@
+package org.apache.camel.metrics.histogram;
+
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.when;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.Produce;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.metrics.MetricsComponent;
+import org.apache.camel.spring.javaconfig.SingleRouteCamelConfiguration;
+import org.apache.camel.test.spring.CamelSpringDelegatingTestContextLoader;
+import org.apache.camel.test.spring.CamelSpringJUnit4ClassRunner;
+import org.apache.camel.test.spring.MockEndpoints;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InOrder;
+import org.mockito.Mockito;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.test.context.ContextConfiguration;
+
+import com.codahale.metrics.Histogram;
+import com.codahale.metrics.MetricRegistry;
+
+@RunWith(CamelSpringJUnit4ClassRunner.class)
+@ContextConfiguration(
+        classes = { HistogramRouteTest.TestConfig.class },
+        loader = CamelSpringDelegatingTestContextLoader.class)
+@MockEndpoints
+public class HistogramRouteTest {
+
+    @EndpointInject(uri = "mock:out")
+    private MockEndpoint endpoint;
+
+    @Produce(uri = "direct:in")
+    private ProducerTemplate producer;
+
+    @Configuration
+    public static class TestConfig extends SingleRouteCamelConfiguration {
+
+        @Bean
+        @Override
+        public RouteBuilder route() {
+            return new RouteBuilder() {
+
+                @Override
+                public void configure() throws Exception {
+                    from("direct:in")
+                            .to("metrics:histogram:A?value=332491")
+                            .to("mock:out");
+                }
+            };
+        }
+
+        @Bean(name = MetricsComponent.METRIC_REGISTRY_NAME)
+        public MetricRegistry getMetricRegistry() {
+            return Mockito.mock(MetricRegistry.class);
+        }
+    }
+
+    @Test
+    public void testOverrideMetricsName() throws Exception {
+        // TODO - 12.05.2014, Lauri - is there any better way to set this up?
+        MetricRegistry mockRegistry = 
endpoint.getCamelContext().getRegistry().lookupByNameAndType(MetricsComponent.METRIC_REGISTRY_NAME,
 MetricRegistry.class);
+        Histogram mockHistogram = Mockito.mock(Histogram.class);
+        InOrder inOrder = Mockito.inOrder(mockRegistry, mockHistogram);
+        when(mockRegistry.histogram("B")).thenReturn(mockHistogram);
+
+        endpoint.expectedMessageCount(1);
+        producer.sendBodyAndHeader(new Object(), 
MetricsComponent.HEADER_METRIC_NAME, "B");
+        endpoint.assertIsSatisfied();
+        inOrder.verify(mockRegistry, times(1)).histogram("B");
+        inOrder.verify(mockHistogram, times(1)).update(332491L);
+        inOrder.verifyNoMoreInteractions();
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/85ca4c1f/src/test/java/org/apache/camel/metrics/meter/MeterProducerTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/camel/metrics/meter/MeterProducerTest.java 
b/src/test/java/org/apache/camel/metrics/meter/MeterProducerTest.java
index 26c853a..ba62a18 100644
--- a/src/test/java/org/apache/camel/metrics/meter/MeterProducerTest.java
+++ b/src/test/java/org/apache/camel/metrics/meter/MeterProducerTest.java
@@ -45,7 +45,7 @@ public class MeterProducerTest {
         producer = new MeterProducer(endpoint);
         inOrder = Mockito.inOrder(endpoint, registry, meter, exchange);
         when(endpoint.getRegistry()).thenReturn(registry);
-        when(endpoint.getMetricsName()).thenReturn(METRICS_NAME);
+        when(endpoint.getMetricsName(exchange)).thenReturn(METRICS_NAME);
         when(registry.meter(METRICS_NAME)).thenReturn(meter);
     }
 
@@ -59,7 +59,7 @@ public class MeterProducerTest {
     public void testProcessMarkSet() throws Exception {
         when(endpoint.getMark()).thenReturn(MARK);
         producer.process(exchange);
-        inOrder.verify(endpoint, times(1)).getMetricsName();
+        inOrder.verify(endpoint, times(1)).getMetricsName(exchange);
         inOrder.verify(endpoint, times(1)).getRegistry();
         inOrder.verify(registry, times(1)).meter(METRICS_NAME);
         inOrder.verify(endpoint, times(1)).getMark();
@@ -71,7 +71,7 @@ public class MeterProducerTest {
     public void testProcessMarkNotSet() throws Exception {
         when(endpoint.getMark()).thenReturn(null);
         producer.process(exchange);
-        inOrder.verify(endpoint, times(1)).getMetricsName();
+        inOrder.verify(endpoint, times(1)).getMetricsName(exchange);
         inOrder.verify(endpoint, times(1)).getRegistry();
         inOrder.verify(registry, times(1)).meter(METRICS_NAME);
         inOrder.verify(endpoint, times(1)).getMark();

http://git-wip-us.apache.org/repos/asf/camel/blob/85ca4c1f/src/test/java/org/apache/camel/metrics/meter/MeterRouteTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/camel/metrics/meter/MeterRouteTest.java 
b/src/test/java/org/apache/camel/metrics/meter/MeterRouteTest.java
new file mode 100644
index 0000000..d6daf33
--- /dev/null
+++ b/src/test/java/org/apache/camel/metrics/meter/MeterRouteTest.java
@@ -0,0 +1,78 @@
+package org.apache.camel.metrics.meter;
+
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.when;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.Produce;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.metrics.MetricsComponent;
+import org.apache.camel.spring.javaconfig.SingleRouteCamelConfiguration;
+import org.apache.camel.test.spring.CamelSpringDelegatingTestContextLoader;
+import org.apache.camel.test.spring.CamelSpringJUnit4ClassRunner;
+import org.apache.camel.test.spring.MockEndpoints;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InOrder;
+import org.mockito.Mockito;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.test.context.ContextConfiguration;
+
+import com.codahale.metrics.Meter;
+import com.codahale.metrics.MetricRegistry;
+
+@RunWith(CamelSpringJUnit4ClassRunner.class)
+@ContextConfiguration(
+        classes = { MeterRouteTest.TestConfig.class },
+        loader = CamelSpringDelegatingTestContextLoader.class)
+@MockEndpoints
+public class MeterRouteTest {
+
+    @EndpointInject(uri = "mock:out")
+    private MockEndpoint endpoint;
+
+    @Produce(uri = "direct:in")
+    private ProducerTemplate producer;
+
+    @Configuration
+    public static class TestConfig extends SingleRouteCamelConfiguration {
+
+        @Bean
+        @Override
+        public RouteBuilder route() {
+            return new RouteBuilder() {
+
+                @Override
+                public void configure() throws Exception {
+                    from("direct:in")
+                            .to("metrics:meter:A?mark=3179")
+                            .to("mock:out");
+                }
+            };
+        }
+
+        @Bean(name = MetricsComponent.METRIC_REGISTRY_NAME)
+        public MetricRegistry getMetricRegistry() {
+            return Mockito.mock(MetricRegistry.class);
+        }
+    }
+
+    @Test
+    public void testOverrideMetricsName() throws Exception {
+        // TODO - 12.05.2014, Lauri - is there any better way to set this up?
+        MetricRegistry mockRegistry = 
endpoint.getCamelContext().getRegistry().lookupByNameAndType(MetricsComponent.METRIC_REGISTRY_NAME,
 MetricRegistry.class);
+        Meter mockMeter = Mockito.mock(Meter.class);
+        InOrder inOrder = Mockito.inOrder(mockRegistry, mockMeter);
+        when(mockRegistry.meter("B")).thenReturn(mockMeter);
+
+        endpoint.expectedMessageCount(1);
+        producer.sendBodyAndHeader(new Object(), 
MetricsComponent.HEADER_METRIC_NAME, "B");
+        endpoint.assertIsSatisfied();
+        inOrder.verify(mockRegistry, times(1)).meter("B");
+        inOrder.verify(mockMeter, times(1)).mark(3179L);
+        inOrder.verifyNoMoreInteractions();
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/85ca4c1f/src/test/java/org/apache/camel/metrics/timer/TimerProducerTest.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/camel/metrics/timer/TimerProducerTest.java 
b/src/test/java/org/apache/camel/metrics/timer/TimerProducerTest.java
index 86ec26d..09e572b 100644
--- a/src/test/java/org/apache/camel/metrics/timer/TimerProducerTest.java
+++ b/src/test/java/org/apache/camel/metrics/timer/TimerProducerTest.java
@@ -51,7 +51,7 @@ public class TimerProducerTest {
         producer = new TimerProducer(endpoint);
         inOrder = Mockito.inOrder(endpoint, exchange, registry, timer, 
context);
         when(endpoint.getRegistry()).thenReturn(registry);
-        when(endpoint.getMetricsName()).thenReturn(METRICS_NAME);
+        when(endpoint.getMetricsName(exchange)).thenReturn(METRICS_NAME);
         when(registry.timer(METRICS_NAME)).thenReturn(timer);
         when(timer.time()).thenReturn(context);
     }
@@ -68,7 +68,7 @@ public class TimerProducerTest {
         when(exchange.getProperty(PROPERTY_NAME, 
Timer.Context.class)).thenReturn(null);
         producer.process(exchange);
         inOrder.verify(endpoint, times(1)).getRegistry();
-        inOrder.verify(endpoint, times(1)).getMetricsName();
+        inOrder.verify(endpoint, times(1)).getMetricsName(exchange);
         inOrder.verify(endpoint, times(1)).getAction();
         inOrder.verify(exchange, times(1)).getProperty(PROPERTY_NAME, 
Timer.Context.class);
         inOrder.verify(registry, times(1)).timer(METRICS_NAME);
@@ -83,7 +83,7 @@ public class TimerProducerTest {
         when(exchange.getProperty(PROPERTY_NAME, 
Timer.Context.class)).thenReturn(context);
         producer.process(exchange);
         inOrder.verify(endpoint, times(1)).getRegistry();
-        inOrder.verify(endpoint, times(1)).getMetricsName();
+        inOrder.verify(endpoint, times(1)).getMetricsName(exchange);
         inOrder.verify(endpoint, times(1)).getAction();
         inOrder.verify(exchange, times(1)).getProperty(PROPERTY_NAME, 
Timer.Context.class);
         inOrder.verify(context, times(1)).stop();
@@ -96,7 +96,7 @@ public class TimerProducerTest {
         when(endpoint.getAction()).thenReturn(null);
         producer.process(exchange);
         inOrder.verify(endpoint, times(1)).getRegistry();
-        inOrder.verify(endpoint, times(1)).getMetricsName();
+        inOrder.verify(endpoint, times(1)).getMetricsName(exchange);
         inOrder.verify(endpoint, times(1)).getAction();
         inOrder.verifyNoMoreInteractions();
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/85ca4c1f/src/test/java/org/apache/camel/metrics/timer/TimerRouteTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/camel/metrics/timer/TimerRouteTest.java 
b/src/test/java/org/apache/camel/metrics/timer/TimerRouteTest.java
new file mode 100644
index 0000000..279be95
--- /dev/null
+++ b/src/test/java/org/apache/camel/metrics/timer/TimerRouteTest.java
@@ -0,0 +1,78 @@
+package org.apache.camel.metrics.timer;
+
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.when;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.Produce;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.metrics.MetricsComponent;
+import org.apache.camel.spring.javaconfig.SingleRouteCamelConfiguration;
+import org.apache.camel.test.spring.CamelSpringDelegatingTestContextLoader;
+import org.apache.camel.test.spring.CamelSpringJUnit4ClassRunner;
+import org.apache.camel.test.spring.MockEndpoints;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InOrder;
+import org.mockito.Mockito;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.test.context.ContextConfiguration;
+
+import com.codahale.metrics.MetricRegistry;
+import com.codahale.metrics.Timer;
+
+@RunWith(CamelSpringJUnit4ClassRunner.class)
+@ContextConfiguration(
+        classes = { TimerRouteTest.TestConfig.class },
+        loader = CamelSpringDelegatingTestContextLoader.class)
+@MockEndpoints
+public class TimerRouteTest {
+
+    @EndpointInject(uri = "mock:out")
+    private MockEndpoint endpoint;
+
+    @Produce(uri = "direct:in")
+    private ProducerTemplate producer;
+
+    @Configuration
+    public static class TestConfig extends SingleRouteCamelConfiguration {
+
+        @Bean
+        @Override
+        public RouteBuilder route() {
+            return new RouteBuilder() {
+
+                @Override
+                public void configure() throws Exception {
+                    from("direct:in")
+                            .to("metrics:timer:A?action=start")
+                            .to("mock:out");
+                }
+            };
+        }
+
+        @Bean(name = MetricsComponent.METRIC_REGISTRY_NAME)
+        public MetricRegistry getMetricRegistry() {
+            return Mockito.mock(MetricRegistry.class);
+        }
+    }
+
+    @Test
+    public void testOverrideMetricsName() throws Exception {
+        // TODO - 12.05.2014, Lauri - is there any better way to set this up?
+        MetricRegistry mockRegistry = 
endpoint.getCamelContext().getRegistry().lookupByNameAndType(MetricsComponent.METRIC_REGISTRY_NAME,
 MetricRegistry.class);
+        Timer mockTimer = Mockito.mock(Timer.class);
+        InOrder inOrder = Mockito.inOrder(mockRegistry, mockTimer);
+        when(mockRegistry.timer("B")).thenReturn(mockTimer);
+
+        endpoint.expectedMessageCount(1);
+        producer.sendBodyAndHeader(new Object(), 
MetricsComponent.HEADER_METRIC_NAME, "B");
+        endpoint.assertIsSatisfied();
+        inOrder.verify(mockRegistry, times(1)).timer("B");
+        inOrder.verify(mockTimer, times(1)).time();
+        inOrder.verifyNoMoreInteractions();
+    }
+}

Reply via email to