예제 #1
0
 public LinkTest()
 {
     spanContext = SpanContext.Create(TraceId.GenerateRandomId(random), SpanId.GenerateRandomId(random), TraceOptions.DEFAULT);;
     attributesMap.Add("MyAttributeKey0", AttributeValue <string> .Create("MyStringAttribute"));
     attributesMap.Add("MyAttributeKey1", AttributeValue <long> .Create(10));
     attributesMap.Add("MyAttributeKey2", AttributeValue <bool> .Create(true));
 }
예제 #2
0
        // Applies the given sampler to NUM_SAMPLE_TRIES random traceId/spanId pairs.
        private static void AssertSamplerSamplesWithProbability(
            ISampler sampler, ISpanContext parent, IList <ISpan> parentLinks, double probability)
        {
            RandomGenerator random = new RandomGenerator(1234);
            int             count  = 0; // Count of spans with sampling enabled

            for (int i = 0; i < NUM_SAMPLE_TRIES; i++)
            {
                if (sampler.ShouldSample(
                        parent,
                        false,
                        TraceId.GenerateRandomId(random),
                        SpanId.GenerateRandomId(random),
                        SPAN_NAME,
                        parentLinks))
                {
                    count++;
                }
            }

            double proportionSampled = (double)count / NUM_SAMPLE_TRIES;

            // Allow for a large amount of slop (+/- 10%) in number of sampled traces, to avoid flakiness.
            Assert.True(proportionSampled <probability + 0.1 && proportionSampled> probability - 0.1);
        }
예제 #3
0
        public async Task SuccesfulTemplateControllerCallUsesParentContext()
        {
            var startEndHandler = new Mock <IStartEndHandler>();

            var expectedTraceId = TraceId.GenerateRandomId(new RandomGenerator());
            var expectedSpanId  = SpanId.GenerateRandomId(new RandomGenerator());

            var tf = new Mock <ITextFormat>();

            tf.Setup(m => m.Extract <HttpRequest>(It.IsAny <HttpRequest>(), It.IsAny <Func <HttpRequest, string, IEnumerable <string> > >())).Returns(SpanContext.Create(
                                                                                                                                                          expectedTraceId,
                                                                                                                                                          expectedSpanId,
                                                                                                                                                          TraceOptions.Default,
                                                                                                                                                          Tracestate.Empty
                                                                                                                                                          ));

            var tracer = new Tracer(new RandomGenerator(), startEndHandler.Object, new TraceConfig(), null, null, tf.Object);

            // Arrange
            using (var client = this.factory
                                .WithWebHostBuilder(builder =>
                                                    builder.ConfigureTestServices((services) =>
            {
                services.AddSingleton <ITracer>(tracer);
                services.AddSingleton <ITextFormat>(tf.Object);
                services.AddSingleton <IBinaryFormat>(new BinaryFormat());
            }))
                                .CreateClient())
            {
                // Act
                var response = await client.GetAsync("/api/values/2");

                // Assert
                response.EnsureSuccessStatusCode(); // Status Code 200-299

                for (var i = 0; i < 10; i++)
                {
                    if (startEndHandler.Invocations.Count == 2)
                    {
                        break;
                    }

                    // We need to let End callback execute as it is executed AFTER response was returned.
                    // In unit tests environment there may be a lot of parallel unit tests executed, so
                    // giving some breezing room for the End callback to complete
                    await Task.Delay(TimeSpan.FromSeconds(1));
                }
            }

            Assert.Equal(2, startEndHandler.Invocations.Count); // begin and end was called
            var spanData = ((Span)startEndHandler.Invocations[0].Arguments[0]).ToSpanData();

            Assert.Equal(SpanKind.Server, spanData.Kind);
            Assert.Equal("api/Values/{id}", spanData.Name);
            Assert.Equal(AttributeValue.StringAttributeValue("/api/values/2"), spanData.Attributes.AttributeMap["http.path"]);

            Assert.Equal(expectedTraceId, spanData.Context.TraceId);
            Assert.Equal(expectedSpanId, spanData.ParentSpanId);
        }
