Added unit tests.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/225d11d9 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/225d11d9 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/225d11d9 Branch: refs/heads/master Commit: 225d11d9df8c4b4aa7af5068c60c007b27b853ee Parents: 98560c8 Author: Lauri Kimmel <lauri.kim...@gmx.com> Authored: Tue May 13 22:47:26 2014 +1000 Committer: Lauri Kimmel <lauri.kim...@gmx.com> Committed: Tue May 13 22:47:26 2014 +1000 ---------------------------------------------------------------------- pom.xml | 41 +++- .../apache/camel/metrics/MetricsComponent.java | 31 ++- .../metrics/AbstractMetricsEndpointTest.java | 81 +++++++ .../metrics/MetricComponentSpringTest.java | 77 +++++++ .../metrics/MetricsComponentRouteTest.java | 42 ++++ .../camel/metrics/MetricsComponentTest.java | 228 ++++++++++++++++--- .../apache/camel/metrics/MetricsTypeTest.java | 19 ++ .../metrics/counter/CounterEndpointTest.java | 88 +++++++ .../metrics/counter/CounterProducerTest.java | 112 +++++++++ .../camel/metrics/meter/MeterEndpointTest.java | 75 ++++++ .../camel/metrics/meter/MeterProducerTest.java | 81 +++++++ 11 files changed, 821 insertions(+), 54 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/225d11d9/pom.xml ---------------------------------------------------------------------- diff --git a/pom.xml b/pom.xml index 2407292..0f65ab5 100644 --- a/pom.xml +++ b/pom.xml @@ -54,13 +54,50 @@ <version>2.13.0</version> <scope>test</scope> </dependency> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-spring</artifactId> + <version>2.13.0</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-spring-javaconfig</artifactId> + <version>2.13.0</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-test-spring</artifactId> + <version>2.13.0</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.mockito</groupId> + <artifactId>mockito-core</artifactId> + <version>1.9.5</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.11</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.hamcrest</groupId> + <artifactId>hamcrest-all</artifactId> + <version>1.3</version> + <scope>test</scope> + </dependency> + </dependencies> <build> <defaultGoal>install</defaultGoal> <plugins> - + <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> @@ -70,7 +107,7 @@ <target>1.6</target> </configuration> </plugin> - + <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> http://git-wip-us.apache.org/repos/asf/camel/blob/225d11d9/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 14e93cb..b6af8af 100644 --- a/src/main/java/org/apache/camel/metrics/MetricsComponent.java +++ b/src/main/java/org/apache/camel/metrics/MetricsComponent.java @@ -9,6 +9,7 @@ import org.apache.camel.impl.DefaultComponent; import org.apache.camel.metrics.counter.CounterEndpoint; import org.apache.camel.metrics.meter.MeterEndpoint; import org.apache.camel.spi.Registry; +import org.apache.camel.util.ObjectHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -20,7 +21,7 @@ import com.codahale.metrics.Slf4jReporter; */ public class MetricsComponent extends DefaultComponent { - public static final String NAME_METRIC_REGISTRY = "metricRegistry"; + 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; @@ -30,8 +31,10 @@ public class MetricsComponent extends DefaultComponent { @Override protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception { - Registry camelRegistry = getCamelContext().getRegistry(); - getOrCreateMetricRegistry(camelRegistry, NAME_METRIC_REGISTRY); + if (metricRegistry == null) { + Registry camelRegistry = getCamelContext().getRegistry(); + metricRegistry = getOrCreateMetricRegistry(camelRegistry, METRIC_REGISTRY_NAME); + } String metricsName = getMetricsName(remaining); MetricsType metricsType = getMetricsType(remaining); LOG.info("Metrics type: {}; name: {}", metricsType, metricsName); @@ -41,8 +44,8 @@ public class MetricsComponent extends DefaultComponent { } String getMetricsName(String remaining) { - int index = remaining.indexOf(":"); - return index < 0 ? remaining : remaining.substring(index + 1); + String name = ObjectHelper.after(remaining, ":"); + return name == null ? remaining : name; } Endpoint createNewEndpoint(MetricRegistry registry, MetricsType type, String metricsName) { @@ -61,14 +64,12 @@ public class MetricsComponent extends DefaultComponent { } MetricsType getMetricsType(String remaining) { - int index = remaining.indexOf(":"); - String name = null; + String name = ObjectHelper.before(remaining, ":"); MetricsType type; - if (index < 0) { + if (name == null) { type = DEFAULT_METRICS_TYPE; } else { - name = remaining.substring(0, index); type = MetricsType.getByName(name); } if (type == null) { @@ -78,16 +79,14 @@ public class MetricsComponent extends DefaultComponent { } MetricRegistry getOrCreateMetricRegistry(Registry camelRegistry, String registryName) { - if (metricRegistry == null) { - LOG.debug("Looking up MetricRegistry from Camel Registry for name \"{}\"", registryName); - metricRegistry = getMetricRegistryFromCamelRegistry(camelRegistry, registryName); - } - if (metricRegistry == null) { + LOG.debug("Looking up MetricRegistry from Camel Registry for name \"{}\"", registryName); + MetricRegistry result = getMetricRegistryFromCamelRegistry(camelRegistry, registryName); + if (result == null) { LOG.debug("MetricRegistry not found from Camel Registry for name \"{}\"", registryName); LOG.info("Creating new default MetricRegistry"); - metricRegistry = createMetricRegistry(); + result = createMetricRegistry(); } - return metricRegistry; + return result; } MetricRegistry getMetricRegistryFromCamelRegistry(Registry camelRegistry, String registryName) { http://git-wip-us.apache.org/repos/asf/camel/blob/225d11d9/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 new file mode 100644 index 0000000..0b24cf8 --- /dev/null +++ b/src/test/java/org/apache/camel/metrics/AbstractMetricsEndpointTest.java @@ -0,0 +1,81 @@ +package org.apache.camel.metrics; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; + +import org.apache.camel.Processor; +import org.apache.camel.Producer; +import org.apache.camel.RuntimeCamelException; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InOrder; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.runners.MockitoJUnitRunner; + +import com.codahale.metrics.MetricRegistry; + +@RunWith(MockitoJUnitRunner.class) +public class AbstractMetricsEndpointTest { + + private static final String METRICS_NAME = "metrics.name"; + + @Mock + private MetricRegistry registry; + + @Mock + private Processor processor; + + private AbstractMetricsEndpoint endpoint; + + private InOrder inOrder; + + @Before + public void setUp() throws Exception { + endpoint = new AbstractMetricsEndpoint(registry, METRICS_NAME) { + @Override + public Producer createProducer() throws Exception { + return null; + } + + @Override + protected String createEndpointUri() { + return "not real endpoint"; + } + }; + inOrder = Mockito.inOrder(registry, processor); + } + + @After + public void tearDown() throws Exception { + inOrder.verifyNoMoreInteractions(); + } + + @Test + public void testAbstractMetricsEndpoint() throws Exception { + assertThat(endpoint.getMetricsName(), is(METRICS_NAME)); + assertThat(endpoint.getRegistry(), is(registry)); + } + + @Test(expected = RuntimeCamelException.class) + public void testCreateConsumer() throws Exception { + endpoint.createConsumer(processor); + } + + @Test + public void testIsSingleton() throws Exception { + assertThat(endpoint.isSingleton(), is(false)); + } + + @Test + public void testGetRegistry() throws Exception { + assertThat(endpoint.getRegistry(), is(registry)); + } + + @Test + public void testGetMetricsName() throws Exception { + assertThat(endpoint.getMetricsName(), is(METRICS_NAME)); + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/225d11d9/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 new file mode 100644 index 0000000..2dd9391 --- /dev/null +++ b/src/test/java/org/apache/camel/metrics/MetricComponentSpringTest.java @@ -0,0 +1,77 @@ +package org.apache.camel.metrics; + +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.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 = { MetricComponentSpringTest.TestConfig.class }, + loader = CamelSpringDelegatingTestContextLoader.class) +@MockEndpoints +public class MetricComponentSpringTest { + + @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=512") + .to("mock:out"); + } + }; + } + + @Bean(name = MetricsComponent.METRIC_REGISTRY_NAME) + public MetricRegistry getMetricRegistry() { + return Mockito.mock(MetricRegistry.class); + } + } + + @Test + public void testMetricsRegistryFromCamelRegistry() 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("A")).thenReturn(mockCounter); + + endpoint.expectedMessageCount(1); + producer.sendBody(new Object()); + endpoint.assertIsSatisfied(); + inOrder.verify(mockRegistry, times(1)).counter("A"); + inOrder.verify(mockCounter, times(1)).inc(512); + inOrder.verifyNoMoreInteractions(); + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/225d11d9/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 new file mode 100644 index 0000000..b005b93 --- /dev/null +++ b/src/test/java/org/apache/camel/metrics/MetricsComponentRouteTest.java @@ -0,0 +1,42 @@ +package org.apache.camel.metrics; + +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.test.junit4.CamelTestSupport; +import org.junit.Test; + +public class MetricsComponentRouteTest extends CamelTestSupport { + + @Produce(uri = "direct:start") + protected ProducerTemplate template; + + @Test + public void testMetrics() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:result"); + mock.expectedMinimumMessageCount(1); + template.sendBody(new Object()); + assertMockEndpointsSatisfied(); + } + + @Override + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + @Override + public void configure() { + from("direct:start") + // .to("metrics") + // .to("metrics:") + .to("metrics:A") + .to("metrics:counter://B") + .to("metrics:counter:C?increment=19291") + .to("metrics:counter:C?decrement=19292") + .to("metrics:counter:C") + .to("metrics:meter:D") + .to("metrics:meter:D?mark=90001") + .to("mock:result"); + } + }; + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/225d11d9/src/test/java/org/apache/camel/metrics/MetricsComponentTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/camel/metrics/MetricsComponentTest.java b/src/test/java/org/apache/camel/metrics/MetricsComponentTest.java index 8eb6b42..f8dd013 100644 --- a/src/test/java/org/apache/camel/metrics/MetricsComponentTest.java +++ b/src/test/java/org/apache/camel/metrics/MetricsComponentTest.java @@ -1,42 +1,198 @@ package org.apache.camel.metrics; -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.test.junit4.CamelTestSupport; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.Matchers.instanceOf; +import static org.hamcrest.Matchers.not; +import static org.hamcrest.Matchers.notNullValue; +import static org.junit.Assert.assertThat; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.when; + +import java.util.EnumSet; +import java.util.HashMap; +import java.util.Map; + +import org.apache.camel.CamelContext; +import org.apache.camel.Endpoint; +import org.apache.camel.RuntimeCamelException; +import org.apache.camel.metrics.counter.CounterEndpoint; +import org.apache.camel.metrics.meter.MeterEndpoint; +import org.apache.camel.spi.Registry; +import org.junit.Before; import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InOrder; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.runners.MockitoJUnitRunner; + +import com.codahale.metrics.MetricRegistry; + +@RunWith(MockitoJUnitRunner.class) +public class MetricsComponentTest { + + @Mock + private CamelContext camelContext; + + @Mock + private Registry camelRegistry; + + @Mock + private MetricRegistry metricRegistry; + + private InOrder inOrder; + + private MetricsComponent component; + + @Before + public void setUp() throws Exception { + component = new MetricsComponent(); + inOrder = Mockito.inOrder(camelContext, camelRegistry, metricRegistry); + + } + + @Test + public void testCreateEndpoint() throws Exception { + component.setCamelContext(camelContext); + when(camelContext.getRegistry()).thenReturn(camelRegistry); + when(camelRegistry.lookupByNameAndType(MetricsComponent.METRIC_REGISTRY_NAME, MetricRegistry.class)).thenReturn(metricRegistry); + Map<String, Object> params = new HashMap<String, Object>(); + Long value = System.currentTimeMillis(); + params.put("mark", value); + Endpoint result = component.createEndpoint("metrics:meter:long.meter", "meter:long.meter", params); + assertThat(result, is(notNullValue())); + assertThat(result, is(instanceOf(MeterEndpoint.class))); + MeterEndpoint me = (MeterEndpoint) result; + assertThat(me.getMark(), is(value)); + assertThat(me.getMetricsName(), is("long.meter")); + assertThat(me.getRegistry(), is(metricRegistry)); + inOrder.verify(camelContext, times(1)).getRegistry(); + inOrder.verify(camelRegistry, times(1)).lookupByNameAndType(MetricsComponent.METRIC_REGISTRY_NAME, MetricRegistry.class); + inOrder.verify(camelContext, times(1)).getTypeConverter(); + inOrder.verifyNoMoreInteractions(); + } + + @Test + public void testCreateEndpoints() throws Exception { + component.setCamelContext(camelContext); + when(camelContext.getRegistry()).thenReturn(camelRegistry); + when(camelRegistry.lookupByNameAndType(MetricsComponent.METRIC_REGISTRY_NAME, MetricRegistry.class)).thenReturn(metricRegistry); + Map<String, Object> params = new HashMap<String, Object>(); + Long value = System.currentTimeMillis(); + params.put("mark", value); + Endpoint result = component.createEndpoint("metrics:meter:long.meter", "meter:long.meter", params); + assertThat(result, is(notNullValue())); + assertThat(result, is(instanceOf(MeterEndpoint.class))); + MeterEndpoint me = (MeterEndpoint) result; + assertThat(me.getMark(), is(value)); + assertThat(me.getMetricsName(), is("long.meter")); + assertThat(me.getRegistry(), is(metricRegistry)); + + params = new HashMap<String, Object>(); + params.put("increment", value + 1); + params.put("decrement", value - 1); + + result = component.createEndpoint("metrics:counter:long.counter", "counter:long.counter", params); + assertThat(result, is(notNullValue())); + assertThat(result, is(instanceOf(CounterEndpoint.class))); + CounterEndpoint ce = (CounterEndpoint) result; + assertThat(ce.getIncrement(), is(value + 1)); + assertThat(ce.getDecrement(), is(value - 1)); + assertThat(ce.getMetricsName(), is("long.counter")); + assertThat(ce.getRegistry(), is(metricRegistry)); + + inOrder.verify(camelContext, times(1)).getRegistry(); + inOrder.verify(camelRegistry, times(1)).lookupByNameAndType(MetricsComponent.METRIC_REGISTRY_NAME, MetricRegistry.class); + inOrder.verify(camelContext, times(2)).getTypeConverter(); + inOrder.verifyNoMoreInteractions(); + } + + @Test + public void testGetMetricsName() throws Exception { + assertThat(component.getMetricsName("meter:metric-a"), is("metric-a")); + assertThat(component.getMetricsName("meter:metric-a:sub-b"), is("metric-a:sub-b")); + assertThat(component.getMetricsName("metric-a"), is("metric-a")); + assertThat(component.getMetricsName("//metric-a"), is("//metric-a")); + assertThat(component.getMetricsName("meter://metric-a"), is("//metric-a")); + } + + @Test + public void testCreateNewEndpointForCounter() throws Exception { + Endpoint endpoint = component.createNewEndpoint(metricRegistry, MetricsType.COUNTER, "a name"); + assertThat(endpoint, is(notNullValue())); + assertThat(endpoint, is(instanceOf(CounterEndpoint.class))); + } -public class MetricsComponentTest extends CamelTestSupport { - - @Produce(uri = "direct:start") - protected ProducerTemplate template; - - @Test - public void testMetrics() throws Exception { - MockEndpoint mock = getMockEndpoint("mock:result"); - mock.expectedMinimumMessageCount(1); - template.sendBody(new Object()); - assertMockEndpointsSatisfied(); - } - - @Override - protected RouteBuilder createRouteBuilder() throws Exception { - return new RouteBuilder() { - @Override - public void configure() { - from("direct:start") - // .to("metrics") - // .to("metrics:") - .to("metrics:A") - .to("metrics:counter://B") - .to("metrics:counter:C?increment=19291") - .to("metrics:counter:C?decrement=19292") - .to("metrics:counter:C") - .to("metrics:meter:D") - .to("metrics:meter:D?mark=90001") - .to("mock:result"); - } - }; + @Test + public void testCreateNewEndpointForMeter() throws Exception { + Endpoint endpoint = component.createNewEndpoint(metricRegistry, MetricsType.METER, "a name"); + assertThat(endpoint, is(notNullValue())); + assertThat(endpoint, is(instanceOf(MeterEndpoint.class))); + } + + @Test(expected = RuntimeCamelException.class) + public void testCreateNewEndpointForGauge() throws Exception { + component.createNewEndpoint(metricRegistry, MetricsType.GAUGE, "a name"); + } + + @Test(expected = RuntimeCamelException.class) + public void testCreateNewEndpointForHistogram() throws Exception { + component.createNewEndpoint(metricRegistry, MetricsType.HISTOGRAM, "a name"); + } + + @Test(expected = RuntimeCamelException.class) + public void testCreateNewEndpointForTimer() throws Exception { + component.createNewEndpoint(metricRegistry, MetricsType.TIMER, "a name"); + } + + @Test + public void testGetMetricsType() throws Exception { + for (MetricsType type : EnumSet.allOf(MetricsType.class)) { + assertThat(component.getMetricsType(type.toString() + ":metrics-name"), is(type)); + } + } + + @Test + public void testGetMetricsTypeNotSet() throws Exception { + assertThat(component.getMetricsType("no-metrics-type"), is(MetricsComponent.DEFAULT_METRICS_TYPE)); + } + + @Test(expected = RuntimeCamelException.class) + public void testGetMetricsTypeNotFound() throws Exception { + component.getMetricsType("unknown-metrics:metrics-name"); + } + + @Test + public void testGetOrCreateMetricRegistryFoundInCamelRegistry() throws Exception { + when(camelRegistry.lookupByNameAndType("name", MetricRegistry.class)).thenReturn(metricRegistry); + MetricRegistry result = component.getOrCreateMetricRegistry(camelRegistry, "name"); + assertThat(result, is(metricRegistry)); + inOrder.verify(camelRegistry, times(1)).lookupByNameAndType("name", MetricRegistry.class); + inOrder.verifyNoMoreInteractions(); + } + + @Test + public void testGetOrCreateMetricRegistryNotFoundInCamelRegistry() throws Exception { + when(camelRegistry.lookupByNameAndType("name", MetricRegistry.class)).thenReturn(null); + MetricRegistry result = component.getOrCreateMetricRegistry(camelRegistry, "name"); + assertThat(result, is(notNullValue())); + assertThat(result, is(not(metricRegistry))); + inOrder.verify(camelRegistry, times(1)).lookupByNameAndType("name", MetricRegistry.class); + inOrder.verifyNoMoreInteractions(); + } + + @Test + public void testGetMetricRegistryFromCamelRegistry() throws Exception { + when(camelRegistry.lookupByNameAndType("name", MetricRegistry.class)).thenReturn(metricRegistry); + MetricRegistry result = component.getMetricRegistryFromCamelRegistry(camelRegistry, "name"); + assertThat(result, is(metricRegistry)); + inOrder.verify(camelRegistry, times(1)).lookupByNameAndType("name", MetricRegistry.class); + inOrder.verifyNoMoreInteractions(); + } + + @Test + public void testCreateMetricRegistry() throws Exception { + MetricRegistry registry = component.createMetricRegistry(); + assertThat(registry, is(notNullValue())); } } http://git-wip-us.apache.org/repos/asf/camel/blob/225d11d9/src/test/java/org/apache/camel/metrics/MetricsTypeTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/camel/metrics/MetricsTypeTest.java b/src/test/java/org/apache/camel/metrics/MetricsTypeTest.java new file mode 100644 index 0000000..2d0d28d --- /dev/null +++ b/src/test/java/org/apache/camel/metrics/MetricsTypeTest.java @@ -0,0 +1,19 @@ +package org.apache.camel.metrics; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; + +import java.util.EnumSet; + +import org.junit.Test; + +public class MetricsTypeTest { + + @Test + public void testGetByName() throws Exception { + for (MetricsType type : EnumSet.allOf(MetricsType.class)) { + MetricsType t = MetricsType.getByName(type.toString()); + assertThat(t, is(type)); + } + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/225d11d9/src/test/java/org/apache/camel/metrics/counter/CounterEndpointTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/camel/metrics/counter/CounterEndpointTest.java b/src/test/java/org/apache/camel/metrics/counter/CounterEndpointTest.java new file mode 100644 index 0000000..8f713a2 --- /dev/null +++ b/src/test/java/org/apache/camel/metrics/counter/CounterEndpointTest.java @@ -0,0 +1,88 @@ +package org.apache.camel.metrics.counter; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.instanceOf; +import static org.hamcrest.Matchers.notNullValue; +import static org.hamcrest.Matchers.nullValue; + +import org.apache.camel.Producer; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InOrder; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.runners.MockitoJUnitRunner; + +import com.codahale.metrics.MetricRegistry; + +@RunWith(MockitoJUnitRunner.class) +public class CounterEndpointTest { + + private static final String METRICS_NAME = "metrics.name"; + private static final Long VALUE = System.currentTimeMillis(); + + @Mock + private MetricRegistry registry; + + private CounterEndpoint endpoint; + + private InOrder inOrder; + + @Before + public void setUp() throws Exception { + endpoint = new CounterEndpoint(registry, METRICS_NAME); + inOrder = Mockito.inOrder(registry); + } + + @After + public void tearDown() { + inOrder.verifyNoMoreInteractions(); + } + + @Test + public void testCounterEndpoint() throws Exception { + assertThat(endpoint.getRegistry(), is(registry)); + assertThat(endpoint.getMetricsName(), is(METRICS_NAME)); + assertThat(endpoint.getIncrement(), is(nullValue())); + assertThat(endpoint.getDecrement(), is(nullValue())); + } + + @Test + public void testCreateProducer() throws Exception { + Producer producer = endpoint.createProducer(); + assertThat(producer, is(notNullValue())); + assertThat(producer, is(instanceOf(CounterProducer.class))); + } + + @Test + public void testGetIncrement() throws Exception { + assertThat(endpoint.getIncrement(), is(nullValue())); + } + + @Test + public void testSetIncrement() throws Exception { + assertThat(endpoint.getIncrement(), is(nullValue())); + endpoint.setIncrement(VALUE); + assertThat(endpoint.getIncrement(), is(VALUE)); + } + + @Test + public void testGetDecrement() throws Exception { + assertThat(endpoint.getDecrement(), is(nullValue())); + } + + @Test + public void testSetDecrement() throws Exception { + assertThat(endpoint.getDecrement(), is(nullValue())); + endpoint.setDecrement(VALUE); + assertThat(endpoint.getDecrement(), is(VALUE)); + } + + @Test + public void testCreateEndpointUri() throws Exception { + assertThat(endpoint.createEndpointUri(), is(CounterEndpoint.ENDPOINT_URI)); + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/225d11d9/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 new file mode 100644 index 0000000..3b1b89b --- /dev/null +++ b/src/test/java/org/apache/camel/metrics/counter/CounterProducerTest.java @@ -0,0 +1,112 @@ +package org.apache.camel.metrics.counter; + +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.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InOrder; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.runners.MockitoJUnitRunner; + +import com.codahale.metrics.Counter; +import com.codahale.metrics.MetricRegistry; + +@RunWith(MockitoJUnitRunner.class) +public class CounterProducerTest { + + private static final String ENDPOINT_NAME = "endpoint.name"; + private static final Long INCREMENT = 100000L; + private static final Long DECREMENT = 91929199L; + + @Mock + private CounterEndpoint endpoint; + + @Mock + private Exchange exchange; + + @Mock + private MetricRegistry registry; + + @Mock + private Counter counter; + + private CounterProducer producer; + + private InOrder inOrder; + + @Before + public void setUp() throws Exception { + producer = new CounterProducer(endpoint); + inOrder = Mockito.inOrder(endpoint, exchange, registry, counter); + when(endpoint.getMetricsName()).thenReturn(ENDPOINT_NAME); + when(endpoint.getRegistry()).thenReturn(registry); + when(registry.counter(ENDPOINT_NAME)).thenReturn(counter); + } + + @Test + public void testCounterProducer() throws Exception { + assertThat(producer.getEndpoint().equals(endpoint), is(true)); + } + + @Test + public void testProcessWithIncrementOnly() throws Exception { + when(endpoint.getIncrement()).thenReturn(INCREMENT); + when(endpoint.getDecrement()).thenReturn(null); + producer.process(exchange); + inOrder.verify(endpoint, times(1)).getMetricsName(); + inOrder.verify(endpoint, times(1)).getRegistry(); + inOrder.verify(registry, times(1)).counter(ENDPOINT_NAME); + inOrder.verify(endpoint, times(1)).getIncrement(); + inOrder.verify(endpoint, times(1)).getDecrement(); + inOrder.verify(counter, times(1)).inc(INCREMENT); + inOrder.verifyNoMoreInteractions(); + } + + @Test + public void testProcessWithDecrementOnly() throws Exception { + when(endpoint.getIncrement()).thenReturn(null); + when(endpoint.getDecrement()).thenReturn(DECREMENT); + producer.process(exchange); + inOrder.verify(endpoint, times(1)).getMetricsName(); + inOrder.verify(endpoint, times(1)).getRegistry(); + inOrder.verify(registry, times(1)).counter(ENDPOINT_NAME); + inOrder.verify(endpoint, times(1)).getIncrement(); + inOrder.verify(endpoint, times(1)).getDecrement(); + inOrder.verify(counter, times(1)).dec(DECREMENT); + inOrder.verifyNoMoreInteractions(); + } + + @Test + public void testProcessWithIncrementAndDecrement() throws Exception { + when(endpoint.getIncrement()).thenReturn(INCREMENT); + when(endpoint.getDecrement()).thenReturn(DECREMENT); + producer.process(exchange); + inOrder.verify(endpoint, times(1)).getMetricsName(); + inOrder.verify(endpoint, times(1)).getRegistry(); + inOrder.verify(registry, times(1)).counter(ENDPOINT_NAME); + inOrder.verify(endpoint, times(1)).getIncrement(); + inOrder.verify(endpoint, times(1)).getDecrement(); + inOrder.verify(counter, times(1)).inc(INCREMENT); + inOrder.verifyNoMoreInteractions(); + } + + @Test + public void testProcessWithOutIncrementAndDecrement() throws Exception { + when(endpoint.getIncrement()).thenReturn(null); + when(endpoint.getDecrement()).thenReturn(null); + producer.process(exchange); + inOrder.verify(endpoint, times(1)).getMetricsName(); + inOrder.verify(endpoint, times(1)).getRegistry(); + inOrder.verify(registry, times(1)).counter(ENDPOINT_NAME); + inOrder.verify(endpoint, times(1)).getIncrement(); + inOrder.verify(endpoint, times(1)).getDecrement(); + inOrder.verify(counter, times(1)).inc(); + inOrder.verifyNoMoreInteractions(); + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/225d11d9/src/test/java/org/apache/camel/metrics/meter/MeterEndpointTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/camel/metrics/meter/MeterEndpointTest.java b/src/test/java/org/apache/camel/metrics/meter/MeterEndpointTest.java new file mode 100644 index 0000000..3779da9 --- /dev/null +++ b/src/test/java/org/apache/camel/metrics/meter/MeterEndpointTest.java @@ -0,0 +1,75 @@ +package org.apache.camel.metrics.meter; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.instanceOf; +import static org.hamcrest.Matchers.notNullValue; +import static org.hamcrest.Matchers.nullValue; + +import org.apache.camel.Producer; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InOrder; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.runners.MockitoJUnitRunner; + +import com.codahale.metrics.MetricRegistry; + +@RunWith(MockitoJUnitRunner.class) +public class MeterEndpointTest { + + private static final String METRICS_NAME = "metrics.name"; + private static final Long VALUE = System.currentTimeMillis(); + + @Mock + private MetricRegistry registry; + + private MeterEndpoint endpoint; + + private InOrder inOrder; + + @Before + public void setUp() throws Exception { + endpoint = new MeterEndpoint(registry, METRICS_NAME); + inOrder = Mockito.inOrder(registry); + } + + @After + public void tearDown() throws Exception { + inOrder.verifyNoMoreInteractions(); + } + + @Test + public void testMeterEndpoint() throws Exception { + assertThat(endpoint, is(notNullValue())); + assertThat(endpoint.getRegistry(), is(registry)); + assertThat(endpoint.getMetricsName(), is(METRICS_NAME)); + } + + @Test + public void testCreateProducer() throws Exception { + Producer producer = endpoint.createProducer(); + assertThat(producer, is(notNullValue())); + assertThat(producer, is(instanceOf(MeterProducer.class))); + } + + @Test + public void testGetMark() throws Exception { + assertThat(endpoint.getMark(), is(nullValue())); + } + + @Test + public void testSetMark() throws Exception { + assertThat(endpoint.getMark(), is(nullValue())); + endpoint.setMark(VALUE); + assertThat(endpoint.getMark(), is(VALUE)); + } + + @Test + public void testCreateEndpointUri() throws Exception { + assertThat(endpoint.createEndpointUri(), is(MeterEndpoint.ENDPOINT_URI)); + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/225d11d9/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 new file mode 100644 index 0000000..26c853a --- /dev/null +++ b/src/test/java/org/apache/camel/metrics/meter/MeterProducerTest.java @@ -0,0 +1,81 @@ +package org.apache.camel.metrics.meter; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.notNullValue; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.when; + +import org.apache.camel.Exchange; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InOrder; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.runners.MockitoJUnitRunner; + +import com.codahale.metrics.Meter; +import com.codahale.metrics.MetricRegistry; + +@RunWith(MockitoJUnitRunner.class) +public class MeterProducerTest { + + private static final String METRICS_NAME = "metrics.name"; + private static final Long MARK = 9919120L; + + @Mock + private MeterEndpoint endpoint; + + @Mock + private MetricRegistry registry; + + @Mock + private Meter meter; + + @Mock + private Exchange exchange; + + private MeterProducer producer; + + private InOrder inOrder; + + @Before + public void setUp() throws Exception { + producer = new MeterProducer(endpoint); + inOrder = Mockito.inOrder(endpoint, registry, meter, exchange); + when(endpoint.getRegistry()).thenReturn(registry); + when(endpoint.getMetricsName()).thenReturn(METRICS_NAME); + when(registry.meter(METRICS_NAME)).thenReturn(meter); + } + + @Test + public void testMeterProducer() throws Exception { + assertThat(producer, is(notNullValue())); + assertThat(producer.getEndpoint().equals(endpoint), is(true)); + } + + @Test + public void testProcessMarkSet() throws Exception { + when(endpoint.getMark()).thenReturn(MARK); + producer.process(exchange); + inOrder.verify(endpoint, times(1)).getMetricsName(); + inOrder.verify(endpoint, times(1)).getRegistry(); + inOrder.verify(registry, times(1)).meter(METRICS_NAME); + inOrder.verify(endpoint, times(1)).getMark(); + inOrder.verify(meter, times(1)).mark(MARK); + inOrder.verifyNoMoreInteractions(); + } + + @Test + public void testProcessMarkNotSet() throws Exception { + when(endpoint.getMark()).thenReturn(null); + producer.process(exchange); + inOrder.verify(endpoint, times(1)).getMetricsName(); + inOrder.verify(endpoint, times(1)).getRegistry(); + inOrder.verify(registry, times(1)).meter(METRICS_NAME); + inOrder.verify(endpoint, times(1)).getMark(); + inOrder.verify(meter, times(1)).mark(); + inOrder.verifyNoMoreInteractions(); + } +}