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");
            }
        }
예제 #4
0
        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);
        }
예제 #8
0
        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");
            }
        }