Ejemplo n.º 1
0
        public void TimestampConvertedForLocalComponent()
        {
            var startTime = DateTime.Now;
            var spanState = new SpanState(1, 0, 2, SpanFlags.None);
            var span      = new Span(spanState, TimeUtils.UtcNow);

            var recordStart  = new Record(spanState, startTime, Annotations.LocalOperationStart("Operation"));
            var visitorStart = new ZipkinAnnotationVisitor(recordStart, span);

            recordStart.Annotation.Accept(visitorStart);
            var recordStop  = new Record(spanState, startTime.AddHours(1), Annotations.LocalOperationStop());
            var visitorStop = new ZipkinAnnotationVisitor(recordStop, span);

            recordStop.Annotation.Accept(visitorStop);

            var thriftSpan = ThriftSpanSerializer.ConvertToThrift(span);

            Assert.AreEqual(startTime.ToUnixTimestamp(), thriftSpan.Timestamp);
            Assert.AreEqual(1, thriftSpan.Binary_annotations.Count);
            var endpoint = thriftSpan.Binary_annotations[0].Host;

            Assert.NotNull(endpoint);
            Assert.IsEmpty(endpoint.Service_name);
            Assert.IsNotNull(endpoint.Ipv4);
        }
Ejemplo n.º 2
0
        private static void CreateAndVisitRecord(Span span, IAnnotation annotation)
        {
            var record  = new Record(span.SpanState, TimeUtils.UtcNow, annotation);
            var visitor = new ZipkinAnnotationVisitor(record, span);

            record.Annotation.Accept(visitor);
        }
Ejemplo n.º 3
0
        private static void AnnotationCorrectlyAdded(IAnnotation ann, string expectedValue, bool isBinaryAnnotation, bool spanCompleted)
        {
            var span = new Span(SpanState, spanCreated: TimeUtils.UtcNow);

            var record  = new Record(SpanState, TimeUtils.UtcNow, ann);
            var visitor = new ZipkinAnnotationVisitor(record, span);

            Assert.AreEqual(0, span.Annotations.Count);
            Assert.AreEqual(0, span.BinaryAnnotations.Count);

            record.Annotation.Accept(visitor);

            if (isBinaryAnnotation)
            {
                Assert.AreEqual(0, span.Annotations.Count);
                Assert.AreEqual(1, span.BinaryAnnotations.Count);
                Assert.AreEqual(expectedValue, span.BinaryAnnotations.First(_ => true).Key);
            }
            else
            {
                Assert.AreEqual(1, span.Annotations.Count);
                Assert.AreEqual(0, span.BinaryAnnotations.Count);
                Assert.AreEqual(expectedValue, span.Annotations.First(_ => true).Value);
            }

            Assert.AreEqual(spanCompleted, span.Complete);
        }
Ejemplo n.º 4
0
        public void UnsupportedTagAnnotationShouldThrow()
        {
            var span = new Span(SpanState, spanCreated: TimeUtils.UtcNow);

            var record  = new Record(SpanState, TimeUtils.UtcNow, new TagAnnotation("magicKey", 1f));
            var visitor = new ZipkinAnnotationVisitor(record, span);

            Assert.Throws <ArgumentException>(() => record.Annotation.Accept(visitor));
        }
Ejemplo n.º 5
0
        public void TagAnnotationCorrectlyAdded(object value, byte[] expectedBytes, AnnotationType expectedType)
        {
            var span = new Span(SpanState, spanCreated: TimeUtils.UtcNow);

            var record  = new Record(SpanState, TimeUtils.UtcNow, new TagAnnotation("magicKey", value));
            var visitor = new ZipkinAnnotationVisitor(record, span);

            Assert.AreEqual(0, span.Annotations.Count);
            Assert.AreEqual(0, span.BinaryAnnotations.Count);

            record.Annotation.Accept(visitor);

            Assert.AreEqual(0, span.Annotations.Count);
            Assert.AreEqual(1, span.BinaryAnnotations.Count);

            var binAnn = span.BinaryAnnotations.First(_ => true);

            Assert.AreEqual("magicKey", binAnn.Key);
            Assert.AreEqual(expectedBytes, binAnn.Value);
            Assert.AreEqual(expectedType, binAnn.AnnotationType);
        }
Ejemplo n.º 6
0
        private static void VerifySpanDurationComputedWhenSetAsComplete(IAnnotation start, IAnnotation stop, bool isRootSpan, bool isSpanStartedAndDurationSet)
        {
            var startTime        = DateTime.Now;
            var endTime          = startTime.AddHours(1);
            var expectedDuration = endTime.Subtract(startTime);

            long?parentId = 0;

            if (isRootSpan)
            {
                parentId = null;
            }
            var spanState            = new SpanState(1, parentId, 2, SpanFlags.None);
            var spanCreatedTimestamp = TimeUtils.UtcNow;
            var span = new Span(spanState, spanCreatedTimestamp);

            var recordStart  = new Record(spanState, startTime, start);
            var visitorStart = new ZipkinAnnotationVisitor(recordStart, span);
            var recordStop   = new Record(spanState, endTime, stop);
            var visitorStop  = new ZipkinAnnotationVisitor(recordStop, span);

            Assert.AreEqual(spanCreatedTimestamp, span.SpanCreated);
            Assert.False(span.Duration.HasValue);
            Assert.False(span.Complete);
            recordStart.Annotation.Accept(visitorStart);
            Assert.False(span.Duration.HasValue);
            Assert.False(span.Complete);
            recordStop.Annotation.Accept(visitorStop);
            Assert.True(span.Complete);
            if (isSpanStartedAndDurationSet)
            {
                Assert.AreEqual(expectedDuration, span.Duration);
                Assert.AreEqual(startTime, span.SpanStarted);
            }
            else
            {
                Assert.False(span.Duration.HasValue);
                Assert.False(span.SpanStarted.HasValue);
            }
        }