package org.stagemonitor.tracing.reporter; import org.junit.Before; import org.junit.Test; import org.stagemonitor.tracing.SpanContextInformation; import org.stagemonitor.tracing.TracingPlugin; import org.stagemonitor.tracing.tracing.B3Propagator; import org.stagemonitor.tracing.wrapper.SpanEventListener; import org.stagemonitor.tracing.wrapper.SpanWrapper; import java.util.Collections; import io.opentracing.mock.MockTracer; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; public class ReadbackSpanEventListenerTest { private TracingPlugin tracingPlugin; private ReportingSpanEventListener reportingSpanEventListener; private SpanEventListener readbackSpanEventListener; private SpanWrapper spanWrapper; @Before public void setUp() throws Exception { tracingPlugin = mock(TracingPlugin.class); reportingSpanEventListener = mock(ReportingSpanEventListener.class); readbackSpanEventListener = new ReadbackSpanEventListener.Factory(reportingSpanEventListener, tracingPlugin).create(); final MockTracer tracer = new MockTracer(new B3Propagator()); when(tracingPlugin.getTracer()).thenReturn(tracer); spanWrapper = new SpanWrapper(tracer.buildSpan("operation name").start(),"operation name", 1, 1, Collections.emptyList()); } @Test public void testReadback() throws Exception { when(reportingSpanEventListener.isAnyReporterActive(any())).thenReturn(true); readbackSpanEventListener.onStart(spanWrapper); readbackSpanEventListener.onSetTag("string", "foo"); readbackSpanEventListener.onSetTag("boolean", true); readbackSpanEventListener.onSetTag("number", 42); readbackSpanEventListener.onFinish(spanWrapper, "operation name", 1); final SpanContextInformation context = SpanContextInformation.forSpan(spanWrapper); assertNotNull(context.getReadbackSpan()); assertNotNull(context.getReadbackSpan().getId()); assertNotNull(context.getReadbackSpan().getTraceId()); assertEquals("foo", context.getReadbackSpan().getTags().get("string")); assertEquals(true, context.getReadbackSpan().getTags().get("boolean")); assertEquals(42, context.getReadbackSpan().getTags().get("number")); assertEquals("operation name", context.getReadbackSpan().getName()); } @Test public void testNoReporterActive() throws Exception { when(reportingSpanEventListener.isAnyReporterActive(any())).thenReturn(false); final SpanWrapper spanWrapper = mock(SpanWrapper.class); readbackSpanEventListener.onStart(spanWrapper); readbackSpanEventListener.onFinish(spanWrapper, "op", 1); final SpanContextInformation context = SpanContextInformation.forSpan(spanWrapper); assertNull(context.getReadbackSpan()); } }