예제 #4
0
 public LinkTest()
 {
     spanContext = SpanContext.Create(TraceId.GenerateRandomId(random), SpanId.GenerateRandomId(random), TraceOptions.Default, Tracestate.Empty);;
     attributesMap.Add("MyAttributeKey0", AttributeValue <string> .Create("MyStringAttribute"));
     attributesMap.Add("MyAttributeKey1", AttributeValue <long> .Create(10));
     attributesMap.Add("MyAttributeKey2", AttributeValue <bool> .Create(true));
     attributesMap.Add("MyAttributeKey3", AttributeValue <double> .Create(0.005));
 }
        public SpanExporterTest()
        {
            sampledSpanContext    = SpanContext.Create(TraceId.GenerateRandomId(random), SpanId.GenerateRandomId(random), TraceOptions.Builder().SetIsSampled(true).Build(), Tracestate.Empty);
            notSampledSpanContext = SpanContext.Create(TraceId.GenerateRandomId(random), SpanId.GenerateRandomId(random), TraceOptions.Default, Tracestate.Empty);
            startEndHandler       = new StartEndHandler(spanExporter, runningSpanStore, null, new SimpleEventQueue());

            spanExporter.RegisterHandler("test.service", serviceHandler);
        }
예제 #6
0
 public SamplersTest()
 {
     traceId               = TraceId.GenerateRandomId(random);
     parentSpanId          = SpanId.GenerateRandomId(random);
     spanId                = SpanId.GenerateRandomId(random);
     sampledSpanContext    = SpanContext.Create(traceId, parentSpanId, TraceOptions.Builder().SetIsSampled(true).Build(), Tracestate.Empty);
     notSampledSpanContext = SpanContext.Create(traceId, parentSpanId, TraceOptions.Default, Tracestate.Empty);
     sampledSpan           = new TestSpan(sampledSpanContext, SpanOptions.RecordEvents);
 }
예제 #7
0
 public SamplersTest()
 {
     traceId               = TraceId.GenerateRandomId(random);
     parentSpanId          = SpanId.GenerateRandomId(random);
     spanId                = SpanId.GenerateRandomId(random);
     sampledSpanContext    = SpanContext.Create(traceId, parentSpanId, TraceOptions.Builder().SetIsSampled(true).Build());
     notSampledSpanContext = SpanContext.Create(traceId, parentSpanId, TraceOptions.DEFAULT);
     sampledSpan           = new NoopSpan(sampledSpanContext, SpanOptions.RECORD_EVENTS);
 }
예제 #8
0
 public SamplersTest()
 {
     traceId               = TraceId.GenerateRandomId(random);
     parentSpanId          = SpanId.GenerateRandomId(random);
     spanId                = SpanId.GenerateRandomId(random);
     sampledSpanContext    = SpanContext.Create(traceId, parentSpanId, TraceOptions.Builder().SetIsSampled(true).Build(), Tracestate.Empty);
     notSampledSpanContext = SpanContext.Create(traceId, parentSpanId, TraceOptions.Default, Tracestate.Empty);
     sampledLink           = Link.FromSpanContext(sampledSpanContext);
 }
예제 #9
0
 public InProcessSampledSpanStoreTest()
 {
     sampledSpanContext    = SpanContext.Create(TraceId.GenerateRandomId(random), SpanId.GenerateRandomId(random), TraceOptions.Builder().SetIsSampled(true).Build(), Tracestate.Empty);
     notSampledSpanContext = SpanContext.Create(TraceId.GenerateRandomId(random), SpanId.GenerateRandomId(random), TraceOptions.Default, Tracestate.Empty);
     parentSpanId          = SpanId.GenerateRandomId(random);
     startEndHandler       = new TestStartEndHandler(sampleStore);
     sampleStore.RegisterSpanNamesForCollection(new List <string>()
     {
         REGISTERED_SPAN_NAME
     });
 }
