diff --git a/skywalking-sniffer/skywalking-sniffer-mock/pom.xml b/skywalking-sniffer/skywalking-sniffer-mock/pom.xml
index b18693f11..0c9310acf 100644
--- a/skywalking-sniffer/skywalking-sniffer-mock/pom.xml
+++ b/skywalking-sniffer/skywalking-sniffer-mock/pom.xml
@@ -9,7 +9,7 @@
4.0.0
skywalking-sniffer-mock
- This is a sniffer mock module, test for test-dependency, only.
+ This is a sniffer mock module. Simulate a sniffer, assemble one or more trace segments. Test-dependency, only.
diff --git a/skywalking-sniffer/skywalking-sniffer-mock/src/main/java/com/a/eye/skywalking/sniffer/mock/trace/TraceSegmentBuilderFactory.java b/skywalking-sniffer/skywalking-sniffer-mock/src/main/java/com/a/eye/skywalking/sniffer/mock/trace/TraceSegmentBuilderFactory.java
index f13b49a8f..3407ec21d 100644
--- a/skywalking-sniffer/skywalking-sniffer-mock/src/main/java/com/a/eye/skywalking/sniffer/mock/trace/TraceSegmentBuilderFactory.java
+++ b/skywalking-sniffer/skywalking-sniffer-mock/src/main/java/com/a/eye/skywalking/sniffer/mock/trace/TraceSegmentBuilderFactory.java
@@ -2,9 +2,11 @@ package com.a.eye.skywalking.sniffer.mock.trace;
import com.a.eye.skywalking.api.context.TracerContext;
import com.a.eye.skywalking.sniffer.mock.context.MockTracerContextListener;
+import com.a.eye.skywalking.sniffer.mock.trace.builders.trace.DubboServerMysqlTraceBuilder;
import com.a.eye.skywalking.sniffer.mock.trace.builders.trace.SingleTomcat200TraceBuilder;
import com.a.eye.skywalking.sniffer.mock.trace.builders.trace.SingleTomcat404TraceBuilder;
import com.a.eye.skywalking.sniffer.mock.trace.builders.trace.SingleTomcat500TraceBuilder;
+import com.a.eye.skywalking.sniffer.mock.trace.builders.trace.TomcatDubboClientTraceBuilder;
import com.a.eye.skywalking.trace.TraceSegment;
/**
@@ -19,7 +21,6 @@ public enum TraceSegmentBuilderFactory {
/**
* @see {@link SingleTomcat200TraceBuilder}
*
- * @return
*/
public TraceSegment singleTomcat200Trace(){
return this.build(SingleTomcat200TraceBuilder.INSTANCE);
@@ -28,7 +29,6 @@ public enum TraceSegmentBuilderFactory {
/**
* @see {@link SingleTomcat404TraceBuilder}
*
- * @return
*/
public TraceSegment singleTomcat404Trace(){
return this.build(SingleTomcat404TraceBuilder.INSTANCE);
@@ -37,12 +37,25 @@ public enum TraceSegmentBuilderFactory {
/**
* @see {@link SingleTomcat500TraceBuilder}
*
- * @return
*/
public TraceSegment singleTomcat500Trace(){
return this.build(SingleTomcat500TraceBuilder.INSTANCE);
}
+ /**
+ * @see {@link TomcatDubboClientTraceBuilder}
+ */
+ public TraceSegment traceOf_Tomcat_DubboClient(){
+ return this.build(TomcatDubboClientTraceBuilder.INSTANCE);
+ }
+
+ /**
+ * @see {@link DubboServerMysqlTraceBuilder}
+ */
+ public TraceSegment traceOf_DubboServer_MySQL() {
+ return this.build(DubboServerMysqlTraceBuilder.INSTANCE);
+ }
+
private TraceSegment build(TraceSegmentBuilder builder){
MockTracerContextListener listener = new MockTracerContextListener();
try{
diff --git a/skywalking-sniffer/skywalking-sniffer-mock/src/main/java/com/a/eye/skywalking/sniffer/mock/trace/builders/span/DubboSpanGenerator.java b/skywalking-sniffer/skywalking-sniffer-mock/src/main/java/com/a/eye/skywalking/sniffer/mock/trace/builders/span/DubboSpanGenerator.java
new file mode 100644
index 000000000..fdba25e7a
--- /dev/null
+++ b/skywalking-sniffer/skywalking-sniffer-mock/src/main/java/com/a/eye/skywalking/sniffer/mock/trace/builders/span/DubboSpanGenerator.java
@@ -0,0 +1,44 @@
+package com.a.eye.skywalking.sniffer.mock.trace.builders.span;
+
+import com.a.eye.skywalking.api.context.ContextManager;
+import com.a.eye.skywalking.trace.Span;
+import com.a.eye.skywalking.trace.tag.Tags;
+
+/**
+ * The DubboSpanGenerator generates all possible spans, by tracing Dubbo rpc.
+ * Including client/server side span.
+ *
+ * @author wusheng
+ */
+public class DubboSpanGenerator {
+ public static class Client extends SpanGeneration{
+ @Override protected void before() {
+ Span span = ContextManager.INSTANCE.createSpan("/default_rpc/com.a.eye.skywalking.test.persistence.PersistenceService.query");
+ Tags.COMPONENT.set(span, "Dubbo");
+ Tags.URL.set(span, "rest://192.168.1.8:20880/default_rpc/com.a.eye.skywalking.test.persistence.PersistenceService.query(String)");
+ Tags.SPAN_KIND.set(span, Tags.SPAN_KIND_SERVER);
+ Tags.PEER_HOST.set(span, "192.168.1.8");
+ Tags.PEER_PORT.set(span, 20880);
+ Tags.SPAN_LAYER.asHttp(span);
+ }
+
+ @Override protected void after() {
+ ContextManager.INSTANCE.stopSpan();
+ }
+ }
+
+ public static class Server extends SpanGeneration{
+ @Override protected void before() {
+ Span span = ContextManager.INSTANCE.createSpan("/default_rpc/com.a.eye.skywalking.test.persistence.PersistenceService.query");
+ Tags.COMPONENT.set(span, "Dubbo");
+ Tags.URL.set(span, "rest://192.168.1.8:20880/default_rpc/com.a.eye.skywalking.test.persistence.PersistenceService.query(String)");
+ Tags.SPAN_KIND.set(span, Tags.SPAN_KIND_CLIENT);
+ Tags.PEER_HOST.set(span, "10.21.9.35");
+ Tags.SPAN_LAYER.asHttp(span);
+ }
+
+ @Override protected void after() {
+ ContextManager.INSTANCE.stopSpan();
+ }
+ }
+}
diff --git a/skywalking-sniffer/skywalking-sniffer-mock/src/main/java/com/a/eye/skywalking/sniffer/mock/trace/builders/span/MySQLGenerator.java b/skywalking-sniffer/skywalking-sniffer-mock/src/main/java/com/a/eye/skywalking/sniffer/mock/trace/builders/span/MySQLGenerator.java
new file mode 100644
index 000000000..78097f919
--- /dev/null
+++ b/skywalking-sniffer/skywalking-sniffer-mock/src/main/java/com/a/eye/skywalking/sniffer/mock/trace/builders/span/MySQLGenerator.java
@@ -0,0 +1,30 @@
+package com.a.eye.skywalking.sniffer.mock.trace.builders.span;
+
+import com.a.eye.skywalking.api.context.ContextManager;
+import com.a.eye.skywalking.trace.Span;
+import com.a.eye.skywalking.trace.tag.Tags;
+
+/**
+ * The MySQLGenerator generates all possible spans, by tracing mysql client access.
+ *
+ * @author wusheng
+ */
+public class MySQLGenerator {
+ public static class Query extends SpanGeneration {
+ @Override protected void before() {
+ Span span = ContextManager.INSTANCE.createSpan("mysql/jdbi/statement/executeQuery");
+ Tags.COMPONENT.set(span, "Mysql");
+ Tags.SPAN_KIND.set(span, Tags.SPAN_KIND_CLIENT);
+ Tags.PEER_HOST.set(span, "10.5.34.18");
+ Tags.PEER_PORT.set(span, 30088);
+ Tags.DB_INSTANCE.set(span, "mysql-instance");
+ Tags.DB_STATEMENT.set(span, "select * from users where user_id = 1");
+ Tags.DB_TYPE.set(span, "sql");
+ Tags.SPAN_LAYER.asDB(span);
+ }
+
+ @Override protected void after() {
+ ContextManager.INSTANCE.stopSpan();
+ }
+ }
+}
diff --git a/skywalking-sniffer/skywalking-sniffer-mock/src/main/java/com/a/eye/skywalking/sniffer/mock/trace/builders/span/SpanGeneration.java b/skywalking-sniffer/skywalking-sniffer-mock/src/main/java/com/a/eye/skywalking/sniffer/mock/trace/builders/span/SpanGeneration.java
index 099c7469b..e148a3de0 100644
--- a/skywalking-sniffer/skywalking-sniffer-mock/src/main/java/com/a/eye/skywalking/sniffer/mock/trace/builders/span/SpanGeneration.java
+++ b/skywalking-sniffer/skywalking-sniffer-mock/src/main/java/com/a/eye/skywalking/sniffer/mock/trace/builders/span/SpanGeneration.java
@@ -1,18 +1,20 @@
package com.a.eye.skywalking.sniffer.mock.trace.builders.span;
/**
- * Created by wusheng on 2017/2/28.
+ * The SpanGeneration implementations can generate several kinds of spans.
+ *
+ * @author wusheng
*/
public abstract class SpanGeneration {
- private SpanGeneration next;
+ private SpanGeneration[] next;
public SpanGeneration build(SpanGeneration next){
- this.next = next;
+ this.next = new SpanGeneration[]{next};
return next;
}
- public SpanGeneration build(){
- return this;
+ public void build(SpanGeneration... next){
+ this.next = next;
}
protected abstract void before();
@@ -22,7 +24,9 @@ public abstract class SpanGeneration {
public void generate(){
this.before();
if(next != null){
- next.generate();
+ for (SpanGeneration generation : next) {
+ generation.generate();
+ }
}
this.after();
}
diff --git a/skywalking-sniffer/skywalking-sniffer-mock/src/main/java/com/a/eye/skywalking/sniffer/mock/trace/builders/span/TomcatSpanGenerator.java b/skywalking-sniffer/skywalking-sniffer-mock/src/main/java/com/a/eye/skywalking/sniffer/mock/trace/builders/span/TomcatSpanGenerator.java
index 78b69ed56..5a37ba71f 100644
--- a/skywalking-sniffer/skywalking-sniffer-mock/src/main/java/com/a/eye/skywalking/sniffer/mock/trace/builders/span/TomcatSpanGenerator.java
+++ b/skywalking-sniffer/skywalking-sniffer-mock/src/main/java/com/a/eye/skywalking/sniffer/mock/trace/builders/span/TomcatSpanGenerator.java
@@ -15,9 +15,12 @@ public class TomcatSpanGenerator{
@Override protected void before() {
Span webSpan = ContextManager.INSTANCE.createSpan("/web/serviceA");
- Tags.COMPONENT.set(webSpan, "tomcat");
+ Tags.COMPONENT.set(webSpan, "Tomcat");
Tags.URL.set(webSpan, "http://10.21.9.35/web/serviceA");
Tags.SPAN_KIND.set(webSpan, Tags.SPAN_KIND_SERVER);
+ Tags.PEER_HOST.set(webSpan, "10.21.9.35");
+ Tags.PEER_PORT.set(webSpan, 80);
+ Tags.SPAN_LAYER.asHttp(webSpan);
}
@Override protected void after() {
@@ -32,9 +35,12 @@ public class TomcatSpanGenerator{
@Override protected void before() {
Span webSpan = ContextManager.INSTANCE.createSpan("/web/service/unknown");
- Tags.COMPONENT.set(webSpan, "tomcat");
+ Tags.COMPONENT.set(webSpan, "Tomcat");
Tags.URL.set(webSpan, "http://10.21.9.35/web/unknown");
Tags.SPAN_KIND.set(webSpan, Tags.SPAN_KIND_SERVER);
+ Tags.PEER_HOST.set(webSpan, "10.21.9.35");
+ Tags.PEER_PORT.set(webSpan, 80);
+ Tags.SPAN_LAYER.asHttp(webSpan);
}
@Override protected void after() {
@@ -49,9 +55,12 @@ public class TomcatSpanGenerator{
@Override protected void before() {
Span webSpan = ContextManager.INSTANCE.createSpan("/web/error/service");
- Tags.COMPONENT.set(webSpan, "tomcat");
+ Tags.COMPONENT.set(webSpan, "Tomcat");
Tags.URL.set(webSpan, "http://10.21.9.35/web/error/service");
Tags.SPAN_KIND.set(webSpan, Tags.SPAN_KIND_SERVER);
+ Tags.PEER_HOST.set(webSpan, "10.21.9.35");
+ Tags.PEER_PORT.set(webSpan, 80);
+ Tags.SPAN_LAYER.asHttp(webSpan);
}
@Override protected void after() {
diff --git a/skywalking-sniffer/skywalking-sniffer-mock/src/main/java/com/a/eye/skywalking/sniffer/mock/trace/builders/trace/DubboServerMysqlTraceBuilder.java b/skywalking-sniffer/skywalking-sniffer-mock/src/main/java/com/a/eye/skywalking/sniffer/mock/trace/builders/trace/DubboServerMysqlTraceBuilder.java
new file mode 100644
index 000000000..c5f14b58d
--- /dev/null
+++ b/skywalking-sniffer/skywalking-sniffer-mock/src/main/java/com/a/eye/skywalking/sniffer/mock/trace/builders/trace/DubboServerMysqlTraceBuilder.java
@@ -0,0 +1,21 @@
+package com.a.eye.skywalking.sniffer.mock.trace.builders.trace;
+
+import com.a.eye.skywalking.sniffer.mock.context.MockTracerContextListener;
+import com.a.eye.skywalking.sniffer.mock.trace.TraceSegmentBuilder;
+import com.a.eye.skywalking.sniffer.mock.trace.builders.span.DubboSpanGenerator;
+import com.a.eye.skywalking.sniffer.mock.trace.builders.span.MySQLGenerator;
+import com.a.eye.skywalking.trace.TraceSegment;
+
+/**
+ * @author wusheng
+ */
+public enum DubboServerMysqlTraceBuilder implements TraceSegmentBuilder {
+ INSTANCE;
+
+ @Override public TraceSegment build(MockTracerContextListener listener) {
+ DubboSpanGenerator.Server rootSpan = new DubboSpanGenerator.Server();
+ rootSpan.build(new MySQLGenerator.Query());
+ rootSpan.generate();
+ return listener.getFinished(0);
+ }
+}
diff --git a/skywalking-sniffer/skywalking-sniffer-mock/src/main/java/com/a/eye/skywalking/sniffer/mock/trace/builders/trace/SingleTomcat200TraceBuilder.java b/skywalking-sniffer/skywalking-sniffer-mock/src/main/java/com/a/eye/skywalking/sniffer/mock/trace/builders/trace/SingleTomcat200TraceBuilder.java
index 5b827f701..56b227417 100644
--- a/skywalking-sniffer/skywalking-sniffer-mock/src/main/java/com/a/eye/skywalking/sniffer/mock/trace/builders/trace/SingleTomcat200TraceBuilder.java
+++ b/skywalking-sniffer/skywalking-sniffer-mock/src/main/java/com/a/eye/skywalking/sniffer/mock/trace/builders/trace/SingleTomcat200TraceBuilder.java
@@ -14,7 +14,7 @@ public enum SingleTomcat200TraceBuilder implements TraceSegmentBuilder {
INSTANCE;
@Override public TraceSegment build(MockTracerContextListener listener) {
- TomcatSpanGenerator.ON200.INSTANCE.build().generate();
+ TomcatSpanGenerator.ON200.INSTANCE.generate();
return listener.getFinished(0);
}
}
diff --git a/skywalking-sniffer/skywalking-sniffer-mock/src/main/java/com/a/eye/skywalking/sniffer/mock/trace/builders/trace/SingleTomcat404TraceBuilder.java b/skywalking-sniffer/skywalking-sniffer-mock/src/main/java/com/a/eye/skywalking/sniffer/mock/trace/builders/trace/SingleTomcat404TraceBuilder.java
index 6000fb1b6..d1998e100 100644
--- a/skywalking-sniffer/skywalking-sniffer-mock/src/main/java/com/a/eye/skywalking/sniffer/mock/trace/builders/trace/SingleTomcat404TraceBuilder.java
+++ b/skywalking-sniffer/skywalking-sniffer-mock/src/main/java/com/a/eye/skywalking/sniffer/mock/trace/builders/trace/SingleTomcat404TraceBuilder.java
@@ -14,7 +14,7 @@ public enum SingleTomcat404TraceBuilder implements TraceSegmentBuilder {
INSTANCE;
@Override public TraceSegment build(MockTracerContextListener listener) {
- TomcatSpanGenerator.ON404.INSTANCE.build().generate();
+ TomcatSpanGenerator.ON404.INSTANCE.generate();
return listener.getFinished(0);
}
}
diff --git a/skywalking-sniffer/skywalking-sniffer-mock/src/main/java/com/a/eye/skywalking/sniffer/mock/trace/builders/trace/SingleTomcat500TraceBuilder.java b/skywalking-sniffer/skywalking-sniffer-mock/src/main/java/com/a/eye/skywalking/sniffer/mock/trace/builders/trace/SingleTomcat500TraceBuilder.java
index 5251f45f9..2f7d8ec92 100644
--- a/skywalking-sniffer/skywalking-sniffer-mock/src/main/java/com/a/eye/skywalking/sniffer/mock/trace/builders/trace/SingleTomcat500TraceBuilder.java
+++ b/skywalking-sniffer/skywalking-sniffer-mock/src/main/java/com/a/eye/skywalking/sniffer/mock/trace/builders/trace/SingleTomcat500TraceBuilder.java
@@ -14,7 +14,7 @@ public enum SingleTomcat500TraceBuilder implements TraceSegmentBuilder {
INSTANCE;
@Override public TraceSegment build(MockTracerContextListener listener) {
- TomcatSpanGenerator.ON500.INSTANCE.build().generate();
+ TomcatSpanGenerator.ON500.INSTANCE.generate();
return listener.getFinished(0);
}
}
diff --git a/skywalking-sniffer/skywalking-sniffer-mock/src/main/java/com/a/eye/skywalking/sniffer/mock/trace/builders/trace/TomcatDubboClientTraceBuilder.java b/skywalking-sniffer/skywalking-sniffer-mock/src/main/java/com/a/eye/skywalking/sniffer/mock/trace/builders/trace/TomcatDubboClientTraceBuilder.java
new file mode 100644
index 000000000..8ce8b718b
--- /dev/null
+++ b/skywalking-sniffer/skywalking-sniffer-mock/src/main/java/com/a/eye/skywalking/sniffer/mock/trace/builders/trace/TomcatDubboClientTraceBuilder.java
@@ -0,0 +1,25 @@
+package com.a.eye.skywalking.sniffer.mock.trace.builders.trace;
+
+import com.a.eye.skywalking.sniffer.mock.context.MockTracerContextListener;
+import com.a.eye.skywalking.sniffer.mock.trace.TraceSegmentBuilder;
+import com.a.eye.skywalking.sniffer.mock.trace.builders.span.DubboSpanGenerator;
+import com.a.eye.skywalking.sniffer.mock.trace.builders.span.TomcatSpanGenerator;
+import com.a.eye.skywalking.trace.TraceSegment;
+
+/**
+ * A Trace segment contains two spans with ChildOf relations,
+ * the parent is a Tomcat span,
+ * the child is a Dubbo client span.
+ *
+ * @author wusheng
+ */
+public enum TomcatDubboClientTraceBuilder implements TraceSegmentBuilder {
+ INSTANCE;
+
+ @Override public TraceSegment build(MockTracerContextListener listener) {
+ TomcatSpanGenerator.ON200 rootSpan = new TomcatSpanGenerator.ON200();
+ rootSpan.build(new DubboSpanGenerator.Client());
+ rootSpan.generate();
+ return listener.getFinished(0);
+ }
+}
diff --git a/skywalking-sniffer/skywalking-sniffer-mock/src/test/java/com/a/eye/skywalking/sniffer/mock/MockTracerContextListenerTestCase.java b/skywalking-sniffer/skywalking-sniffer-mock/src/test/java/com/a/eye/skywalking/sniffer/mock/MockTracerContextListenerTestCase.java
index ce43770c8..83f1d34b4 100644
--- a/skywalking-sniffer/skywalking-sniffer-mock/src/test/java/com/a/eye/skywalking/sniffer/mock/MockTracerContextListenerTestCase.java
+++ b/skywalking-sniffer/skywalking-sniffer-mock/src/test/java/com/a/eye/skywalking/sniffer/mock/MockTracerContextListenerTestCase.java
@@ -49,4 +49,18 @@ public class MockTracerContextListenerTestCase {
listener.clear();
listener.assertValidIndex(0);
}
+
+ @Test
+ public void testTraceOf_Tomcat_DubboClient(){
+ TraceSegment segment = TraceSegmentBuilderFactory.INSTANCE.traceOf_Tomcat_DubboClient();
+
+ Assert.assertEquals(2, segment.getSpans().size());
+ }
+
+ @Test
+ public void testTraceOf_DubboServer_MySQL(){
+ TraceSegment segment = TraceSegmentBuilderFactory.INSTANCE.traceOf_DubboServer_MySQL();
+
+ Assert.assertEquals(2, segment.getSpans().size());
+ }
}