public void ZipkinActivityConversion_ToZipkinSpan_NoEvents() { // Arrange var activity = ZipkinExporterTests.CreateTestActivity(addEvents: false); // Act & Assert var zipkinSpan = activity.ToZipkinSpan(DefaultZipkinEndpoint); Assert.Equal(ZipkinSpanName, zipkinSpan.Name); Assert.Empty(zipkinSpan.Annotations.Value); Assert.Equal(activity.TraceId.ToHexString(), zipkinSpan.TraceId); Assert.Equal(activity.SpanId.ToHexString(), zipkinSpan.Id); int counter = 0; var tagsArray = zipkinSpan.Tags.Value.ToArray(); foreach (var tags in activity.Tags) { Assert.Equal(tagsArray[counter].Key, tags.Key); Assert.Equal(tagsArray[counter++].Value, tags.Value); } Assert.Equal(activity.StartTimeUtc.ToEpochMicroseconds(), zipkinSpan.Timestamp); Assert.Equal((long)activity.Duration.TotalMilliseconds * 1000, zipkinSpan.Duration); }
public void ZipkinActivityConversion_ToZipkinSpan_AllPropertiesSet() { // Arrange var activity = ZipkinExporterTests.CreateTestActivity(); // Act & Assert var zipkinSpan = activity.ToZipkinSpan(DefaultZipkinEndpoint); Assert.Equal(ZipkinSpanName, zipkinSpan.Name); Assert.Equal(activity.TraceId.ToHexString(), zipkinSpan.TraceId); Assert.Equal(activity.SpanId.ToHexString(), zipkinSpan.Id); Assert.Equal(activity.StartTimeUtc.ToEpochMicroseconds(), zipkinSpan.Timestamp); Assert.Equal((long)(activity.Duration.TotalMilliseconds * 1000), zipkinSpan.Duration); int counter = 0; var tagsArray = zipkinSpan.Tags.Value.ToArray(); foreach (var tags in activity.Tags) { Assert.Equal(tagsArray[counter].Key, tags.Key); Assert.Equal(tagsArray[counter++].Value, tags.Value); } foreach (var annotation in zipkinSpan.Annotations) { // Timestamp is same in both events Assert.Equal(activity.Events.First().Timestamp.ToEpochMicroseconds(), annotation.Timestamp); } }
public void ToZipkinSpan_Status_ErrorFlagTest(StatusCode expectedStatusCode, string statusCodeTagValue) { // Arrange var activity = ZipkinExporterTests.CreateTestActivity(); activity.SetTag(SpanAttributeConstants.StatusCodeKey, statusCodeTagValue); // Act var zipkinSpan = activity.ToZipkinSpan(DefaultZipkinEndpoint); // Assert Assert.Equal(expectedStatusCode, activity.GetStatus().StatusCode); if (expectedStatusCode == StatusCode.Unset) { Assert.DoesNotContain(zipkinSpan.Tags, t => t.Key == SpanAttributeConstants.StatusCodeKey); } else { Assert.Equal( StatusHelper.GetTagValueForStatusCode(expectedStatusCode), zipkinSpan.Tags.FirstOrDefault(t => t.Key == SpanAttributeConstants.StatusCodeKey).Value); } if (expectedStatusCode == StatusCode.Error) { Assert.Contains(zipkinSpan.Tags, t => t.Key == "error" && (string)t.Value == string.Empty); } else { Assert.DoesNotContain(zipkinSpan.Tags, t => t.Key == "error"); } }
public void ToZipkinSpan_Status_ErrorFlagTest(StatusCode statusCode, bool hasErrorFlag) { var status = statusCode switch { StatusCode.Unset => Status.Unset, StatusCode.Ok => Status.Ok, StatusCode.Error => Status.Error, _ => throw new InvalidOperationException(), }; // Arrange var activity = ZipkinExporterTests.CreateTestActivity(status: status); // Act var zipkinSpan = activity.ToZipkinSpan(DefaultZipkinEndpoint); // Assert if (hasErrorFlag) { Assert.Contains(zipkinSpan.Tags.Value, t => t.Key == "error" && (string)t.Value == "true"); } else { Assert.DoesNotContain(zipkinSpan.Tags.Value, t => t.Key == "error"); } }
public void ZipkinSpanConverterTest_GenerateActivity_RemoteEndpointOmittedByDefault() { // Arrange var activity = ZipkinExporterTests.CreateTestActivity(); // Act & Assert var zipkinSpan = ZipkinActivityConversionExtensions.ToZipkinSpan(activity, DefaultZipkinEndpoint); Assert.Null(zipkinSpan.RemoteEndpoint); }
public void ZipkinSpanConverterTest_GenerateActivity_RemoteEndpointResolutionPriority(RemoteEndpointPriorityTestCase testCase) { // Arrange var activity = ZipkinExporterTests.CreateTestActivity(additionalAttributes: testCase.RemoteEndpointAttributes); // Act & Assert var zipkinSpan = ZipkinActivityConversionExtensions.ToZipkinSpan(activity, DefaultZipkinEndpoint); Assert.NotNull(zipkinSpan.RemoteEndpoint); Assert.Equal(testCase.ExpectedResult, zipkinSpan.RemoteEndpoint.ServiceName); }
public void ZipkinSpanConverterTest_GenerateActivity_RemoteEndpointResolution() { // Arrange var activity = ZipkinExporterTests.CreateTestActivity( additionalAttributes: new Dictionary <string, object> { ["net.peer.name"] = "RemoteServiceName", }); // Act & Assert var zipkinSpan = ZipkinActivityConversionExtensions.ToZipkinSpan(activity, DefaultZipkinEndpoint); Assert.NotNull(zipkinSpan.RemoteEndpoint); Assert.Equal("RemoteServiceName", zipkinSpan.RemoteEndpoint.ServiceName); }
public void ToZipkinSpan_Status_ErrorFlagTest(StatusCode statusCode, bool hasErrorFlag) { var status = statusCode switch { StatusCode.Unset => Status.Unset, StatusCode.Ok => Status.Ok, StatusCode.Error => Status.Error, _ => throw new InvalidOperationException(), }; // Arrange var activity = ZipkinExporterTests.CreateTestActivity(status: status); // Act var zipkinSpan = activity.ToZipkinSpan(DefaultZipkinEndpoint); // Assert if (statusCode == StatusCode.Unset) { Assert.DoesNotContain(zipkinSpan.Tags, t => t.Key == SpanAttributeConstants.StatusCodeKey); } else { Assert.Equal( StatusHelper.GetStringNameForStatusCode(statusCode), zipkinSpan.Tags.FirstOrDefault(t => t.Key == SpanAttributeConstants.StatusCodeKey).Value); } if (hasErrorFlag) { Assert.Contains(zipkinSpan.Tags, t => t.Key == "error" && (string)t.Value == "true"); } else { Assert.DoesNotContain(zipkinSpan.Tags, t => t.Key == "error"); } }