예제 #10
0
 public InProcessSampledSpanStoreTest()
 {
     timestamp             = Timestamp.FromDateTimeOffset(startTime);
     timestampConverter    = Timer.StartNew(startTime, () => interval);
     sampledSpanContext    = SpanContext.Create(TraceId.GenerateRandomId(random), SpanId.GenerateRandomId(random), TraceOptions.Builder().SetIsSampled(true).Build(), Tracestate.Empty);
     notSampledSpanContext = SpanContext.Create(TraceId.GenerateRandomId(random), SpanId.GenerateRandomId(random), TraceOptions.Default, Tracestate.Empty);
     parentSpanId          = SpanId.GenerateRandomId(random);
     startEndHandler       = new TestStartEndHandler(sampleStore);
     sampleStore.RegisterSpanNamesForCollection(new List <string>()
     {
         REGISTERED_SPAN_NAME
     });
 }
예제 #11
0
 public SpanBaseTest()
 {
     random      = new RandomGenerator(1234);
     spanContext =
         SpanContext.Create(
             TraceId.GenerateRandomId(random),
             SpanId.GenerateRandomId(random),
             TraceOptions.Builder().SetIsSampled(true).Build(), Tracestate.Empty);
     notSampledSpanContext =
         SpanContext.Create(
             TraceId.GenerateRandomId(random),
             SpanId.GenerateRandomId(random),
             TraceOptions.Default, Tracestate.Empty);
     spanOptions = SpanOptions.RecordEvents;
 }
예제 #12
0
 public SpanTest()
 {
     timestamp          = Timestamp.FromDateTimeOffset(startTime);
     timestampConverter = Timer.StartNew(startTime, () => interval);
     spanContext        = SpanContext.Create(TraceId.GenerateRandomId(random), SpanId.GenerateRandomId(random), OpenTelemetry.Trace.TraceOptions.Default, Tracestate.Empty);
     parentSpanId       = SpanId.GenerateRandomId(random);
     attributes.Add(
         "MyStringAttributeKey", AttributeValue.StringAttributeValue("MyStringAttributeValue"));
     attributes.Add("MyLongAttributeKey", AttributeValue.LongAttributeValue(123L));
     attributes.Add("MyBooleanAttributeKey", AttributeValue.BooleanAttributeValue(false));
     expectedAttributes = new Dictionary <String, IAttributeValue>(attributes);
     expectedAttributes.Add(
         "MySingleStringAttributeKey",
         AttributeValue.StringAttributeValue("MySingleStringAttributeValue"));
 }
예제 #13
0
        //@Rule public readonly ExpectedException exception = ExpectedException.none();


        public SpanTest()
        {
            spanContext        = SpanContext.Create(TraceId.GenerateRandomId(random), SpanId.GenerateRandomId(random), TraceOptions.DEFAULT);
            parentSpanId       = SpanId.GenerateRandomId(random);
            testClock          = TestClock.Create(timestamp);
            timestampConverter = TimestampConverter.Now(testClock);
            attributes.Add(
                "MyStringAttributeKey", AttributeValue.StringAttributeValue("MyStringAttributeValue"));
            attributes.Add("MyLongAttributeKey", AttributeValue.LongAttributeValue(123L));
            attributes.Add("MyBooleanAttributeKey", AttributeValue.BooleanAttributeValue(false));
            expectedAttributes = new Dictionary <String, IAttributeValue>(attributes);
            expectedAttributes.Add(
                "MySingleStringAttributeKey",
                AttributeValue.StringAttributeValue("MySingleStringAttributeValue"));
        }
예제 #14
0
 public SpanBaseTest()
 {
     random      = new RandomGenerator(1234);
     spanContext =
         SpanContext.Create(
             TraceId.GenerateRandomId(random),
             SpanId.GenerateRandomId(random),
             TraceOptions.Builder().SetIsSampled(true).Build());
     notSampledSpanContext =
         SpanContext.Create(
             TraceId.GenerateRandomId(random),
             SpanId.GenerateRandomId(random),
             TraceOptions.DEFAULT);
     spanOptions = SpanOptions.RECORD_EVENTS;
 }
