You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2017/03/14 17:40:17 UTC

camel git commit: Add OpenTracing span decorators for cassandra (cql), direct-vm, disruptor[-vm], elasticsearch and stomp

Repository: camel
Updated Branches:
  refs/heads/master 8cd032925 -> d73644159


Add OpenTracing span decorators for cassandra (cql), direct-vm, disruptor[-vm], elasticsearch and stomp


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

Branch: refs/heads/master
Commit: d7364415942cd55b224048888246229902d7990e
Parents: 8cd0329
Author: Gary Brown <ga...@brownuk.com>
Authored: Tue Mar 14 15:33:59 2017 +0000
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Mar 14 18:38:56 2017 +0100

----------------------------------------------------------------------
 .../decorators/CqlSpanDecorator.java            | 62 +++++++++++++++
 .../decorators/DirectvmSpanDecorator.java       | 26 ++++++
 .../decorators/DisruptorSpanDecorator.java      | 26 ++++++
 .../decorators/DisruptorvmSpanDecorator.java    | 26 ++++++
 .../decorators/ElasticsearchSpanDecorator.java  | 62 +++++++++++++++
 .../decorators/StompSpanDecorator.java          | 40 ++++++++++
 .../org.apache.camel.opentracing.SpanDecorator  |  6 ++
 .../decorators/CqlSpanDecoratorTest.java        | 84 ++++++++++++++++++++
 .../ElasticsearchSpanDecoratorTest.java         | 72 +++++++++++++++++
 .../decorators/StompSpanDecoratorTest.java      | 38 +++++++++
 10 files changed, 442 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/d7364415/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/CqlSpanDecorator.java
