SamplingTracerContextTestCase.java 2.6 KB
Newer Older
1 2 3 4 5 6 7 8 9
package org.skywalking.apm.agent.core.sampling;

import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.skywalking.apm.agent.core.boot.ServiceManager;
import org.skywalking.apm.agent.core.conf.Config;
import org.skywalking.apm.agent.core.context.ContextManager;
10
import org.skywalking.apm.agent.core.context.TracingContext;
11
import org.skywalking.apm.agent.core.context.TracingContextListener;
12
import org.skywalking.apm.agent.core.context.trace.AbstractSpan;
13
import org.skywalking.apm.agent.core.context.trace.AbstractTracingSpan;
14 15 16 17 18 19 20 21
import org.skywalking.apm.agent.core.context.trace.TraceSegment;

/**
 * @author wusheng
 */
public class SamplingTracerContextTestCase {
    private int finishedTracerCounter = 0;

22
    private TracingContextListener listener = new TracingContextListener() {
23 24 25 26 27 28 29 30 31 32
        @Override
        public void afterFinished(TraceSegment traceSegment) {
            if (!traceSegment.isIgnore()) {
                finishedTracerCounter++;
            }
        }
    };

    @Before
    public void setUp() throws Exception {
33
        Config.Agent.SAMPLE_N_PER_3_SECS = 5;
34
        ServiceManager.INSTANCE.boot();
35
        TracingContext.ListenerManager.add(listener);
36 37 38 39 40
    }

    @Test
    public void testSample5InALoop() throws InterruptedException {
        for (int i = 0; i < 11; i++) {
41 42
            AbstractSpan span = ContextManager.createLocalSpan("serviceA");
            span.setComponent("test");
43 44 45 46 47 48
            ContextManager.stopSpan();
        }

        /**
         * Considering the reset cycle, in ci-env, may sample 5-7 trace through 1 or 2 cycle.
         */
49 50
        Assert.assertTrue(finishedTracerCounter >= 2);
        Assert.assertTrue(finishedTracerCounter <= 3);
51 52 53 54 55 56 57
        Thread.sleep(10 * 1000L);
    }

    @Test
    public void testSample5InLoopWithMultiSpans() {
        finishedTracerCounter = 0;
        for (int i = 0; i < 11; i++) {
58 59 60 61
            AbstractSpan span = ContextManager.createLocalSpan("serviceA");
            span.setComponent("test");
            AbstractSpan span2 = ContextManager.createLocalSpan("serviceB");
            span.setComponent("test2");
62 63 64 65 66 67 68 69 70 71 72 73 74
            ContextManager.stopSpan();
            ContextManager.stopSpan();
        }

        /**
         * Considering the reset cycle, in ci-env, may sample 5-7 trace through 1 or 2 cycle.
         */
        Assert.assertTrue(finishedTracerCounter >= 5);
        Assert.assertTrue(finishedTracerCounter <= 7);
    }

    @After
    public void tearDown() throws Exception {
75 76
        Config.Agent.SAMPLE_N_PER_3_SECS = -1;
        TracingContext.ListenerManager.remove(listener);
77 78
    }
}