예제 #15
0
        public SpanDataTest()
        {
            spanContext  = SpanContext.Create(TraceId.GenerateRandomId(random), SpanId.GenerateRandomId(random), TraceOptions.Default, Tracestate.Empty);
            parentSpanId = SpanId.GenerateRandomId(random);

            attributesMap.Add("MyAttributeKey1", AttributeValue.LongAttributeValue(10));
            attributesMap.Add("MyAttributeKey2", AttributeValue.BooleanAttributeValue(true));
            attributes = Attributes.Create(attributesMap, 1);

            eventList.Add(TimedEvent <IEvent> .Create(eventTimestamp1, spanEvent));
            eventList.Add(TimedEvent <IEvent> .Create(eventTimestamp3, spanEvent));
            events = TimedEvents <IEvent> .Create(eventList, 2);

            linksList.Add(Link.FromSpanContext(spanContext, LinkType.ChildLinkedSpan));
            links = LinkList.Create(linksList, 0);
        }
예제 #16
0
        public void ShouldSamplePassesArgumentsToSamplerAndReturnsInContext()
        {
            var m             = new Mock <ISampler>();
            var r             = new RandomGenerator();
            var traceId       = TraceId.GenerateRandomId(r);
            var parentContext = SpanContext.Create(traceId, SpanId.GenerateRandomId(r), TraceOptions.Sampled, Tracestate.Builder.Set("a", "b").Build());

            RedisProfilerEntryToSpanConverter.ShouldSample(parentContext, "SET", m.Object, out var context, out var parentId);

            m.Verify(x => x.ShouldSample(
                         It.Is <SpanContext>(y => y == parentContext),
                         It.Is <TraceId>(y => y == traceId && y == context.TraceId),
                         It.Is <SpanId>(y => y.IsValid && y == context.SpanId),
                         It.Is <string>(y => y == "SET"),
                         It.Is <IEnumerable <ISpan> >(y => y == null)));
        }
예제 #17
0
        public CurrentSpanUtilsTest()
        {
            random      = new RandomGenerator(1234);
            spanContext =
                SpanContext.Create(
                    TraceId.GenerateRandomId(random),
                    SpanId.GenerateRandomId(random),
                    TraceOptions.Builder().SetIsSampled(true).Build());

            spanOptions = SpanOptions.RECORD_EVENTS;
            var mockSpan = new Mock <NoopSpan>(spanContext, spanOptions)
            {
                CallBase = true
            };

            span = mockSpan.Object;
        }
        public void StartSpanLastParentWins2()
        {
            var spanContext =
                SpanContext.Create(
                    TraceId.GenerateRandomId(randomHandler),
                    SpanId.GenerateRandomId(randomHandler),
                    TraceOptions.Default, Tracestate.Empty);

            var span = (Span) new SpanBuilder(SpanName, spanBuilderOptions)
                       .SetParent(spanContext)
                       .SetNoParent()
                       .StartSpan();

            Assert.True(span.Context.IsValid);
            Assert.NotEqual(spanContext.TraceId, span.Context.TraceId);
            Assert.Null(span.ParentSpanId);
        }
        public CurrentSpanUtilsTest()
        {
            random      = new RandomGenerator(1234);
            spanContext =
                SpanContext.Create(
                    TraceId.GenerateRandomId(random),
                    SpanId.GenerateRandomId(random),
                    TraceOptions.Builder().SetIsSampled(true).Build(),
                    Tracestate.Empty);

            spanOptions = SpanOptions.RecordEvents;
            var mockSpan = new Mock <TestSpan>()
            {
                CallBase = true
            };

            span = mockSpan.Object;
        }
        private ISpan CreateSpan(string spanName)
        {
            ISpanContext spanContext =
                SpanContext.Create(
                    TraceId.GenerateRandomId(random),
                    SpanId.GenerateRandomId(random),
                    TraceOptions.Default, Tracestate.Empty);

            return(Span.StartSpan(
                       spanContext,
                       recordSpanOptions,
                       spanName,
                       SpanId.GenerateRandomId(random),
                       false,
                       TraceParams.Default,
                       startEndHandler,
                       null));
        }
        private ISpan CreateSpan(string spanName)
        {
            ISpanContext spanContext =
                SpanContext.Create(
                    TraceId.GenerateRandomId(random),
                    SpanId.GenerateRandomId(random),
                    TraceOptions.DEFAULT);

            return(Span.StartSpan(
                       spanContext,
                       recordSpanOptions,
                       spanName,
                       SpanId.GenerateRandomId(random),
                       false,
                       TraceParams.DEFAULT,
                       startEndHandler,
                       null,
                       DateTimeOffsetClock.GetInstance()));
        }
        public void StartRemoteSpan()
        {
            SpanContext spanContext =
                SpanContext.Create(
                    TraceId.GenerateRandomId(randomHandler),
                    SpanId.GenerateRandomId(randomHandler),
                    TraceOptions.Default, Tracestate.Empty);
            ISpan span =
                SpanBuilder.Create(SPAN_NAME, SpanKind.Internal, spanContext, spanBuilderOptions)
                .SetRecordEvents(true)
                .StartSpan();

            Assert.True(span.Context.IsValid);
            Assert.Equal(spanContext.TraceId, span.Context.TraceId);
            Assert.False(span.Context.TraceOptions.IsSampled);
            ISpanData spanData = ((Span)span).ToSpanData();

            Assert.Equal(spanContext.SpanId, spanData.ParentSpanId);
        }
