TracerContextTestCase.java 3.8 KB
Newer Older
1
package org.skywalking.apm.agent.core.context;
wu-sheng's avatar
wu-sheng 已提交
2 3 4 5

import org.junit.After;
import org.junit.Assert;
import org.junit.Test;
P
pengys5 已提交
6 7 8 9 10 11 12 13
import org.skywalking.apm.trace.Span;
import org.skywalking.apm.trace.TraceId.DistributedTraceId;
import org.skywalking.apm.trace.TraceId.PropagatedTraceId;
import org.skywalking.apm.trace.TraceSegment;
import org.skywalking.apm.trace.tag.Tags;

import java.util.LinkedList;
import java.util.List;
wu-sheng's avatar
wu-sheng 已提交
14 15 16 17

/**
 * Created by wusheng on 2017/2/19.
 */
18
public class TracerContextTestCase {
wu-sheng's avatar
wu-sheng 已提交
19
    @Test
20
    public void testSpanLifeCycle() {
wu-sheng's avatar
wu-sheng 已提交
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
        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
36
    public void testChildOfSpan() {
wu-sheng's avatar
wu-sheng 已提交
37 38 39 40 41 42 43 44 45 46 47
        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);
48
        } catch (Throwable t) {
wu-sheng's avatar
wu-sheng 已提交
49 50 51 52 53 54 55 56 57 58 59 60
            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
61
    public void testInject() {
wu-sheng's avatar
wu-sheng 已提交
62 63 64
        TracerContext context = new TracerContext();
        Span serviceSpan = context.createSpan("/serviceA");
        Span dbSpan = context.createSpan("db/preparedStatement/execute");
65 66
        Tags.PEER_HOST.set(dbSpan, "127.0.0.1");
        Tags.PEER_PORT.set(dbSpan, 8080);
wu-sheng's avatar
wu-sheng 已提交
67 68 69 70

        ContextCarrier carrier = new ContextCarrier();
        context.inject(carrier);

71
        Assert.assertEquals("127.0.0.1:8080", carrier.getPeerHost());
wu-sheng's avatar
wu-sheng 已提交
72 73 74 75
        Assert.assertEquals(1, carrier.getSpanId());
    }

    @Test
76
    public void testExtract() {
wu-sheng's avatar
wu-sheng 已提交
77 78 79
        ContextCarrier carrier = new ContextCarrier();
        carrier.setTraceSegmentId("trace_id_1");
        carrier.setSpanId(5);
80 81
        carrier.setApplicationCode("REMOTE_APP");
        carrier.setPeerHost("10.2.3.16:8080");
82
        List<DistributedTraceId> ids = new LinkedList<DistributedTraceId>();
83 84
        ids.add(new PropagatedTraceId("Trace.global.id.123"));
        carrier.setDistributedTraceIds(ids);
wu-sheng's avatar
wu-sheng 已提交
85 86 87 88 89 90 91 92 93 94 95 96

        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);

97 98
        Assert.assertEquals("trace_id_1", finishedSegmentCarrier[0].getRefs().get(0).getTraceSegmentId());
        Assert.assertEquals(5, finishedSegmentCarrier[0].getRefs().get(0).getSpanId());
wu-sheng's avatar
wu-sheng 已提交
99 100 101
    }

    @After
102
    public void reset() {
wu-sheng's avatar
wu-sheng 已提交
103 104 105
        TracerContext.ListenerManager.remove(TestTracerContextListener.INSTANCE);
    }
}