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); }
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); }
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); }
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)); }
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); }
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); } }