public void BuildJeagerThriftSpan() { var doubleField = new Field <double> { Key = "doubleField", Value = 1.1 }; var decimalField = new Field <decimal> { Key = "decimalField", Value = 5.5m }; var int64Field = new Field <Int64> { Key = "int64Field", Value = 1942 }; var stringField = new Field <string> { Key = "stringField", Value = "stringValue" }; var tracerTags = new Dictionary <string, Field> { { "doubleTag", doubleField }, { "int64Tag", int64Field }, { "stringTag", stringField } }; var logTimestamp = DateTimeOffset.Parse("2/16/18 11:33:29 AM +00:00"); var logFields1 = new List <Field> { doubleField }; var logFields2 = new List <Field> { decimalField }; var logs = new List <LogRecord> { new LogRecord(logTimestamp, logFields1), new LogRecord(logTimestamp, logFields2) }; var serialization = new JaegerThriftSerialization(); var span = Substitute.For <ILetsTraceSpan>(); var traceId = new TraceId(10, 2); var spanId = new SpanId(15); var parentId = new SpanId(82); var context = new SpanContext(traceId, spanId, parentId); span.Context.Returns(context); var op = "op, yo"; span.OperationName.Returns(op); span.Tags.Returns(tracerTags); span.Logs.Returns(logs); var startTimestamp = DateTimeOffset.Parse("2/16/18 11:33:28 AM +00:00"); var finishTimestamp = DateTimeOffset.Parse("2/16/18 11:33:30 AM +00:00"); span.StartTimestamp.Returns(startTimestamp); span.FinishTimestamp.Returns(finishTimestamp); var parentRefType = References.ChildOf; var parentContext = Substitute.For <ILetsTraceSpanContext>(); parentContext.TraceId.Returns(traceId); parentContext.SpanId.Returns(parentId); var reference = new Reference(parentRefType, context); span.References.Returns(new List <Reference> { reference }); var jSpan = serialization.BuildJaegerThriftSpan(span); Assert.Equal((long)traceId.Low, jSpan.TraceIdLow); Assert.Equal((long)traceId.High, jSpan.TraceIdHigh); Assert.Equal(spanId, jSpan.SpanId); Assert.Equal(parentId, jSpan.ParentSpanId); Assert.Equal(op, jSpan.OperationName); Assert.Equal(0, jSpan.Flags); Assert.Equal(1518780808000000, jSpan.StartTime); Assert.Equal(2000000, jSpan.Duration); // tags Assert.Equal(3, jSpan.Tags.Count); Assert.Equal("doubleTag", jSpan.Tags[0].Key); Assert.Equal(doubleField.Value, jSpan.Tags[0].VDouble); Assert.Equal("int64Tag", jSpan.Tags[1].Key); Assert.Equal(int64Field.Value, jSpan.Tags[1].VLong); Assert.Equal("stringTag", jSpan.Tags[2].Key); Assert.Equal(stringField.Value, jSpan.Tags[2].VStr); // logs Assert.Equal(JaegerTagType.DOUBLE, jSpan.Logs[0].Fields[0].VType); Assert.Equal(doubleField.Key, jSpan.Logs[0].Fields[0].Key); Assert.Equal(doubleField.Value, jSpan.Logs[0].Fields[0].VDouble); Assert.Equal(JaegerTagType.DOUBLE, jSpan.Logs[1].Fields[0].VType); Assert.Equal(decimalField.Key, jSpan.Logs[1].Fields[0].Key); Assert.Equal((double)decimalField.Value, jSpan.Logs[1].Fields[0].VDouble); // references Assert.Single(jSpan.References); Assert.Equal(JaegerReferenceType.CHILD_OF, jSpan.References[0].RefType); Assert.Equal((long)traceId.Low, jSpan.References[0].TraceIdLow); Assert.Equal((long)traceId.High, jSpan.References[0].TraceIdHigh); Assert.Equal(spanId, jSpan.References[0].SpanId); }
public void BuildJeagerThriftSpan() { var doubleTagKey = "doubleTag"; var doubleLogKey = "doubleLog"; var decimalLogKey = "decimalLog"; var int64TagKey = "int64Tag"; var stringTagKey = "stringTag"; var tracerTags = new Dictionary <string, object> { { doubleTagKey, 1.1 }, { int64TagKey, (Int64)1942 }, { stringTagKey, "stringValue" } }; var logTimestamp = new DateTime(2018, 2, 16, 11, 33, 29, DateTimeKind.Utc); var logFields1 = new Dictionary <string, object> { { doubleLogKey, 1.3 } }; var logFields2 = new Dictionary <string, object> { { decimalLogKey, 5.5m } }; var logs = new List <LogRecord> { new LogRecord(logTimestamp, logFields1), new LogRecord(logTimestamp, logFields2) }; var serialization = new JaegerThriftSerialization(); var span = Substitute.For <IJaegerCoreSpan>(); var traceId = new TraceId(10, 2); var spanId = new SpanId(15); var parentId = new SpanId(82); var context = new SpanContext(traceId, spanId, parentId); span.Context.Returns(context); var op = "op, yo"; span.OperationName.Returns(op); span.Tags.Returns(tracerTags); span.Logs.Returns(logs); var startTimestamp = new DateTime(2018, 2, 16, 11, 33, 28, DateTimeKind.Utc); var finishTimestamp = new DateTime(2018, 2, 16, 11, 33, 30, DateTimeKind.Utc); span.StartTimestampUtc.Returns(startTimestamp); span.FinishTimestampUtc.Returns(finishTimestamp); var parentRefType = References.ChildOf; var parentContext = Substitute.For <IJaegerCoreSpanContext>(); parentContext.TraceId.Returns(traceId); parentContext.SpanId.Returns(parentId); var reference = new Reference(parentRefType, context); span.References.Returns(new List <Reference> { reference }); var jSpan = serialization.BuildJaegerThriftSpan(span); Assert.Equal((long)traceId.Low, jSpan.TraceIdLow); Assert.Equal((long)traceId.High, jSpan.TraceIdHigh); Assert.Equal(spanId, jSpan.SpanId); Assert.Equal(parentId, jSpan.ParentSpanId); Assert.Equal(op, jSpan.OperationName); Assert.Equal(0, jSpan.Flags); Assert.Equal(1518780808000000, jSpan.StartTime); Assert.Equal(2000000, jSpan.Duration); // tags Assert.Equal(3, jSpan.Tags.Count); Assert.Equal(doubleTagKey, jSpan.Tags[0].Key); Assert.Equal(1.1, jSpan.Tags[0].VDouble); Assert.Equal(int64TagKey, jSpan.Tags[1].Key); Assert.Equal(1942, jSpan.Tags[1].VLong); Assert.Equal(stringTagKey, jSpan.Tags[2].Key); Assert.Equal("stringValue", jSpan.Tags[2].VStr); // logs Assert.Equal(JaegerTagType.DOUBLE, jSpan.Logs[0].Fields[0].VType); Assert.Equal(doubleLogKey, jSpan.Logs[0].Fields[0].Key); Assert.Equal(1.3, jSpan.Logs[0].Fields[0].VDouble); Assert.Equal(JaegerTagType.DOUBLE, jSpan.Logs[1].Fields[0].VType); Assert.Equal(decimalLogKey, jSpan.Logs[1].Fields[0].Key); Assert.Equal((double)5.5m, jSpan.Logs[1].Fields[0].VDouble); // references Assert.Single(jSpan.References); Assert.Equal(JaegerReferenceType.CHILD_OF, jSpan.References[0].RefType); Assert.Equal((long)traceId.Low, jSpan.References[0].TraceIdLow); Assert.Equal((long)traceId.High, jSpan.References[0].TraceIdHigh); Assert.Equal(spanId, jSpan.References[0].SpanId); }