----------------------------------------------------------------------
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/CqlSpanDecorator.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/CqlSpanDecorator.java
new file mode 100644
index 0000000..28cc48d
--- /dev/null
+++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/CqlSpanDecorator.java
@@ -0,0 +1,62 @@
+/**
+ * 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.opentracing.decorators;
+
+import java.net.URI;
+import java.util.Map;
+
+import io.opentracing.Span;
+import io.opentracing.tag.Tags;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+
+public class CqlSpanDecorator extends AbstractSpanDecorator {
+
+    public static final String CASSANDRA_DB_TYPE = "cassandra";
+
+    protected static final String CAMEL_CQL_QUERY = "CamelCqlQuery";
+
+    @Override
+    public String getComponent() {
+        return "cql";
+    }
+
+    @Override
+    public void pre(Span span, Exchange exchange, Endpoint endpoint) {
+        super.pre(span, exchange, endpoint);
+
+        span.setTag(Tags.DB_TYPE.getKey(), CASSANDRA_DB_TYPE);
+
+        URI uri = URI.create(endpoint.getEndpointUri());
+        if (uri.getPath() != null && uri.getPath().length() > 0) {
+            // Strip leading '/' from path
+            span.setTag(Tags.DB_INSTANCE.getKey(), uri.getPath().substring(1));
+        }
+
+        Object cql = exchange.getIn().getHeader(CAMEL_CQL_QUERY);
+        if (cql != null) {
+            span.setTag(Tags.DB_STATEMENT.getKey(), cql.toString());
+        } else {
+            Map<String, String> queryParameters = toQueryParameters(endpoint.getEndpointUri());
+            if (queryParameters.containsKey("cql")) {
+                span.setTag(Tags.DB_STATEMENT.getKey(), queryParameters.get("cql"));
+            }
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/d7364415/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/DirectvmSpanDecorator.java
----------------------------------------------------------------------
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/DirectvmSpanDecorator.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/DirectvmSpanDecorator.java
new file mode 100644
index 0000000..bb3c8e6
--- /dev/null
+++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/DirectvmSpanDecorator.java
@@ -0,0 +1,26 @@
+/**
+ * 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.opentracing.decorators;
+
+public class DirectvmSpanDecorator extends AbstractInternalSpanDecorator {
+
+    @Override
+    public String getComponent() {
+        return "direct-vm";
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/d7364415/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/DisruptorSpanDecorator.java
----------------------------------------------------------------------
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/DisruptorSpanDecorator.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/DisruptorSpanDecorator.java
new file mode 100644
index 0000000..2d431bd
--- /dev/null
+++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/DisruptorSpanDecorator.java
@@ -0,0 +1,26 @@
+/**
+ * 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.opentracing.decorators;
+
+public class DisruptorSpanDecorator extends AbstractInternalSpanDecorator {
+
+    @Override
+    public String getComponent() {
+        return "disruptor";
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/d7364415/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/DisruptorvmSpanDecorator.java
----------------------------------------------------------------------
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/DisruptorvmSpanDecorator.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/DisruptorvmSpanDecorator.java
new file mode 100644
index 0000000..7d79786
--- /dev/null
+++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/DisruptorvmSpanDecorator.java
@@ -0,0 +1,26 @@
+/**
+ * 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.opentracing.decorators;
+
+public class DisruptorvmSpanDecorator extends AbstractInternalSpanDecorator {
+
+    @Override
+    public String getComponent() {
+        return "disruptor-vm";
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/d7364415/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/ElasticsearchSpanDecorator.java
----------------------------------------------------------------------
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/ElasticsearchSpanDecorator.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/ElasticsearchSpanDecorator.java
new file mode 100644
index 0000000..ee8f72d
--- /dev/null
+++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/ElasticsearchSpanDecorator.java
@@ -0,0 +1,62 @@
+/**
+ * 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.opentracing.decorators;
+
+import java.util.Map;
+
+import io.opentracing.Span;
+import io.opentracing.tag.Tags;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+
+public class ElasticsearchSpanDecorator extends AbstractSpanDecorator {
+
+    public static final String ELASTICSEARCH_DB_TYPE = "elasticsearch";
+
+    public static final String ELASTICSEARCH_CLUSTER_TAG = "elasticsearch.cluster";
+
+    @Override
+    public String getComponent() {
+        return "elasticsearch";
+    }
+
+    @Override
+    public String getOperationName(Exchange exchange, Endpoint endpoint) {
+        Map<String, String> queryParameters = toQueryParameters(endpoint.getEndpointUri());
+        return queryParameters.containsKey("operation") ? queryParameters.get("operation")
+                : super.getOperationName(exchange, endpoint);
+    }
+
+    @Override
+    public void pre(Span span, Exchange exchange, Endpoint endpoint) {
+        super.pre(span, exchange, endpoint);
+
+        span.setTag(Tags.DB_TYPE.getKey(), ELASTICSEARCH_DB_TYPE);
+
+        Map<String, String> queryParameters = toQueryParameters(endpoint.getEndpointUri());
+        if (queryParameters.containsKey("indexName")) {
+            span.setTag(Tags.DB_INSTANCE.getKey(), queryParameters.get("indexName"));
+        }
+
+        String cluster = stripSchemeAndOptions(endpoint);
+        if (cluster != null) {
+            span.setTag(ELASTICSEARCH_CLUSTER_TAG, cluster);
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/d7364415/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/StompSpanDecorator.java
----------------------------------------------------------------------
diff --git a/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/StompSpanDecorator.java b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/StompSpanDecorator.java
new file mode 100644
index 0000000..c152fac
--- /dev/null
+++ b/components/camel-opentracing/src/main/java/org/apache/camel/opentracing/decorators/StompSpanDecorator.java
@@ -0,0 +1,40 @@
+/**
+ * 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.opentracing.decorators;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+
+public class StompSpanDecorator extends AbstractMessagingSpanDecorator {
+
+    protected static final String QUEUE_PREFIX = "queue:";
+
+    @Override
+    public String getComponent() {
+        return "stomp";
+    }
+
+    @Override
+    public String getDestination(Exchange exchange, Endpoint endpoint) {
+        String destination = super.getDestination(exchange, endpoint);
+        if (destination.startsWith(QUEUE_PREFIX)) {
+            destination = destination.substring(QUEUE_PREFIX.length());
+        }
+        return destination;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/d7364415/components/camel-opentracing/src/main/resources/META-INF/services/org.apache.camel.opentracing.SpanDecorator
----------------------------------------------------------------------
diff --git a/components/camel-opentracing/src/main/resources/META-INF/services/org.apache.camel.opentracing.SpanDecorator b/components/camel-opentracing/src/main/resources/META-INF/services/org.apache.camel.opentracing.SpanDecorator
index 68af6ca..36c2805 100644
--- a/components/camel-opentracing/src/main/resources/META-INF/services/org.apache.camel.opentracing.SpanDecorator
+++ b/components/camel-opentracing/src/main/resources/META-INF/services/org.apache.camel.opentracing.SpanDecorator
@@ -21,7 +21,12 @@ org.apache.camel.opentracing.decorators.AwsSqsSpanDecorator
 org.apache.camel.opentracing.decorators.AwsSnsSpanDecorator
 org.apache.camel.opentracing.decorators.CometdSpanDecorator
 org.apache.camel.opentracing.decorators.CometdsSpanDecorator
+org.apache.camel.opentracing.decorators.CqlSpanDecorator
 org.apache.camel.opentracing.decorators.DirectSpanDecorator
+org.apache.camel.opentracing.decorators.DirectvmSpanDecorator
+org.apache.camel.opentracing.decorators.DisruptorSpanDecorator
+org.apache.camel.opentracing.decorators.DisruptorvmSpanDecorator
+org.apache.camel.opentracing.decorators.ElasticsearchSpanDecorator
 org.apache.camel.opentracing.decorators.Http4SpanDecorator
 org.apache.camel.opentracing.decorators.HttpSpanDecorator
 org.apache.camel.opentracing.decorators.IronmqSpanDecorator
@@ -40,6 +45,7 @@ org.apache.camel.opentracing.decorators.SedaSpanDecorator
 org.apache.camel.opentracing.decorators.ServletSpanDecorator
 org.apache.camel.opentracing.decorators.SjmsSpanDecorator
 org.apache.camel.opentracing.decorators.SqlSpanDecorator
+org.apache.camel.opentracing.decorators.StompSpanDecorator
 org.apache.camel.opentracing.decorators.TimerSpanDecorator
 org.apache.camel.opentracing.decorators.UndertowSpanDecorator
 org.apache.camel.opentracing.decorators.VmSpanDecorator

http://git-wip-us.apache.org/repos/asf/camel/blob/d7364415/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/CqlSpanDecoratorTest.java
----------------------------------------------------------------------
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/CqlSpanDecoratorTest.java b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/CqlSpanDecoratorTest.java
new file mode 100644
index 0000000..bfe904f
--- /dev/null
+++ b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/CqlSpanDecoratorTest.java
@@ -0,0 +1,84 @@
+/**
+ * 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.opentracing.decorators;
+
+import io.opentracing.mock.MockSpan;
+import io.opentracing.mock.MockTracer;
+import io.opentracing.tag.Tags;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.opentracing.SpanDecorator;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
+public class CqlSpanDecoratorTest {
+
+    @Test
+    public void testPreCqlFromUri() {
+        String cql = "select%20*%20from%20users";
+        String keyspace = "test";
+
+        Endpoint endpoint = Mockito.mock(Endpoint.class);
+        Exchange exchange = Mockito.mock(Exchange.class);
+        Message message = Mockito.mock(Message.class);
+
+        Mockito.when(endpoint.getEndpointUri()).thenReturn("cql://host1,host2:8080/" + keyspace + "?cql="
+                + cql + "&consistencyLevel=quorum");
+        Mockito.when(exchange.getIn()).thenReturn(message);
+
+        SpanDecorator decorator = new CqlSpanDecorator();
+
+        MockTracer tracer = new MockTracer();
+        MockSpan span = (MockSpan)tracer.buildSpan("TestSpan").start();
+
+        decorator.pre(span, exchange, endpoint);
+
+        assertEquals(CqlSpanDecorator.CASSANDRA_DB_TYPE, span.tags().get(Tags.DB_TYPE.getKey()));
+        assertEquals(cql, span.tags().get(Tags.DB_STATEMENT.getKey()));
+        assertEquals(keyspace, span.tags().get(Tags.DB_INSTANCE.getKey()));
+    }
+
+    @Test
+    public void testPreCqlFromHeader() {
+        String cql = "select * from users";
+
+        Endpoint endpoint = Mockito.mock(Endpoint.class);
+        Exchange exchange = Mockito.mock(Exchange.class);
+        Message message = Mockito.mock(Message.class);
+
+        Mockito.when(endpoint.getEndpointUri()).thenReturn("cql://host1,host2?consistencyLevel=quorum");
+        Mockito.when(exchange.getIn()).thenReturn(message);
+        Mockito.when(message.getHeader(CqlSpanDecorator.CAMEL_CQL_QUERY)).thenReturn(cql);
+
+        SpanDecorator decorator = new CqlSpanDecorator();
+
+        MockTracer tracer = new MockTracer();
+        MockSpan span = (MockSpan)tracer.buildSpan("TestSpan").start();
+
+        decorator.pre(span, exchange, endpoint);
+
+        assertEquals(CqlSpanDecorator.CASSANDRA_DB_TYPE, span.tags().get(Tags.DB_TYPE.getKey()));
+        assertEquals(cql, span.tags().get(Tags.DB_STATEMENT.getKey()));
+        assertNull(span.tags().get(Tags.DB_INSTANCE.getKey()));
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/d7364415/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/ElasticsearchSpanDecoratorTest.java
----------------------------------------------------------------------
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/ElasticsearchSpanDecoratorTest.java b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/ElasticsearchSpanDecoratorTest.java
new file mode 100644
index 0000000..9847b2d
--- /dev/null
+++ b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/ElasticsearchSpanDecoratorTest.java
@@ -0,0 +1,72 @@
+/**
+ * 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.opentracing.decorators;
+
+import io.opentracing.mock.MockSpan;
+import io.opentracing.mock.MockTracer;
+import io.opentracing.tag.Tags;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.opentracing.SpanDecorator;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+import static org.junit.Assert.assertEquals;
+
+public class ElasticsearchSpanDecoratorTest {
+
+    @Test
+    public void testOperationName() {
+        String opName = "INDEX";
+        Endpoint endpoint = Mockito.mock(Endpoint.class);
+
+        Mockito.when(endpoint.getEndpointUri()).thenReturn("elasticsearch://local?operation="
+                + opName + "&indexName=twitter&indexType=tweet");
+
+        SpanDecorator decorator = new ElasticsearchSpanDecorator();
+
+        assertEquals(opName, decorator.getOperationName(null, endpoint));
+    }
+
+    @Test
+    public void testPre() {
+        String indexName = "twitter";
+        String cluster = "local";
+
+        Endpoint endpoint = Mockito.mock(Endpoint.class);
+        Exchange exchange = Mockito.mock(Exchange.class);
+        Message message = Mockito.mock(Message.class);
+
+        Mockito.when(endpoint.getEndpointUri()).thenReturn("elasticsearch://" + cluster
+                + "?operation=INDEX&indexName=" + indexName + "&indexType=tweet");
+        Mockito.when(exchange.getIn()).thenReturn(message);
+
+        SpanDecorator decorator = new ElasticsearchSpanDecorator();
+
+        MockTracer tracer = new MockTracer();
+        MockSpan span = tracer.buildSpan("TestSpan").start();
+
+        decorator.pre(span, exchange, endpoint);
+
+        assertEquals(ElasticsearchSpanDecorator.ELASTICSEARCH_DB_TYPE, span.tags().get(Tags.DB_TYPE.getKey()));
+        assertEquals(indexName, span.tags().get(Tags.DB_INSTANCE.getKey()));
+        assertEquals(cluster, span.tags().get(ElasticsearchSpanDecorator.ELASTICSEARCH_CLUSTER_TAG));
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/d7364415/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/StompSpanDecoratorTest.java
----------------------------------------------------------------------
diff --git a/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/StompSpanDecoratorTest.java b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/StompSpanDecoratorTest.java
new file mode 100644
index 0000000..5535ea7
--- /dev/null
+++ b/components/camel-opentracing/src/test/java/org/apache/camel/opentracing/decorators/StompSpanDecoratorTest.java
@@ -0,0 +1,38 @@
+/**
+ * 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.opentracing.decorators;
+
+import org.apache.camel.Endpoint;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+import static org.junit.Assert.assertEquals;
+
+public class StompSpanDecoratorTest {
+
+    @Test
+    public void testGetDestination() {
+        Endpoint endpoint = Mockito.mock(Endpoint.class);
+
+        Mockito.when(endpoint.getEndpointUri()).thenReturn("stomp:queue:test");
+
+        StompSpanDecorator decorator = new StompSpanDecorator();
+
+        assertEquals("test", decorator.getDestination(null, endpoint));
+    }
+
+}