diff --git a/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/Span.java b/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/Span.java index e44714220..75e7f3ab6 100644 --- a/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/Span.java +++ b/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/Span.java @@ -252,4 +252,14 @@ public class Span { public List getLogs() { return Collections.unmodifiableList(logs); } + + @Override + public String toString() { + return "Span{" + + "spanId=" + spanId + + ", parentSpanId=" + parentSpanId + + ", startTime=" + startTime + + ", operationName='" + operationName + '\'' + + '}'; + } } diff --git a/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/TraceSegment.java b/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/TraceSegment.java index 5d9d81b15..2aad0b3c8 100644 --- a/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/TraceSegment.java +++ b/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/TraceSegment.java @@ -124,4 +124,14 @@ public class TraceSegment { public List getSpans() { return Collections.unmodifiableList(spans); } + + @Override + public String toString() { + return "TraceSegment{" + + "traceSegmentId='" + traceSegmentId + '\'' + + ", endTime=" + endTime + + ", primaryRef=" + primaryRef + + ", spans.size=" + spans.size() + + '}'; + } } diff --git a/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/TraceSegmentRef.java b/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/TraceSegmentRef.java index 29abf0e41..8cea0a897 100644 --- a/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/TraceSegmentRef.java +++ b/skywalking-commons/skywalking-trace/src/main/java/com/a/eye/skywalking/trace/TraceSegmentRef.java @@ -15,7 +15,7 @@ public class TraceSegmentRef { /** * {@link Span#spanId} */ - private int spanId; + private int spanId = -1; /** * Create a {@link TraceSegmentRef} instance, without any data. @@ -38,4 +38,12 @@ public class TraceSegmentRef { public void setSpanId(int spanId) { this.spanId = spanId; } + + @Override + public String toString() { + return "TraceSegmentRef{" + + "traceSegmentId='" + traceSegmentId + '\'' + + ", spanId=" + spanId + + '}'; + } } diff --git a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/context/ContextCarrier.java b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/context/ContextCarrier.java index 85ccb13f5..a4bb855ff 100644 --- a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/context/ContextCarrier.java +++ b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/context/ContextCarrier.java @@ -29,7 +29,7 @@ public class ContextCarrier extends TraceSegmentRef implements Serializable { */ public ContextCarrier deserialize(String text) { if(text != null){ - String[] parts = text.split("|"); + String[] parts = text.split("\\|"); if(parts.length == 2){ try{ setSpanId(Integer.parseInt(parts[1])); @@ -42,4 +42,13 @@ public class ContextCarrier extends TraceSegmentRef implements Serializable { return this; } + /** + * Make sure this {@link ContextCarrier} has been initialized. + * + * @return true for unbroken {@link ContextCarrier} or no-initialized. Otherwise, false; + */ + public boolean isValid(){ + return !StringUtil.isEmpty(getTraceSegmentId()) && getSpanId() > -1; + } + } diff --git a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/context/TracerContext.java b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/context/TracerContext.java index c34d69592..a60911c27 100644 --- a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/context/TracerContext.java +++ b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/context/TracerContext.java @@ -95,7 +95,7 @@ public final class TracerContext { * * @param carrier holds the snapshot */ - private void inject(ContextCarrier carrier) { + public void inject(ContextCarrier carrier) { carrier.setTraceSegmentId(this.segment.getTraceSegmentId()); carrier.setSpanId(this.activeSpan().getSpanId()); } @@ -106,7 +106,7 @@ public final class TracerContext { * @param carrier holds the snapshot, if get this {@link ContextCarrier} from remote, make sure {@link * ContextCarrier#deserialize(String)} called. */ - private void extract(ContextCarrier carrier) { + public void extract(ContextCarrier carrier) { this.segment.ref(carrier); } @@ -169,5 +169,12 @@ public final class TracerContext { listener.afterFinished(finishedSegment); } } + + /** + * Clear the given {@link TracerContextListener} + */ + static synchronized void remove(TracerContextListener listener){ + listeners.remove(listener); + } } } diff --git a/skywalking-sniffer/skywalking-api/src/test/java/test/a/eye/cloud/bytebuddy/ConstructorInterceptor.java b/skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/bytebuddy/ConstructorInterceptor.java similarity index 92% rename from skywalking-sniffer/skywalking-api/src/test/java/test/a/eye/cloud/bytebuddy/ConstructorInterceptor.java rename to skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/bytebuddy/ConstructorInterceptor.java index 5a58c8efe..dc9ebd935 100644 --- a/skywalking-sniffer/skywalking-api/src/test/java/test/a/eye/cloud/bytebuddy/ConstructorInterceptor.java +++ b/skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/bytebuddy/ConstructorInterceptor.java @@ -1,4 +1,4 @@ -package test.a.eye.cloud.bytebuddy; +package com.a.eye.skywalking.bytebuddy; import net.bytebuddy.implementation.bind.annotation.AllArguments; import net.bytebuddy.implementation.bind.annotation.RuntimeType; diff --git a/skywalking-sniffer/skywalking-api/src/test/java/test/a/eye/cloud/bytebuddy/MethodInterceptor.java b/skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/bytebuddy/MethodInterceptor.java similarity index 94% rename from skywalking-sniffer/skywalking-api/src/test/java/test/a/eye/cloud/bytebuddy/MethodInterceptor.java rename to skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/bytebuddy/MethodInterceptor.java index 2f2a29c23..b46b348f9 100644 --- a/skywalking-sniffer/skywalking-api/src/test/java/test/a/eye/cloud/bytebuddy/MethodInterceptor.java +++ b/skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/bytebuddy/MethodInterceptor.java @@ -1,4 +1,4 @@ -package test.a.eye.cloud.bytebuddy; +package com.a.eye.skywalking.bytebuddy; import java.lang.reflect.Method; import java.util.concurrent.Callable; diff --git a/skywalking-sniffer/skywalking-api/src/test/java/test/a/eye/cloud/bytebuddy/SimulateMain.java b/skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/bytebuddy/SimulateMain.java similarity index 98% rename from skywalking-sniffer/skywalking-api/src/test/java/test/a/eye/cloud/bytebuddy/SimulateMain.java rename to skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/bytebuddy/SimulateMain.java index 28eebec12..bf47fa560 100644 --- a/skywalking-sniffer/skywalking-api/src/test/java/test/a/eye/cloud/bytebuddy/SimulateMain.java +++ b/skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/bytebuddy/SimulateMain.java @@ -1,4 +1,4 @@ -package test.a.eye.cloud.bytebuddy; +package com.a.eye.skywalking.bytebuddy; import static net.bytebuddy.matcher.ElementMatchers.isConstructor; import static net.bytebuddy.matcher.ElementMatchers.isMethod; diff --git a/skywalking-sniffer/skywalking-api/src/test/java/test/a/eye/cloud/bytebuddy/SimulateMain2.java b/skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/bytebuddy/SimulateMain2.java similarity index 96% rename from skywalking-sniffer/skywalking-api/src/test/java/test/a/eye/cloud/bytebuddy/SimulateMain2.java rename to skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/bytebuddy/SimulateMain2.java index 418cc1e31..793cc3969 100644 --- a/skywalking-sniffer/skywalking-api/src/test/java/test/a/eye/cloud/bytebuddy/SimulateMain2.java +++ b/skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/bytebuddy/SimulateMain2.java @@ -1,4 +1,4 @@ -package test.a.eye.cloud.bytebuddy; +package com.a.eye.skywalking.bytebuddy; import static net.bytebuddy.matcher.ElementMatchers.isConstructor; import static net.bytebuddy.matcher.ElementMatchers.named; diff --git a/skywalking-sniffer/skywalking-api/src/test/java/test/a/eye/cloud/bytebuddy/TestClass.java b/skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/bytebuddy/TestClass.java similarity index 88% rename from skywalking-sniffer/skywalking-api/src/test/java/test/a/eye/cloud/bytebuddy/TestClass.java rename to skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/bytebuddy/TestClass.java index 982d2bf79..d30f1b60c 100644 --- a/skywalking-sniffer/skywalking-api/src/test/java/test/a/eye/cloud/bytebuddy/TestClass.java +++ b/skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/bytebuddy/TestClass.java @@ -1,4 +1,4 @@ -package test.a.eye.cloud.bytebuddy; +package com.a.eye.skywalking.bytebuddy; public class TestClass { public TestClass(){ diff --git a/skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/context/ContextCarrierTest.java b/skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/context/ContextCarrierTest.java new file mode 100644 index 000000000..86b867ad3 --- /dev/null +++ b/skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/context/ContextCarrierTest.java @@ -0,0 +1,50 @@ +package com.a.eye.skywalking.context; + +import org.junit.Assert; +import org.junit.Test; + +/** + * Created by wusheng on 2017/2/19. + */ +public class ContextCarrierTest { + @Test + public void testSerialize(){ + ContextCarrier carrier = new ContextCarrier(); + carrier.setTraceSegmentId("trace_id_A"); + carrier.setSpanId(100); + + Assert.assertEquals("trace_id_A|100", carrier.serialize()); + } + + @Test + public void testDeserialize(){ + ContextCarrier carrier = new ContextCarrier(); + carrier.deserialize("trace_id_A|100"); + + Assert.assertEquals("trace_id_A", carrier.getTraceSegmentId()); + Assert.assertEquals(100, carrier.getSpanId()); + } + + @Test + public void testIllegalDeserialize(){ + ContextCarrier carrier = new ContextCarrier(); + carrier.deserialize("abcde"); + Assert.assertFalse(carrier.isValid()); + + carrier = new ContextCarrier(); + carrier.deserialize("trace_id|-100"); + Assert.assertFalse(carrier.isValid()); + + carrier = new ContextCarrier(); + carrier.deserialize("trace_id|illegal-spanid"); + Assert.assertFalse(carrier.isValid()); + + carrier = new ContextCarrier(); + carrier.deserialize("trace_id|100|other-illegal"); + Assert.assertFalse(carrier.isValid()); + + carrier = new ContextCarrier(); + carrier.deserialize("trace_id|100"); + Assert.assertTrue(carrier.isValid()); + } +} diff --git a/skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/context/TracerContextTest.java b/skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/context/TracerContextTest.java new file mode 100644 index 000000000..768d9be35 --- /dev/null +++ b/skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/context/TracerContextTest.java @@ -0,0 +1,101 @@ +package com.a.eye.skywalking.context; + +import com.a.eye.skywalking.trace.Span; +import com.a.eye.skywalking.trace.TraceSegment; +import org.junit.After; +import org.junit.Assert; +import org.junit.Test; + +/** + * Created by wusheng on 2017/2/19. + */ +public class TracerContextTest { + @Test + public void testSpanLifeCycle(){ + TracerContext context = new TracerContext(); + Span span = context.createSpan("/serviceA"); + + Assert.assertEquals(span, context.activeSpan()); + + TracerContext.ListenerManager.add(TestTracerContextListener.INSTANCE); + final TraceSegment[] finishedSegmentCarrier = TestTracerContextListener.INSTANCE.finishedSegmentCarrier; + context.stopSpan(span); + + Assert.assertNotNull(finishedSegmentCarrier[0]); + Assert.assertEquals(1, finishedSegmentCarrier[0].getSpans().size()); + Assert.assertEquals(span, finishedSegmentCarrier[0].getSpans().get(0)); + } + + @Test + public void testChildOfSpan(){ + TracerContext context = new TracerContext(); + Span serviceSpan = context.createSpan("/serviceA"); + Span dbSpan = context.createSpan("db/preparedStatement/execute"); + + Assert.assertEquals(dbSpan, context.activeSpan()); + + TracerContext.ListenerManager.add(TestTracerContextListener.INSTANCE); + final TraceSegment[] finishedSegmentCarrier = TestTracerContextListener.INSTANCE.finishedSegmentCarrier; + + try { + context.stopSpan(serviceSpan); + }catch (Throwable t){ + Assert.assertTrue(t instanceof IllegalStateException); + } + + context.stopSpan(dbSpan); + context.stopSpan(serviceSpan); + + Assert.assertNotNull(finishedSegmentCarrier[0]); + Assert.assertEquals(2, finishedSegmentCarrier[0].getSpans().size()); + Assert.assertEquals(dbSpan, finishedSegmentCarrier[0].getSpans().get(0)); + } + + @Test + public void testInject(){ + TracerContext context = new TracerContext(); + Span serviceSpan = context.createSpan("/serviceA"); + Span dbSpan = context.createSpan("db/preparedStatement/execute"); + + ContextCarrier carrier = new ContextCarrier(); + context.inject(carrier); + + Assert.assertTrue(carrier.isValid()); + Assert.assertEquals(1, carrier.getSpanId()); + } + + @Test + public void testExtract(){ + ContextCarrier carrier = new ContextCarrier(); + carrier.setTraceSegmentId("trace_id_1"); + carrier.setSpanId(5); + + Assert.assertTrue(carrier.isValid()); + + TracerContext context = new TracerContext(); + context.extract(carrier); + Span span = context.createSpan("/serviceC"); + + TracerContext.ListenerManager.add(TestTracerContextListener.INSTANCE); + final TraceSegment[] finishedSegmentCarrier = TestTracerContextListener.INSTANCE.finishedSegmentCarrier; + + context.stopSpan(span); + + Assert.assertEquals("trace_id_1", finishedSegmentCarrier[0].getPrimaryRef().getTraceSegmentId()); + Assert.assertEquals(5, finishedSegmentCarrier[0].getPrimaryRef().getSpanId()); + } + + @After + public void reset(){ + TracerContext.ListenerManager.remove(TestTracerContextListener.INSTANCE); + } + + public enum TestTracerContextListener implements TracerContextListener { + INSTANCE; + final TraceSegment[] finishedSegmentCarrier = {null}; + + @Override public void afterFinished(TraceSegment traceSegment) { + finishedSegmentCarrier[0] = traceSegment; + } + } +} diff --git a/skywalking-sniffer/skywalking-api/src/test/java/test/a/eye/cloud/plugin/BeInterceptedClass.java b/skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/plugin/BeInterceptedClass.java similarity index 87% rename from skywalking-sniffer/skywalking-api/src/test/java/test/a/eye/cloud/plugin/BeInterceptedClass.java rename to skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/plugin/BeInterceptedClass.java index 1f9703677..b7067eb21 100644 --- a/skywalking-sniffer/skywalking-api/src/test/java/test/a/eye/cloud/plugin/BeInterceptedClass.java +++ b/skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/plugin/BeInterceptedClass.java @@ -1,4 +1,4 @@ -package test.a.eye.cloud.plugin; +package com.a.eye.skywalking.plugin; public class BeInterceptedClass { public BeInterceptedClass(){ diff --git a/skywalking-sniffer/skywalking-api/src/test/java/test/a/eye/cloud/plugin/PluginMainTest.java b/skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/plugin/PluginMainTest.java similarity index 73% rename from skywalking-sniffer/skywalking-api/src/test/java/test/a/eye/cloud/plugin/PluginMainTest.java rename to skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/plugin/PluginMainTest.java index ed6b94014..678938728 100644 --- a/skywalking-sniffer/skywalking-api/src/test/java/test/a/eye/cloud/plugin/PluginMainTest.java +++ b/skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/plugin/PluginMainTest.java @@ -1,7 +1,5 @@ -package test.a.eye.cloud.plugin; +package com.a.eye.skywalking.plugin; -import com.a.eye.skywalking.plugin.PluginException; -import com.a.eye.skywalking.plugin.TracingBootstrap; import org.junit.Test; import java.lang.reflect.InvocationTargetException; @@ -9,7 +7,7 @@ import java.lang.reflect.InvocationTargetException; public class PluginMainTest { @Test public void testMain() throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException, PluginException { - TracingBootstrap.main(new String[] {"test.a.eye.cloud.plugin.PluginMainTest"}); + TracingBootstrap.main(new String[] {"PluginMainTest"}); } public static void main(String[] args) @@ -17,7 +15,7 @@ public class PluginMainTest { SecurityException { long start = System.currentTimeMillis(); - BeInterceptedClass inst = (BeInterceptedClass) Class.forName("test.a.eye.cloud.plugin.BeInterceptedClass").newInstance(); + BeInterceptedClass inst = (BeInterceptedClass) Class.forName("BeInterceptedClass").newInstance(); inst.printabc(); long end = System.currentTimeMillis(); System.out.println(end - start + "ms"); diff --git a/skywalking-sniffer/skywalking-api/src/test/java/test/a/eye/cloud/plugin/PluginResourceResoverTest.java b/skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/plugin/PluginResourceResoverTest.java similarity index 88% rename from skywalking-sniffer/skywalking-api/src/test/java/test/a/eye/cloud/plugin/PluginResourceResoverTest.java rename to skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/plugin/PluginResourceResoverTest.java index 123c366ed..06d8285c2 100644 --- a/skywalking-sniffer/skywalking-api/src/test/java/test/a/eye/cloud/plugin/PluginResourceResoverTest.java +++ b/skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/plugin/PluginResourceResoverTest.java @@ -1,4 +1,4 @@ -package test.a.eye.cloud.plugin; +package com.a.eye.skywalking.plugin; import java.io.IOException; diff --git a/skywalking-sniffer/skywalking-api/src/test/java/test/a/eye/cloud/plugin/TestAroundInterceptor.java b/skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/plugin/TestAroundInterceptor.java similarity index 96% rename from skywalking-sniffer/skywalking-api/src/test/java/test/a/eye/cloud/plugin/TestAroundInterceptor.java rename to skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/plugin/TestAroundInterceptor.java index eefd42e60..0b1108589 100644 --- a/skywalking-sniffer/skywalking-api/src/test/java/test/a/eye/cloud/plugin/TestAroundInterceptor.java +++ b/skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/plugin/TestAroundInterceptor.java @@ -1,4 +1,4 @@ -package test.a.eye.cloud.plugin; +package com.a.eye.skywalking.plugin; import com.a.eye.skywalking.plugin.interceptor.EnhancedClassInstanceContext; import com.a.eye.skywalking.plugin.interceptor.enhance.ConstructorInvokeContext; diff --git a/skywalking-sniffer/skywalking-api/src/test/java/test/a/eye/cloud/plugin/TestInterceptorDefine.java b/skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/plugin/TestInterceptorDefine.java similarity index 97% rename from skywalking-sniffer/skywalking-api/src/test/java/test/a/eye/cloud/plugin/TestInterceptorDefine.java rename to skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/plugin/TestInterceptorDefine.java index dfe4d1ecf..47980584d 100644 --- a/skywalking-sniffer/skywalking-api/src/test/java/test/a/eye/cloud/plugin/TestInterceptorDefine.java +++ b/skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/plugin/TestInterceptorDefine.java @@ -1,4 +1,4 @@ -package test.a.eye.cloud.plugin; +package com.a.eye.skywalking.plugin; import com.a.eye.skywalking.plugin.interceptor.ConstructorInterceptPoint; import com.a.eye.skywalking.plugin.interceptor.InstanceMethodsInterceptPoint; diff --git a/skywalking-sniffer/skywalking-api/src/test/java/test/a/eye/cloud/plugin/TestStaticAroundInterceptor.java b/skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/plugin/TestStaticAroundInterceptor.java similarity index 95% rename from skywalking-sniffer/skywalking-api/src/test/java/test/a/eye/cloud/plugin/TestStaticAroundInterceptor.java rename to skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/plugin/TestStaticAroundInterceptor.java index 0a55b06cd..338459561 100644 --- a/skywalking-sniffer/skywalking-api/src/test/java/test/a/eye/cloud/plugin/TestStaticAroundInterceptor.java +++ b/skywalking-sniffer/skywalking-api/src/test/java/com/a/eye/skywalking/plugin/TestStaticAroundInterceptor.java @@ -1,4 +1,4 @@ -package test.a.eye.cloud.plugin; +package com.a.eye.skywalking.plugin; import com.a.eye.skywalking.plugin.interceptor.enhance.MethodInterceptResult; import com.a.eye.skywalking.plugin.interceptor.enhance.MethodInvokeContext;