예제 #23
0
        public void StartRemoteSpan()
        {
            ISpanContext spanContext =
                SpanContext.Create(
                    TraceId.GenerateRandomId(randomHandler),
                    SpanId.GenerateRandomId(randomHandler),
                    TraceOptions.DEFAULT);
            ISpan span =
                SpanBuilder.CreateWithRemoteParent(SPAN_NAME, spanContext, spanBuilderOptions)
                .StartSpan();

            Assert.True(span.Context.IsValid);
            Assert.Equal(spanContext.TraceId, span.Context.TraceId);
            Assert.True(span.Context.TraceOptions.IsSampled);
            ISpanData spanData = ((Span)span).ToSpanData();

            Assert.Equal(spanContext.SpanId, spanData.ParentSpanId);
            Assert.True(spanData.HasRemoteParent);
        }
예제 #24
0
        public SpanDataTest()
        {
            spanContext  = SpanContext.Create(TraceId.GenerateRandomId(random), SpanId.GenerateRandomId(random), TraceOptions.DEFAULT);
            parentSpanId = SpanId.GenerateRandomId(random);

            attributesMap.Add("MyAttributeKey1", AttributeValue.LongAttributeValue(10));
            attributesMap.Add("MyAttributeKey2", AttributeValue.BooleanAttributeValue(true));
            attributes = Attributes.Create(attributesMap, 1);

            annotationsList.Add(TimedEvent <IAnnotation> .Create(eventTimestamp1, annotation));
            annotationsList.Add(TimedEvent <IAnnotation> .Create(eventTimestamp3, annotation));
            annotations = TimedEvents <IAnnotation> .Create(annotationsList, 2);

            //networkEventsList.add(SpanData.TimedEvent.Create(eventTimestamp1, recvNetworkEvent));
            //networkEventsList.add(SpanData.TimedEvent.Create(eventTimestamp2, sentNetworkEvent));
            //networkEvents = TimedEvents.Create(networkEventsList, 3);

            messageEventsList.Add(TimedEvent <IMessageEvent> .Create(eventTimestamp1, recvMessageEvent));
            messageEventsList.Add(TimedEvent <IMessageEvent> .Create(eventTimestamp2, sentMessageEvent));
            messageEvents = TimedEvents <IMessageEvent> .Create(messageEventsList, 3);

            linksList.Add(Link.FromSpanContext(spanContext, LinkType.CHILD_LINKED_SPAN));
            links = LinkList.Create(linksList, 0);
        }