TraceSegmentTestCase.java 4.4 KB
Newer Older
P
pengys5 已提交
1
package org.skywalking.apm.trace;
2

3 4
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
wu-sheng's avatar
wu-sheng 已提交
5
import com.google.gson.JsonObject;
6 7
import org.junit.Assert;
import org.junit.Test;
wu-sheng's avatar
wu-sheng 已提交
8
import org.skywalking.apm.trace.tag.StringTagReader;
P
pengys5 已提交
9
import org.skywalking.apm.trace.tag.Tags;
10 11 12 13 14 15

/**
 * Created by wusheng on 2017/2/18.
 */
public class TraceSegmentTestCase {
    @Test
wu-sheng's avatar
wu-sheng 已提交
16
    public void testConstructor() {
17
        TraceSegment segment = new TraceSegment("billing_app");
18

19
        Assert.assertTrue(segment.getTraceSegmentId().startsWith("Segment"));
20
        Assert.assertTrue(segment.getStartTime() > 0);
21
        Assert.assertEquals("billing_app", segment.getApplicationCode());
22 23 24
    }

    @Test
wu-sheng's avatar
wu-sheng 已提交
25
    public void testRef() {
26
        TraceSegment segment = new TraceSegment("billing_app");
27 28 29 30

        TraceSegmentRef ref1 = new TraceSegmentRef();
        ref1.setTraceSegmentId("parent_trace_0");
        ref1.setSpanId(1);
31
        segment.ref(ref1);
32 33 34 35

        TraceSegmentRef ref2 = new TraceSegmentRef();
        ref2.setTraceSegmentId("parent_trace_1");
        ref2.setSpanId(5);
36
        segment.ref(ref2);
37 38

        TraceSegmentRef ref3 = new TraceSegmentRef();
39
        ref3.setTraceSegmentId("parent_trace_3");
40
        ref3.setSpanId(5);
41
        segment.ref(ref3);
42

43 44 45
        Assert.assertEquals(ref1, segment.getRefs().get(0));
        Assert.assertEquals(ref2, segment.getRefs().get(1));
        Assert.assertEquals(ref3, segment.getRefs().get(2));
46

47 48
        Assert.assertEquals("parent_trace_0", segment.getRefs().get(0).getTraceSegmentId());
        Assert.assertEquals(1, segment.getRefs().get(0).getSpanId());
49 50 51
    }

    @Test
wu-sheng's avatar
wu-sheng 已提交
52
    public void testArchiveSpan() {
53
        TraceSegment segment = new TraceSegment("billing_app");
54 55 56 57 58 59 60 61 62 63 64
        Span span1 = new Span(1, "/serviceA");
        segment.archive(span1);

        Span span2 = new Span(2, "/db/sql");
        segment.archive(span2);

        Assert.assertEquals(span1, segment.getSpans().get(0));
        Assert.assertEquals(span2, segment.getSpans().get(1));
    }

    @Test
wu-sheng's avatar
wu-sheng 已提交
65
    public void testFinish() {
66
        TraceSegment segment = new TraceSegment("billing_app");
67 68 69 70 71

        Assert.assertTrue(segment.getEndTime() == 0);
        segment.finish();
        Assert.assertTrue(segment.getEndTime() > 0);
    }
wu-sheng's avatar
wu-sheng 已提交
72 73 74

    @Test
    public void testSerialize() {
75
        TraceSegment segment = new TraceSegment("billing_app");
wu-sheng's avatar
wu-sheng 已提交
76 77 78 79

        TraceSegmentRef ref1 = new TraceSegmentRef();
        ref1.setTraceSegmentId("parent_trace_0");
        ref1.setSpanId(1);
80 81
        ref1.setApplicationCode("REMOTE_APP");
        ref1.setPeerHost("10.2.3.16:8080");
82
        segment.ref(ref1);
wu-sheng's avatar
wu-sheng 已提交
83 84 85 86

        TraceSegmentRef ref2 = new TraceSegmentRef();
        ref2.setTraceSegmentId("parent_trace_1");
        ref2.setSpanId(5);
87 88
        ref2.setApplicationCode("REMOTE_APP");
        ref2.setPeerHost("10.2.3.16:8080");
89
        segment.ref(ref2);
wu-sheng's avatar
wu-sheng 已提交
90 91

        TraceSegmentRef ref3 = new TraceSegmentRef();
92
        ref3.setTraceSegmentId("parent_trace_2");
wu-sheng's avatar
wu-sheng 已提交
93
        ref3.setSpanId(5);
94 95
        ref3.setApplicationCode("REMOTE_APP");
        ref3.setPeerHost("10.2.3.16:8080");
96
        segment.ref(ref3);
wu-sheng's avatar
wu-sheng 已提交
97 98 99 100 101 102

        Span span1 = new Span(1, "/serviceA");
        Tags.SPAN_LAYER.asHttp(span1);
        segment.archive(span1);

        Span span2 = new Span(2, span1, "/db/sql");
Z
zhangxin 已提交
103
        Tags.SPAN_LAYER.asDB(span2);
wu-sheng's avatar
wu-sheng 已提交
104 105 106
        span2.log(new NullPointerException());
        segment.archive(span2);

107 108 109 110
        Gson gson = new GsonBuilder()
            .excludeFieldsWithoutExposeAnnotation()
            .create();

111 112 113
        SegmentsMessage message = new SegmentsMessage();
        message.append(segment);

114 115
        String jsonString = message.serialize(gson);
        int length = Integer.parseInt(jsonString.substring(0, 4));
116

117
        String segmentJson = jsonString.substring(5);
wu-sheng's avatar
wu-sheng 已提交
118

119 120
        Assert.assertEquals(length, segmentJson.length());

wu-sheng's avatar
wu-sheng 已提交
121 122 123 124 125 126 127
        JsonObject jsonObject = gson.fromJson(segmentJson, JsonObject.class);

        Assert.assertEquals(segment.getSpans().size(), jsonObject.get("ss").getAsJsonArray().size());
        Assert.assertEquals(segment.getRefs().get(0).getTraceSegmentId(),
            jsonObject.get("rs").getAsJsonArray().get(0).getAsJsonObject().get("ts").getAsString());
        Assert.assertEquals(StringTagReader.get(segment.getSpans().get(1), Tags.SPAN_LAYER.SPAN_LAYER_TAG),
            jsonObject.get("ss").getAsJsonArray().get(1).getAsJsonObject().get("ts").getAsJsonObject().get("span.layer").getAsString());
wu-sheng's avatar
wu-sheng 已提交
128
    }
129
}