diff --git a/src/OpenTelemetry.Exporter.Zipkin/.publicApi/PublicAPI.Shipped.txt b/src/OpenTelemetry.Exporter.Zipkin/.publicApi/PublicAPI.Shipped.txt index 5d94b912d2d..2e1bf086dc7 100644 --- a/src/OpenTelemetry.Exporter.Zipkin/.publicApi/PublicAPI.Shipped.txt +++ b/src/OpenTelemetry.Exporter.Zipkin/.publicApi/PublicAPI.Shipped.txt @@ -1,13 +1,14 @@ +#nullable enable OpenTelemetry.Exporter.ZipkinExporter -OpenTelemetry.Exporter.ZipkinExporter.ZipkinExporter(OpenTelemetry.Exporter.ZipkinExporterOptions options, System.Net.Http.HttpClient client = null) -> void +OpenTelemetry.Exporter.ZipkinExporter.ZipkinExporter(OpenTelemetry.Exporter.ZipkinExporterOptions! options, System.Net.Http.HttpClient? client = null) -> void OpenTelemetry.Exporter.ZipkinExporterOptions -OpenTelemetry.Exporter.ZipkinExporterOptions.BatchExportProcessorOptions.get -> OpenTelemetry.BatchExportProcessorOptions OpenTelemetry.Exporter.ZipkinExporterOptions.BatchExportProcessorOptions.set -> void -OpenTelemetry.Exporter.ZipkinExporterOptions.Endpoint.get -> System.Uri +OpenTelemetry.Exporter.ZipkinExporterOptions.BatchExportProcessorOptions.get -> OpenTelemetry.BatchExportProcessorOptions! +OpenTelemetry.Exporter.ZipkinExporterOptions.HttpClientFactory.get -> System.Func! +OpenTelemetry.Exporter.ZipkinExporterOptions.Endpoint.get -> System.Uri! OpenTelemetry.Exporter.ZipkinExporterOptions.Endpoint.set -> void OpenTelemetry.Exporter.ZipkinExporterOptions.ExportProcessorType.get -> OpenTelemetry.ExportProcessorType OpenTelemetry.Exporter.ZipkinExporterOptions.ExportProcessorType.set -> void -OpenTelemetry.Exporter.ZipkinExporterOptions.HttpClientFactory.get -> System.Func OpenTelemetry.Exporter.ZipkinExporterOptions.HttpClientFactory.set -> void OpenTelemetry.Exporter.ZipkinExporterOptions.MaxPayloadSizeInBytes.get -> int? OpenTelemetry.Exporter.ZipkinExporterOptions.MaxPayloadSizeInBytes.set -> void @@ -15,7 +16,7 @@ OpenTelemetry.Exporter.ZipkinExporterOptions.UseShortTraceIds.get -> bool OpenTelemetry.Exporter.ZipkinExporterOptions.UseShortTraceIds.set -> void OpenTelemetry.Exporter.ZipkinExporterOptions.ZipkinExporterOptions() -> void OpenTelemetry.Trace.ZipkinExporterHelperExtensions -override OpenTelemetry.Exporter.ZipkinExporter.Export(in OpenTelemetry.Batch batch) -> OpenTelemetry.ExportResult -static OpenTelemetry.Trace.ZipkinExporterHelperExtensions.AddZipkinExporter(this OpenTelemetry.Trace.TracerProviderBuilder builder, string name, System.Action configure) -> OpenTelemetry.Trace.TracerProviderBuilder -static OpenTelemetry.Trace.ZipkinExporterHelperExtensions.AddZipkinExporter(this OpenTelemetry.Trace.TracerProviderBuilder builder, System.Action configure) -> OpenTelemetry.Trace.TracerProviderBuilder -static OpenTelemetry.Trace.ZipkinExporterHelperExtensions.AddZipkinExporter(this OpenTelemetry.Trace.TracerProviderBuilder builder) -> OpenTelemetry.Trace.TracerProviderBuilder +override OpenTelemetry.Exporter.ZipkinExporter.Export(in OpenTelemetry.Batch batch) -> OpenTelemetry.ExportResult +static OpenTelemetry.Trace.ZipkinExporterHelperExtensions.AddZipkinExporter(this OpenTelemetry.Trace.TracerProviderBuilder! builder) -> OpenTelemetry.Trace.TracerProviderBuilder! +static OpenTelemetry.Trace.ZipkinExporterHelperExtensions.AddZipkinExporter(this OpenTelemetry.Trace.TracerProviderBuilder! builder, string? name, System.Action? configure) -> OpenTelemetry.Trace.TracerProviderBuilder! +static OpenTelemetry.Trace.ZipkinExporterHelperExtensions.AddZipkinExporter(this OpenTelemetry.Trace.TracerProviderBuilder! builder, System.Action! configure) -> OpenTelemetry.Trace.TracerProviderBuilder! diff --git a/src/OpenTelemetry.Exporter.Zipkin/Implementation/ZipkinActivityConversionExtensions.cs b/src/OpenTelemetry.Exporter.Zipkin/Implementation/ZipkinActivityConversionExtensions.cs index 802591d052a..2753f51f50a 100644 --- a/src/OpenTelemetry.Exporter.Zipkin/Implementation/ZipkinActivityConversionExtensions.cs +++ b/src/OpenTelemetry.Exporter.Zipkin/Implementation/ZipkinActivityConversionExtensions.cs @@ -21,13 +21,13 @@ internal static ZipkinSpan ToZipkinSpan(this Activity activity, ZipkinEndpoint l { var context = activity.Context; - string parentId = activity.ParentSpanId == default ? + string? parentId = activity.ParentSpanId == default ? null : EncodeSpanId(activity.ParentSpanId); var tagState = new TagEnumerationState { - Tags = PooledList>.Create(), + Tags = PooledList>.Create(), }; tagState.EnumerateTags(activity); @@ -38,9 +38,9 @@ internal static ZipkinSpan ToZipkinSpan(this Activity activity, ZipkinEndpoint l { if (activity.Status == ActivityStatusCode.Ok) { - PooledList>.Add( + PooledList>.Add( ref tagState.Tags, - new KeyValuePair( + new KeyValuePair( SpanAttributeConstants.StatusCodeKey, "OK")); } @@ -48,16 +48,16 @@ internal static ZipkinSpan ToZipkinSpan(this Activity activity, ZipkinEndpoint l // activity.Status is Error else { - PooledList>.Add( + PooledList>.Add( ref tagState.Tags, - new KeyValuePair( + new KeyValuePair( SpanAttributeConstants.StatusCodeKey, "ERROR")); // Error flag rule from https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/sdk_exporters/zipkin.md#status - PooledList>.Add( + PooledList>.Add( ref tagState.Tags, - new KeyValuePair( + new KeyValuePair( ZipkinErrorFlagTagName, activity.StatusDescription ?? string.Empty)); } @@ -67,18 +67,18 @@ internal static ZipkinSpan ToZipkinSpan(this Activity activity, ZipkinEndpoint l // activity status takes precedence over status tag. else if (tagState.StatusCode.HasValue && tagState.StatusCode != StatusCode.Unset) { - PooledList>.Add( + PooledList>.Add( ref tagState.Tags, - new KeyValuePair( + new KeyValuePair( SpanAttributeConstants.StatusCodeKey, StatusHelper.GetTagValueForStatusCode(tagState.StatusCode.Value))); // Error flag rule from https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/sdk_exporters/zipkin.md#status if (tagState.StatusCode == StatusCode.Error) { - PooledList>.Add( + PooledList>.Add( ref tagState.Tags, - new KeyValuePair( + new KeyValuePair( ZipkinErrorFlagTagName, tagState.StatusDescription ?? string.Empty)); } @@ -87,30 +87,30 @@ internal static ZipkinSpan ToZipkinSpan(this Activity activity, ZipkinEndpoint l var activitySource = activity.Source; if (!string.IsNullOrEmpty(activitySource.Name)) { - PooledList>.Add(ref tagState.Tags, new KeyValuePair("otel.scope.name", activitySource.Name)); + PooledList>.Add(ref tagState.Tags, new KeyValuePair("otel.scope.name", activitySource.Name)); // otel.library.name is deprecated, but has to be propagated according to https://github.com/open-telemetry/opentelemetry-specification/blob/v1.31.0/specification/common/mapping-to-non-otlp.md#instrumentationscope - PooledList>.Add(ref tagState.Tags, new KeyValuePair("otel.library.name", activitySource.Name)); + PooledList>.Add(ref tagState.Tags, new KeyValuePair("otel.library.name", activitySource.Name)); if (!string.IsNullOrEmpty(activitySource.Version)) { - PooledList>.Add(ref tagState.Tags, new KeyValuePair("otel.scope.version", activitySource.Version)); + PooledList>.Add(ref tagState.Tags, new KeyValuePair("otel.scope.version", activitySource.Version)); // otel.library.version is deprecated, but has to be propagated according to https://github.com/open-telemetry/opentelemetry-specification/blob/v1.31.0/specification/common/mapping-to-non-otlp.md#instrumentationscope - PooledList>.Add(ref tagState.Tags, new KeyValuePair("otel.library.version", activitySource.Version)); + PooledList>.Add(ref tagState.Tags, new KeyValuePair("otel.library.version", activitySource.Version)); } } - ZipkinEndpoint remoteEndpoint = null; + ZipkinEndpoint? remoteEndpoint = null; if (activity.Kind == ActivityKind.Client || activity.Kind == ActivityKind.Producer) { - PeerServiceResolver.Resolve(ref tagState, out string peerServiceName, out bool addAsTag); + PeerServiceResolver.Resolve(ref tagState, out string? peerServiceName, out bool addAsTag); if (peerServiceName != null) { remoteEndpoint = RemoteEndpointCache.GetOrAdd((peerServiceName, default), ZipkinEndpoint.Create); if (addAsTag) { - PooledList>.Add(ref tagState.Tags, new KeyValuePair(SemanticConventions.AttributePeerService, peerServiceName)); + PooledList>.Add(ref tagState.Tags, new KeyValuePair(SemanticConventions.AttributePeerService, peerServiceName)); } } } @@ -172,7 +172,7 @@ private static string EncodeTraceId(ActivityTraceId traceId, bool useShortTraceI return id; } - private static string ToActivityKind(Activity activity) + private static string? ToActivityKind(Activity activity) { return activity.Kind switch { @@ -186,15 +186,15 @@ private static string ToActivityKind(Activity activity) internal struct TagEnumerationState : PeerServiceResolver.IPeerServiceState { - public PooledList> Tags; + public PooledList> Tags; - public string PeerService { get; set; } + public string? PeerService { get; set; } public int? PeerServicePriority { get; set; } - public string HostName { get; set; } + public string? HostName { get; set; } - public string IpAddress { get; set; } + public string? IpAddress { get; set; } public long Port { get; set; } @@ -239,7 +239,7 @@ public void EnumerateTags(Activity activity) PeerServiceResolver.InspectTag(ref this, key, intVal); } - PooledList>.Add(ref this.Tags, tag); + PooledList>.Add(ref this.Tags, tag); } } } diff --git a/src/OpenTelemetry.Exporter.Zipkin/Implementation/ZipkinEndpoint.cs b/src/OpenTelemetry.Exporter.Zipkin/Implementation/ZipkinEndpoint.cs index c6c9908b38e..cec7cc7156c 100644 --- a/src/OpenTelemetry.Exporter.Zipkin/Implementation/ZipkinEndpoint.cs +++ b/src/OpenTelemetry.Exporter.Zipkin/Implementation/ZipkinEndpoint.cs @@ -13,11 +13,11 @@ public ZipkinEndpoint(string serviceName) } public ZipkinEndpoint( - string serviceName, - string ipv4, - string ipv6, + string? serviceName, + string? ipv4, + string? ipv6, int? port, - Dictionary tags) + Dictionary? tags) { this.ServiceName = serviceName; this.Ipv4 = ipv4; @@ -26,15 +26,15 @@ public ZipkinEndpoint( this.Tags = tags; } - public string ServiceName { get; } + public string? ServiceName { get; } - public string Ipv4 { get; } + public string? Ipv4 { get; } - public string Ipv6 { get; } + public string? Ipv6 { get; } public int? Port { get; } - public Dictionary Tags { get; } + public Dictionary? Tags { get; } public static ZipkinEndpoint Create(string serviceName) { diff --git a/src/OpenTelemetry.Exporter.Zipkin/Implementation/ZipkinSpan.cs b/src/OpenTelemetry.Exporter.Zipkin/Implementation/ZipkinSpan.cs index 8038492a0be..a6ea86f6cea 100644 --- a/src/OpenTelemetry.Exporter.Zipkin/Implementation/ZipkinSpan.cs +++ b/src/OpenTelemetry.Exporter.Zipkin/Implementation/ZipkinSpan.cs @@ -11,16 +11,16 @@ internal readonly struct ZipkinSpan { public ZipkinSpan( string traceId, - string parentId, + string? parentId, string id, - string kind, + string? kind, string name, long? timestamp, long? duration, ZipkinEndpoint localEndpoint, - ZipkinEndpoint remoteEndpoint, + ZipkinEndpoint? remoteEndpoint, in PooledList annotations, - in PooledList> tags, + in PooledList> tags, bool? debug, bool? shared) { @@ -44,11 +44,11 @@ public ZipkinSpan( public string TraceId { get; } - public string ParentId { get; } + public string? ParentId { get; } public string Id { get; } - public string Kind { get; } + public string? Kind { get; } public string Name { get; } @@ -58,11 +58,11 @@ public ZipkinSpan( public ZipkinEndpoint LocalEndpoint { get; } - public ZipkinEndpoint RemoteEndpoint { get; } + public ZipkinEndpoint? RemoteEndpoint { get; } public PooledList Annotations { get; } - public PooledList> Tags { get; } + public PooledList> Tags { get; } public bool? Debug { get; } @@ -148,7 +148,7 @@ public void Write(Utf8JsonWriter writer) writer.WriteEndArray(); } - if (!this.Tags.IsEmpty || this.LocalEndpoint.Tags != null) + if (!this.Tags.IsEmpty || this.LocalEndpoint!.Tags != null) { writer.WritePropertyName(ZipkinSpanJsonHelper.TagsPropertyName); writer.WriteStartObject(); @@ -161,7 +161,7 @@ public void Write(Utf8JsonWriter writer) try { - foreach (var tag in this.LocalEndpoint.Tags ?? Enumerable.Empty>()) + foreach (var tag in this.LocalEndpoint!.Tags! ?? Enumerable.Empty>()) { ZipkinTagWriter.Instance.TryWriteTag(ref writer, tag); } diff --git a/src/OpenTelemetry.Exporter.Zipkin/OpenTelemetry.Exporter.Zipkin.csproj b/src/OpenTelemetry.Exporter.Zipkin/OpenTelemetry.Exporter.Zipkin.csproj index 22b6537a7dd..3e269d83c26 100644 --- a/src/OpenTelemetry.Exporter.Zipkin/OpenTelemetry.Exporter.Zipkin.csproj +++ b/src/OpenTelemetry.Exporter.Zipkin/OpenTelemetry.Exporter.Zipkin.csproj @@ -4,9 +4,6 @@ Zipkin exporter for OpenTelemetry .NET $(PackageTags);Zipkin;distributed-tracing core- - - - disable diff --git a/src/OpenTelemetry.Exporter.Zipkin/ZipkinExporter.cs b/src/OpenTelemetry.Exporter.Zipkin/ZipkinExporter.cs index 69483d84a13..9ccfdc69041 100644 --- a/src/OpenTelemetry.Exporter.Zipkin/ZipkinExporter.cs +++ b/src/OpenTelemetry.Exporter.Zipkin/ZipkinExporter.cs @@ -30,7 +30,7 @@ public class ZipkinExporter : BaseExporter /// /// Configuration options. /// Http client to use to upload telemetry. - public ZipkinExporter(ZipkinExporterOptions options, HttpClient client = null) + public ZipkinExporter(ZipkinExporterOptions options, HttpClient? client = null) { Guard.ThrowIfNull(options); @@ -39,7 +39,7 @@ public ZipkinExporter(ZipkinExporterOptions options, HttpClient client = null) this.httpClient = client ?? options.HttpClientFactory?.Invoke() ?? throw new InvalidOperationException("ZipkinExporter was missing HttpClientFactory or it returned null."); } - internal ZipkinEndpoint LocalEndpoint { get; private set; } + internal ZipkinEndpoint? LocalEndpoint { get; private set; } /// public override ExportResult Export(in Batch batch) @@ -83,15 +83,15 @@ internal void SetLocalEndpointFromResource(Resource resource) { var hostName = ResolveHostName(); - string ipv4 = null; - string ipv6 = null; + string? ipv4 = null; + string? ipv6 = null; if (!string.IsNullOrEmpty(hostName)) { - ipv4 = ResolveHostAddress(hostName, AddressFamily.InterNetwork); - ipv6 = ResolveHostAddress(hostName, AddressFamily.InterNetworkV6); + ipv4 = ResolveHostAddress(hostName!, AddressFamily.InterNetwork); + ipv6 = ResolveHostAddress(hostName!, AddressFamily.InterNetworkV6); } - string serviceName = null; + string? serviceName = null; foreach (var label in resource.Attributes) { if (label.Key == ResourceSemanticConventions.AttributeServiceName) @@ -115,9 +115,9 @@ internal void SetLocalEndpointFromResource(Resource resource) tags: null); } - private static string ResolveHostAddress(string hostName, AddressFamily family) + private static string? ResolveHostAddress(string hostName, AddressFamily family) { - string result = null; + string? result = null; try { @@ -145,9 +145,9 @@ private static string ResolveHostAddress(string hostName, AddressFamily family) return result; } - private static string ResolveHostName() + private static string? ResolveHostName() { - string result = null; + string? result = null; try { @@ -180,7 +180,7 @@ private sealed class JsonContent : HttpContent private readonly ZipkinExporter exporter; private readonly Batch batch; - private Utf8JsonWriter writer; + private Utf8JsonWriter? writer; public JsonContent(ZipkinExporter exporter, in Batch batch) { @@ -191,13 +191,13 @@ public JsonContent(ZipkinExporter exporter, in Batch batch) } #if NET - protected override void SerializeToStream(Stream stream, TransportContext context, CancellationToken cancellationToken) + protected override void SerializeToStream(Stream stream, TransportContext? context, CancellationToken cancellationToken) { this.SerializeToStreamInternal(stream); } #endif - protected override Task SerializeToStreamAsync(Stream stream, TransportContext context) + protected override Task SerializeToStreamAsync(Stream stream, TransportContext? context) { this.SerializeToStreamInternal(stream); return Task.CompletedTask; @@ -226,7 +226,7 @@ private void SerializeToStreamInternal(Stream stream) foreach (var activity in this.batch) { - var zipkinSpan = activity.ToZipkinSpan(this.exporter.LocalEndpoint, this.exporter.options.UseShortTraceIds); + var zipkinSpan = activity.ToZipkinSpan(this.exporter.LocalEndpoint!, this.exporter.options.UseShortTraceIds); zipkinSpan.Write(this.writer); diff --git a/src/OpenTelemetry.Exporter.Zipkin/ZipkinExporterHelperExtensions.cs b/src/OpenTelemetry.Exporter.Zipkin/ZipkinExporterHelperExtensions.cs index ca858c649ab..b7142b985a5 100644 --- a/src/OpenTelemetry.Exporter.Zipkin/ZipkinExporterHelperExtensions.cs +++ b/src/OpenTelemetry.Exporter.Zipkin/ZipkinExporterHelperExtensions.cs @@ -39,13 +39,13 @@ public static TracerProviderBuilder AddZipkinExporter(this TracerProviderBuilder /// Adds Zipkin exporter to the TracerProvider. /// /// builder to use. - /// Name which is used when retrieving options. - /// Callback action for configuring . + /// Optional name which is used when retrieving options. + /// Optional callback action for configuring . /// The instance of to chain the calls. public static TracerProviderBuilder AddZipkinExporter( this TracerProviderBuilder builder, - string name, - Action configure) + string? name, + Action? configure) { Guard.ThrowIfNull(builder); @@ -81,13 +81,13 @@ private static BaseProcessor BuildZipkinExporterProcessor( { options.HttpClientFactory = () => { - Type httpClientFactoryType = Type.GetType("System.Net.Http.IHttpClientFactory, Microsoft.Extensions.Http", throwOnError: false); + Type? httpClientFactoryType = Type.GetType("System.Net.Http.IHttpClientFactory, Microsoft.Extensions.Http", throwOnError: false); if (httpClientFactoryType != null) { - object httpClientFactory = serviceProvider.GetService(httpClientFactoryType); + object? httpClientFactory = serviceProvider.GetService(httpClientFactoryType); if (httpClientFactory != null) { - MethodInfo createClientMethod = httpClientFactoryType.GetMethod( + MethodInfo? createClientMethod = httpClientFactoryType.GetMethod( "CreateClient", BindingFlags.Public | BindingFlags.Instance, binder: null, @@ -95,7 +95,9 @@ private static BaseProcessor BuildZipkinExporterProcessor( modifiers: null); if (createClientMethod != null) { - return (HttpClient)createClientMethod.Invoke(httpClientFactory, new object[] { "ZipkinExporter" }); + var parameters = new object[] { "ZipkinExporter" }; + var client = (HttpClient?)createClientMethod.Invoke(httpClientFactory, parameters); + return client ?? new HttpClient(); } } } diff --git a/src/OpenTelemetry.Exporter.Zipkin/ZipkinExporterOptions.cs b/src/OpenTelemetry.Exporter.Zipkin/ZipkinExporterOptions.cs index bc94307351d..1f4bcd14684 100644 --- a/src/OpenTelemetry.Exporter.Zipkin/ZipkinExporterOptions.cs +++ b/src/OpenTelemetry.Exporter.Zipkin/ZipkinExporterOptions.cs @@ -40,12 +40,12 @@ internal ZipkinExporterOptions( Debug.Assert(configuration != null, "configuration was null"); Debug.Assert(defaultBatchOptions != null, "defaultBatchOptions was null"); - if (configuration.TryGetUriValue(ZipkinExporterEventSource.Log, ZipkinEndpointEnvVar, out var endpoint)) + if (configuration!.TryGetUriValue(ZipkinExporterEventSource.Log, ZipkinEndpointEnvVar, out var endpoint)) { - this.Endpoint = endpoint; + this.Endpoint = endpoint!; } - this.BatchExportProcessorOptions = defaultBatchOptions; + this.BatchExportProcessorOptions = defaultBatchOptions!; } /// diff --git a/src/Shared/PooledList.cs b/src/Shared/PooledList.cs index 043cd0a4525..77a353359a7 100644 --- a/src/Shared/PooledList.cs +++ b/src/Shared/PooledList.cs @@ -1,8 +1,11 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#nullable enable + using System.Buffers; using System.Collections; +using System.Diagnostics.CodeAnalysis; namespace OpenTelemetry.Internal; @@ -97,6 +100,7 @@ public struct Enumerator : IEnumerator, IEnumerator private readonly T[] buffer; private readonly int count; private int index; + [AllowNull] private T current; public Enumerator(in PooledList list) @@ -107,9 +111,9 @@ public Enumerator(in PooledList list) this.current = default; } - public T Current { get => this.current; } + public T Current => this.current; - object IEnumerator.Current { get => this.Current; } + object? IEnumerator.Current => this.Current; public void Dispose() { diff --git a/test/OpenTelemetry.Exporter.Zipkin.Tests/Implementation/ZipkinActivityConversionExtensionsTest.cs b/test/OpenTelemetry.Exporter.Zipkin.Tests/Implementation/ZipkinActivityConversionExtensionsTest.cs index 6e28b18d88c..14f28474176 100644 --- a/test/OpenTelemetry.Exporter.Zipkin.Tests/Implementation/ZipkinActivityConversionExtensionsTest.cs +++ b/test/OpenTelemetry.Exporter.Zipkin.Tests/Implementation/ZipkinActivityConversionExtensionsTest.cs @@ -19,7 +19,7 @@ public void CheckProcessTag(string key, object value) { var attributeEnumerationState = new TagEnumerationState { - Tags = PooledList>.Create(), + Tags = PooledList>.Create(), }; using var activity = new Activity("TestActivity"); @@ -36,11 +36,11 @@ public void CheckProcessTag(string key, object value) [InlineData("string", null)] [InlineData("bool", null)] [InlineData("double", null)] - public void CheckNullValueProcessTag(string key, object value) + public void CheckNullValueProcessTag(string key, object? value) { var attributeEnumerationState = new TagEnumerationState { - Tags = PooledList>.Create(), + Tags = PooledList>.Create(), }; using var activity = new Activity("TestActivity"); diff --git a/test/OpenTelemetry.Exporter.Zipkin.Tests/Implementation/ZipkinActivityConversionTest.cs b/test/OpenTelemetry.Exporter.Zipkin.Tests/Implementation/ZipkinActivityConversionTest.cs index bfe69520fea..9a23ba329d4 100644 --- a/test/OpenTelemetry.Exporter.Zipkin.Tests/Implementation/ZipkinActivityConversionTest.cs +++ b/test/OpenTelemetry.Exporter.Zipkin.Tests/Implementation/ZipkinActivityConversionTest.cs @@ -106,7 +106,7 @@ public void ToZipkinSpan_Status_ErrorFlagTest(StatusCode expectedStatusCode, str if (expectedStatusCode == StatusCode.Error) { - Assert.Contains(zipkinSpan.Tags, t => t.Key == "error" && (string)t.Value == string.Empty); + Assert.Contains(zipkinSpan.Tags, t => t.Key == "error" && (string?)t.Value == string.Empty); } else { @@ -149,7 +149,7 @@ public void ToZipkinSpan_Activity_Status_And_StatusDescription_is_Set(ActivitySt Assert.Contains( zipkinSpan.Tags, t => t.Key == ZipkinActivityConversionExtensions.ZipkinErrorFlagTagName && - (string)t.Value == description); + (string?)t.Value == description); } else { @@ -177,11 +177,11 @@ public void ActivityStatus_Takes_precedence_Over_Status_Tags_ActivityStatusCodeI // Assert. Assert.Equal("OK", zipkinSpan.Tags.FirstOrDefault(t => t.Key == SpanAttributeConstants.StatusCodeKey).Value); - Assert.Contains(zipkinSpan.Tags, t => t.Key == "otel.status_code" && (string)t.Value == "OK"); - Assert.DoesNotContain(zipkinSpan.Tags, t => t.Key == "otel.status_code" && (string)t.Value == "ERROR"); + Assert.Contains(zipkinSpan.Tags, t => t.Key == "otel.status_code" && (string?)t.Value == "OK"); + Assert.DoesNotContain(zipkinSpan.Tags, t => t.Key == "otel.status_code" && (string?)t.Value == "ERROR"); // Ensure additional Activity tags were being converted. - Assert.Contains(zipkinSpan.Tags, t => t.Key == "myCustomTag" && (string)t.Value == "myCustomTagValue"); + Assert.Contains(zipkinSpan.Tags, t => t.Key == "myCustomTag" && (string?)t.Value == "myCustomTagValue"); Assert.DoesNotContain(zipkinSpan.Tags, t => t.Key == ZipkinActivityConversionExtensions.ZipkinErrorFlagTagName); } @@ -211,14 +211,14 @@ public void ActivityStatus_Takes_precedence_Over_Status_Tags_ActivityStatusCodeI Assert.Contains( zipkinSpan.Tags, t => t.Key == ZipkinActivityConversionExtensions.ZipkinErrorFlagTagName && - (string)t.Value == StatusDescriptionOnError); + (string?)t.Value == StatusDescriptionOnError); Assert.DoesNotContain( zipkinSpan.Tags, t => t.Key == ZipkinActivityConversionExtensions.ZipkinErrorFlagTagName && - (string)t.Value == TagDescriptionOnError); + (string?)t.Value == TagDescriptionOnError); // Ensure additional Activity tags were being converted. - Assert.Contains(zipkinSpan.Tags, t => t.Key == "myCustomTag" && (string)t.Value == "myCustomTagValue"); + Assert.Contains(zipkinSpan.Tags, t => t.Key == "myCustomTag" && (string?)t.Value == "myCustomTagValue"); } [Fact] @@ -247,13 +247,13 @@ public void ActivityStatus_Takes_precedence_Over_Status_Tags_ActivityStatusCodeI Assert.Contains( zipkinSpan.Tags, t => t.Key == ZipkinActivityConversionExtensions.ZipkinErrorFlagTagName && - (string)t.Value == StatusDescriptionOnError); + (string?)t.Value == StatusDescriptionOnError); Assert.DoesNotContain( zipkinSpan.Tags, t => t.Key == ZipkinActivityConversionExtensions.ZipkinErrorFlagTagName && - (string)t.Value == TagDescriptionOnError); + (string?)t.Value == TagDescriptionOnError); // Ensure additional Activity tags were being converted. - Assert.Contains(zipkinSpan.Tags, t => t.Key == "myCustomTag" && (string)t.Value == "myCustomTagValue"); + Assert.Contains(zipkinSpan.Tags, t => t.Key == "myCustomTag" && (string?)t.Value == "myCustomTagValue"); } } diff --git a/test/OpenTelemetry.Exporter.Zipkin.Tests/Implementation/ZipkinActivityExporterRemoteEndpointTests.cs b/test/OpenTelemetry.Exporter.Zipkin.Tests/Implementation/ZipkinActivityExporterRemoteEndpointTests.cs index ddbd059c0cf..0f7c9e1bdb2 100644 --- a/test/OpenTelemetry.Exporter.Zipkin.Tests/Implementation/ZipkinActivityExporterRemoteEndpointTests.cs +++ b/test/OpenTelemetry.Exporter.Zipkin.Tests/Implementation/ZipkinActivityExporterRemoteEndpointTests.cs @@ -45,7 +45,7 @@ public void GenerateActivity_RemoteEndpointResolution() public void GenerateActivity_RemoteEndpointResolutionPriority(RemoteEndpointPriorityTestCase testCase) { // Arrange - using var activity = ZipkinExporterTests.CreateTestActivity(additionalAttributes: testCase.RemoteEndpointAttributes); + using var activity = ZipkinExporterTests.CreateTestActivity(additionalAttributes: testCase.RemoteEndpointAttributes!); // Act & Assert var zipkinSpan = ZipkinActivityConversionExtensions.ToZipkinSpan(activity, DefaultZipkinEndpoint); @@ -56,11 +56,11 @@ public void GenerateActivity_RemoteEndpointResolutionPriority(RemoteEndpointPrio public class RemoteEndpointPriorityTestCase { - public string Name { get; set; } + public string? Name { get; set; } - public string ExpectedResult { get; set; } + public string? ExpectedResult { get; set; } - public Dictionary RemoteEndpointAttributes { get; set; } + public Dictionary? RemoteEndpointAttributes { get; set; } public static IEnumerable GetTestCases() { @@ -174,7 +174,7 @@ public static IEnumerable GetTestCases() }; } - public override string ToString() + public override string? ToString() { return this.Name; } diff --git a/test/OpenTelemetry.Exporter.Zipkin.Tests/OpenTelemetry.Exporter.Zipkin.Tests.csproj b/test/OpenTelemetry.Exporter.Zipkin.Tests/OpenTelemetry.Exporter.Zipkin.Tests.csproj index 31636f33157..fceb493d55d 100644 --- a/test/OpenTelemetry.Exporter.Zipkin.Tests/OpenTelemetry.Exporter.Zipkin.Tests.csproj +++ b/test/OpenTelemetry.Exporter.Zipkin.Tests/OpenTelemetry.Exporter.Zipkin.Tests.csproj @@ -2,8 +2,6 @@ Unit test project for Zipkin Exporter for OpenTelemetry $(TargetFrameworksForTests) - - disable diff --git a/test/OpenTelemetry.Exporter.Zipkin.Tests/ZipkinExporterTests.cs b/test/OpenTelemetry.Exporter.Zipkin.Tests/ZipkinExporterTests.cs index b1481ac0541..97b90a5ec68 100644 --- a/test/OpenTelemetry.Exporter.Zipkin.Tests/ZipkinExporterTests.cs +++ b/test/OpenTelemetry.Exporter.Zipkin.Tests/ZipkinExporterTests.cs @@ -58,7 +58,7 @@ static void ProcessServerRequest(HttpListenerContext context) string requestContent = readStream.ReadToEnd(); Responses.TryAdd( - Guid.Parse(context.Request.QueryString["requestId"]), + Guid.Parse(context.Request.QueryString["requestId"]!), requestContent); context.Response.OutputStream.Close(); @@ -95,8 +95,8 @@ public void AddAddZipkinExporterNamedOptionsSupported() [Fact] public void BadArgs() { - TracerProviderBuilder builder = null; - Assert.Throws(() => builder.AddZipkinExporter()); + TracerProviderBuilder? builder = null; + Assert.Throws(() => builder!.AddZipkinExporter()); } [Fact] @@ -151,7 +151,7 @@ public void EndpointConfigurationUsingEnvironmentVariable() var exporterOptions = new ZipkinExporterOptions(); - Assert.Equal(new Uri(Environment.GetEnvironmentVariable(ZipkinExporterOptions.ZipkinEndpointEnvVar)).AbsoluteUri, exporterOptions.Endpoint.AbsoluteUri); + Assert.Equal(new Uri(Environment.GetEnvironmentVariable(ZipkinExporterOptions.ZipkinEndpointEnvVar)!).AbsoluteUri, exporterOptions.Endpoint.AbsoluteUri); } finally { @@ -205,7 +205,7 @@ public void EndpointConfigurationUsingIConfiguration() }; var configuration = new ConfigurationBuilder() - .AddInMemoryCollection(values) + .AddInMemoryCollection(values!) .Build(); var options = new ZipkinExporterOptions(configuration, new()); @@ -247,13 +247,13 @@ public void UserHttpFactoryCalled() Assert.Equal(2, invocations); } - options.HttpClientFactory = null; + options.HttpClientFactory = null!; Assert.Throws(() => { using var exporter = new ZipkinExporter(options); }); - options.HttpClientFactory = () => null; + options.HttpClientFactory = () => null!; Assert.Throws(() => { using var exporter = new ZipkinExporter(options); @@ -288,7 +288,7 @@ public void UpdatesServiceNameFromDefaultResource() zipkinExporter.SetLocalEndpointFromResource(Resource.Empty); - Assert.StartsWith("unknown_service:", zipkinExporter.LocalEndpoint.ServiceName); + Assert.StartsWith("unknown_service:", zipkinExporter.LocalEndpoint!.ServiceName); } [Fact] @@ -303,7 +303,7 @@ public void UpdatesServiceNameFromIConfiguration() }; services.AddSingleton( - new ConfigurationBuilder().AddInMemoryCollection(configuration).Build()); + new ConfigurationBuilder().AddInMemoryCollection(configuration!).Build()); }); var zipkinExporter = new ZipkinExporter(new ZipkinExporterOptions()); @@ -314,7 +314,7 @@ public void UpdatesServiceNameFromIConfiguration() zipkinExporter.SetLocalEndpointFromResource(Resource.Empty); - Assert.Equal("myservicename", zipkinExporter.LocalEndpoint.ServiceName); + Assert.Equal("myservicename", zipkinExporter.LocalEndpoint!.ServiceName); } [Theory] @@ -331,7 +331,7 @@ public void IntegrationTest( bool useTestResource, bool isRootSpan, ActivityStatusCode statusCode = ActivityStatusCode.Unset, - string statusDescription = null, + string? statusDescription = null, bool addErrorTag = false) { Guid requestId = Guid.NewGuid(); @@ -378,7 +378,7 @@ public void IntegrationTest( var eventTimestamp = activity.Events.First().Timestamp.ToEpochMicroseconds(); StringBuilder ipInformation = new StringBuilder(); - if (!string.IsNullOrEmpty(exporter.LocalEndpoint.Ipv4)) + if (!string.IsNullOrEmpty(exporter.LocalEndpoint!.Ipv4)) { ipInformation.Append($@",""ipv4"":""{exporter.LocalEndpoint.Ipv4}"""); } @@ -446,13 +446,13 @@ public void IntegrationTest( internal static Activity CreateTestActivity( bool isRootSpan = false, bool setAttributes = true, - Dictionary additionalAttributes = null, + Dictionary? additionalAttributes = null, bool addEvents = true, bool addLinks = true, - Resource resource = null, + Resource? resource = null, ActivityKind kind = ActivityKind.Client, ActivityStatusCode statusCode = ActivityStatusCode.Unset, - string statusDescription = null, + string? statusDescription = null, DateTime? dateTime = null) { var startTimestamp = DateTime.UtcNow; @@ -494,14 +494,14 @@ internal static Activity CreateTestActivity( new ActivityEvent( "Event1", eventTimestamp, - new ActivityTagsCollection(new Dictionary + new ActivityTagsCollection(new Dictionary { { "key", "value" }, })), new ActivityEvent( "Event2", eventTimestamp, - new ActivityTagsCollection(new Dictionary + new ActivityTagsCollection(new Dictionary { { "key", "value" }, })), @@ -512,7 +512,7 @@ internal static Activity CreateTestActivity( var activitySource = new ActivitySource(nameof(CreateTestActivity)); var tags = setAttributes ? - attributes.Select(kvp => new KeyValuePair(kvp.Key, kvp.Value)) + attributes.Select(kvp => new KeyValuePair(kvp.Key, kvp.Value)) : null; var links = addLinks ? new[] @@ -530,7 +530,7 @@ internal static Activity CreateTestActivity( parentContext: new ActivityContext(traceId, parentSpanId, ActivityTraceFlags.Recorded), tags, links, - startTime: startTimestamp); + startTime: startTimestamp)!; if (addEvents) { diff --git a/test/OpenTelemetry.Tests/Shared/TestHttpServer.cs b/test/OpenTelemetry.Tests/Shared/TestHttpServer.cs index 5965e5fecf4..9d86ae2a2aa 100644 --- a/test/OpenTelemetry.Tests/Shared/TestHttpServer.cs +++ b/test/OpenTelemetry.Tests/Shared/TestHttpServer.cs @@ -1,6 +1,8 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#nullable enable + using System.Net; namespace OpenTelemetry.Tests; @@ -13,7 +15,7 @@ public static IDisposable RunServer(Action action, out stri { host = "localhost"; port = 0; - RunningServer server = null; + RunningServer? server = null; var retryCount = 5; while (retryCount > 0)