diff --git a/.editorconfig b/.editorconfig index e3f693c1d13..3d257f44c18 100644 --- a/.editorconfig +++ b/.editorconfig @@ -174,3 +174,13 @@ indent_size = 2 [*.cshtml.cs] dotnet_diagnostic.SA1649.severity = none + +# Verify settings +[*.{received,verified}.{json,txt,xml}] +charset = utf-8-bom +end_of_line = lf +indent_size = unset +indent_style = unset +insert_final_newline = false +tab_width = unset +trim_trailing_whitespace = false diff --git a/.gitattributes b/.gitattributes index 50ca329f24b..714ad31c816 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1,7 @@ *.sh eol=lf + +# Verify settings +*.verified.txt text eol=lf working-tree-encoding=UTF-8 +*.verified.xml text eol=lf working-tree-encoding=UTF-8 +*.verified.json text eol=lf working-tree-encoding=UTF-8 +*.verified.bin binary diff --git a/.gitignore b/.gitignore index 851ee867e69..d48e46a318e 100644 --- a/.gitignore +++ b/.gitignore @@ -355,3 +355,6 @@ rewrite.coyote.json # Test results TestResults/ + +# Verify snapshots +*.received.* diff --git a/Directory.Packages.props b/Directory.Packages.props index bcb4124bbb2..98b9ddb6143 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -113,6 +113,7 @@ + diff --git a/OpenTelemetry.sln b/OpenTelemetry.sln index 0384bcce8aa..cf3c92d042e 100644 --- a/OpenTelemetry.sln +++ b/OpenTelemetry.sln @@ -13,6 +13,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution .editorconfig = .editorconfig .gitignore = .gitignore CONTRIBUTING.md = CONTRIBUTING.md + Directory.Build.props = Directory.Build.props + Directory.Packages.props = Directory.Packages.props global.json = global.json LICENSE.TXT = LICENSE.TXT NuGet.config = NuGet.config diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/CHANGELOG.md b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/CHANGELOG.md index c394bd4f0c6..c6a41305073 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/CHANGELOG.md +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/CHANGELOG.md @@ -7,6 +7,10 @@ Notes](../../RELEASENOTES.md). ## Unreleased +* Fixed an issue where OTLP export of some metrics payloads to some OTLP + receivers were rejected with an HTTP 400 response due to gRPC protocol errors. + ([#6567](https://github.com/open-telemetry/opentelemetry-dotnet/pull/6567)) + ## 1.13.1 Released 2025-Oct-09 diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/Serializer/ProtobufOtlpMetricSerializer.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/Serializer/ProtobufOtlpMetricSerializer.cs index 47873bc4c83..27580aa99b0 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/Serializer/ProtobufOtlpMetricSerializer.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/Serializer/ProtobufOtlpMetricSerializer.cs @@ -292,16 +292,7 @@ private static int WriteMetric(byte[] buffer, int writePosition, Metric metric) writePosition = ProtobufSerializer.WriteDoubleWithTag(buffer, writePosition, ProtobufOtlpMetricFieldNumberConstants.HistogramDataPoint_Max, max); } - foreach (var histogramMeasurement in metricPoint.GetHistogramBuckets()) - { - var bucketCount = (ulong)histogramMeasurement.BucketCount; - writePosition = ProtobufSerializer.WriteFixed64WithTag(buffer, writePosition, ProtobufOtlpMetricFieldNumberConstants.HistogramDataPoint_Bucket_Counts, bucketCount); - - if (histogramMeasurement.ExplicitBound != double.PositiveInfinity) - { - writePosition = ProtobufSerializer.WriteDoubleWithTag(buffer, writePosition, ProtobufOtlpMetricFieldNumberConstants.HistogramDataPoint_Explicit_Bounds, histogramMeasurement.ExplicitBound); - } - } + writePosition = WriteHistogramBuckets(buffer, writePosition, metricPoint.GetHistogramBuckets()); writePosition = WriteDoubleExemplars(buffer, writePosition, ProtobufOtlpMetricFieldNumberConstants.HistogramDataPoint_Exemplars, in metricPoint); @@ -513,4 +504,77 @@ private static int WriteExemplar(byte[] buffer, int writePosition, in Exemplar e ProtobufSerializer.WriteReservedLength(buffer, exemplarLengthPosition, writePosition - (exemplarLengthPosition + ReserveSizeForLength)); return writePosition; } + + private static int WriteHistogramBuckets(byte[] buffer, int writePosition, HistogramBuckets buckets) + { + writePosition = WriteBucketCounts(buffer, writePosition, buckets.BucketCounts); + + writePosition = WriteExplicitBounds(buffer, writePosition, buckets.ExplicitBounds!); + + return writePosition; + + static int WriteBucketCounts(byte[] buffer, int writePosition, HistogramBuckets.HistogramBucketValues[] values) + { + int length = values.Length; + + writePosition = WritePackedLength( + buffer, + writePosition, + length, + ProtobufOtlpMetricFieldNumberConstants.HistogramDataPoint_Bucket_Counts); + + for (int i = 0; i < length; i++) + { + writePosition = ProtobufSerializer.WriteFixed64LittleEndianFormat( + buffer, + writePosition, + (ulong)values[i].SnapshotValue); + } + + return writePosition; + } + + static int WriteExplicitBounds(byte[] buffer, int writePosition, double[] values) + { + int length = 0; + + for (int i = 0; i < values.Length; i++) + { + if (values[i] != double.PositiveInfinity) + { + length++; + } + } + + if (length > 0) + { + writePosition = WritePackedLength( + buffer, + writePosition, + length, + ProtobufOtlpMetricFieldNumberConstants.HistogramDataPoint_Explicit_Bounds); + + for (int i = 0; i < values.Length; i++) + { + var value = values[i]; + if (value != double.PositiveInfinity) + { + writePosition = ProtobufSerializer.WriteDouble(buffer, writePosition, value); + } + } + } + + return writePosition; + } + + static int WritePackedLength(byte[] buffer, int writePosition, int length, int fieldNumber) + { + return ProtobufSerializer.WriteTagAndLength( + buffer, + writePosition, + length * 8, + fieldNumber, + ProtobufWireType.LEN); + } + } } diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/Serializer/ProtobufSerializer.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/Serializer/ProtobufSerializer.cs index deee79e77db..cb70fa781aa 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/Serializer/ProtobufSerializer.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/Serializer/ProtobufSerializer.cs @@ -160,6 +160,10 @@ internal static int WriteDoubleWithTag(byte[] buffer, int writePosition, int fie return writePosition; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static int WriteDouble(byte[] buffer, int writePosition, double value) + => WriteFixed64LittleEndianFormat(buffer, writePosition, (ulong)BitConverter.DoubleToInt64Bits(value)); + /// /// Computes the number of bytes required to encode a 64-bit unsigned integer in Protocol Buffers' varint format. /// diff --git a/src/OpenTelemetry/Metrics/AggregatorStore.cs b/src/OpenTelemetry/Metrics/AggregatorStore.cs index cd6d33190d3..d9166cf407a 100644 --- a/src/OpenTelemetry/Metrics/AggregatorStore.cs +++ b/src/OpenTelemetry/Metrics/AggregatorStore.cs @@ -298,6 +298,13 @@ internal void SnapshotCumulative(int indexSnapshot) internal MetricPointsAccessor GetMetricPoints() => new(this.metricPoints, this.currentMetricPointBatch, this.batchSize); + // This method must only be used for testing purposes + internal void OverrideTimeRange(DateTimeOffset startTimeExclusive, DateTimeOffset endTimeInclusive) + { + this.StartTimeExclusive = startTimeExclusive; + this.EndTimeInclusive = endTimeInclusive; + } + private static double[] FindDefaultHistogramBounds(in MetricStreamIdentity metricStreamIdentity) { if (metricStreamIdentity.Unit == "s") diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/EventSourceTests.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/EventSourceTests.cs index 69787cec48e..9262550f859 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/EventSourceTests.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/EventSourceTests.cs @@ -5,7 +5,6 @@ using OpenTelemetry.PersistentStorage.Abstractions; using OpenTelemetry.PersistentStorage.FileSystem; using OpenTelemetry.Tests; -using Xunit; namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests; diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/GrpcRetryTestCase.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/GrpcRetryTestCase.cs index ca659c79a4b..2ae15e66447 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/GrpcRetryTestCase.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/GrpcRetryTestCase.cs @@ -4,7 +4,6 @@ using Google.Protobuf; using Google.Protobuf.WellKnownTypes; using OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation.ExportClient.Grpc; -using Xunit; namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation.ExportClient.Tests; diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/HttpRetryTestCase.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/HttpRetryTestCase.cs index 6bea0eb7d3a..99388a84391 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/HttpRetryTestCase.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/HttpRetryTestCase.cs @@ -6,7 +6,6 @@ using System.Net.Http; #endif using System.Net.Http.Headers; -using Xunit; namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation.ExportClient.Tests; diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/Implementation/ExportClient/GrpcStatusDeserializerTests.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/Implementation/ExportClient/GrpcStatusDeserializerTests.cs index 36e5eb521ae..f160d568b43 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/Implementation/ExportClient/GrpcStatusDeserializerTests.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/Implementation/ExportClient/GrpcStatusDeserializerTests.cs @@ -4,7 +4,6 @@ using Google.Protobuf; using Google.Protobuf.WellKnownTypes; using OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation.ExportClient.Grpc; -using Xunit; namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests.Implementation.ExportClient; diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/Implementation/ExportClient/OtlpHttpTraceExportClientTests.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/Implementation/ExportClient/OtlpHttpTraceExportClientTests.cs index d256b4fcf79..92262f35429 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/Implementation/ExportClient/OtlpHttpTraceExportClientTests.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/Implementation/ExportClient/OtlpHttpTraceExportClientTests.cs @@ -10,7 +10,6 @@ using OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation.Serializer; using OpenTelemetry.Resources; using OpenTelemetry.Trace; -using Xunit; using OtlpCollector = OpenTelemetry.Proto.Collector.Trace.V1; namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests; diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/Implementation/Serializer/OtlpArrayTagWriterTests.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/Implementation/Serializer/OtlpArrayTagWriterTests.cs index d8ada0f2f80..49ca3885bbd 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/Implementation/Serializer/OtlpArrayTagWriterTests.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/Implementation/Serializer/OtlpArrayTagWriterTests.cs @@ -5,7 +5,6 @@ using OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation; using OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation.Serializer; using OpenTelemetry.Resources; -using Xunit; using OtlpCollector = OpenTelemetry.Proto.Collector.Trace.V1; using OtlpTrace = OpenTelemetry.Proto.Trace.V1; diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/Implementation/Serializer/ProtobufOtlpMetricSerializerTests.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/Implementation/Serializer/ProtobufOtlpMetricSerializerTests.cs new file mode 100644 index 00000000000..e5c62ecd1d8 --- /dev/null +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/Implementation/Serializer/ProtobufOtlpMetricSerializerTests.cs @@ -0,0 +1,124 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +using System.Diagnostics.Metrics; +using OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation; +using OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation.Serializer; +using OpenTelemetry.Metrics; +using OpenTelemetry.Resources; +using OpenTelemetry.Tests; + +namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests.Implementation.Serializer; + +public static class ProtobufOtlpMetricSerializerTests +{ + [Fact] + public static async Task WriteMetricsData_Serializes_Metrics_Correctly() + { + // Arrange + var metrics = GenerateMetrics(); + + var attributes = new Dictionary + { + { "service.name", "OpenTelemetry-DotNet" }, + { "service.version", "1.2.3" }, + }; + + var buffer = new byte[1024]; + var writePosition = 0; + var resource = new Resource(attributes); + + // Act + var actual = ProtobufOtlpMetricSerializer.WriteMetricsData( + ref buffer, + writePosition, + resource, + metrics); + + // Assert + Assert.NotEqual(0, actual); + Assert.True(actual > writePosition, $"The returned write position, {actual} is not greater than the initial write position, {writePosition}."); + Assert.True(actual <= buffer.Length, $"The returned write position, {actual} is beyond the bounds of the buffer, {buffer.Length}."); + + using var stream = new MemoryStream(); + +#if NET + await stream.WriteAsync(buffer.AsMemory(0, actual)); +#else + await stream.WriteAsync(buffer, 0, actual); +#endif + + await Verify(stream, "bin") + .IgnoreParametersForVerified() + .UseDirectory("snapshots"); + } + + private static Batch GenerateMetrics() + { + // Arrange + Batch metrics = default; + + // Create some metrics to export + using (var exported = new ManualResetEvent(false)) + { + var experimentalOptions = new ExperimentalOptions(); + var exporterOptions = new OtlpExporterOptions() + { + Endpoint = new($"http://localhost:4318/v1/"), + Protocol = OtlpExportProtocol.HttpProtobuf, + }; + + using var exporter = new DelegatingExporter() + { + OnExportFunc = (batch) => + { + metrics = batch; + exported.Set(); + return ExportResult.Success; + }, + }; + + var meterName = "otlp.protobuf.serialization"; + + var builder = Sdk.CreateMeterProviderBuilder().AddMeter(meterName); + + var metricReaderOptions = new MetricReaderOptions(); + metricReaderOptions.PeriodicExportingMetricReaderOptions.ExportIntervalMilliseconds = Timeout.Infinite; + + builder.AddReader( + (serviceProvider) => OtlpMetricExporterExtensions.BuildOtlpExporterMetricReader( + serviceProvider, + exporterOptions, + metricReaderOptions, + experimentalOptions, + configureExporterInstance: (_) => exporter)); + + using var meterProvider = builder.Build(); + using var meter = new Meter(meterName); + + var counter = meter.CreateCounter("counter"); + counter.Add(18); + + var gauge = meter.CreateGauge("gauge"); + gauge.Record(42); + + var histogram = meter.CreateHistogram("histogram"); + histogram.Record(100); + + Assert.True(meterProvider.ForceFlush()); + + Assert.NotEqual(0, metrics.Count); + } + + // Scrub the timestamps for stable snapshots + var startTime = new DateTimeOffset(2025, 10, 08, 10, 20, 11, TimeSpan.Zero); + var endTime = startTime.AddSeconds(10); + + foreach (var metric in metrics) + { + metric.AggregatorStore.OverrideTimeRange(startTime, endTime); + } + + return metrics; + } +} diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/Implementation/Serializer/ProtobufSerializerTests.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/Implementation/Serializer/ProtobufSerializerTests.cs index 6c202b528e7..22d5582ad6c 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/Implementation/Serializer/ProtobufSerializerTests.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/Implementation/Serializer/ProtobufSerializerTests.cs @@ -3,7 +3,6 @@ using System.Text; using OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation.Serializer; -using Xunit; namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests.Implementation.Serializer; diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/Implementation/Serializer/snapshots/ProtobufOtlpMetricSerializerTests.WriteMetricsData_Serializes_Metrics_Correctly.verified.bin b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/Implementation/Serializer/snapshots/ProtobufOtlpMetricSerializerTests.WriteMetricsData_Serializes_Metrics_Correctly.verified.bin new file mode 100644 index 00000000000..b319f6df40e Binary files /dev/null and b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/Implementation/Serializer/snapshots/ProtobufOtlpMetricSerializerTests.WriteMetricsData_Serializes_Metrics_Correctly.verified.bin differ diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/IntegrationTest/IntegrationTests.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/IntegrationTest/IntegrationTests.cs index f4089c99875..1b8532548de 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/IntegrationTest/IntegrationTests.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/IntegrationTest/IntegrationTests.cs @@ -11,7 +11,6 @@ using OpenTelemetry.Metrics; using OpenTelemetry.Tests; using OpenTelemetry.Trace; -using Xunit; using Xunit.Abstractions; namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests; diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/MockCollectorIntegrationTests.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/MockCollectorIntegrationTests.cs index 0f810a25d34..326a086acd6 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/MockCollectorIntegrationTests.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/MockCollectorIntegrationTests.cs @@ -21,7 +21,6 @@ using OpenTelemetry.Proto.Collector.Trace.V1; using OpenTelemetry.Tests; using OpenTelemetry.Trace; -using Xunit; namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests; diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests.csproj b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests.csproj index 5541cabe5c6..950cc66f0bd 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests.csproj +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests.csproj @@ -34,6 +34,7 @@ + diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpAttributeTests.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpAttributeTests.cs index e260a4544d9..ec189dbdec4 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpAttributeTests.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpAttributeTests.cs @@ -4,7 +4,6 @@ using System.Diagnostics.CodeAnalysis; using System.Globalization; using OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation.Serializer; -using Xunit; using OtlpCommon = OpenTelemetry.Proto.Common.V1; namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests; diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpExportProtocolParserTests.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpExportProtocolParserTests.cs index c2fdc81eb2e..fb360bc0638 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpExportProtocolParserTests.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpExportProtocolParserTests.cs @@ -1,8 +1,6 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -using Xunit; - namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests; public class OtlpExportProtocolParserTests diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpExporterHelperExtensionsTests.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpExporterHelperExtensionsTests.cs index 4dcd98eb22d..6d8e4247f1a 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpExporterHelperExtensionsTests.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpExporterHelperExtensionsTests.cs @@ -9,7 +9,6 @@ using OpenTelemetry.Logs; using OpenTelemetry.Metrics; using OpenTelemetry.Trace; -using Xunit; namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests; diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpExporterOptionsExtensionsTests.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpExporterOptionsExtensionsTests.cs index 8e0c24601a4..11f2d9563e9 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpExporterOptionsExtensionsTests.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpExporterOptionsExtensionsTests.cs @@ -8,7 +8,6 @@ using OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation; using OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation.ExportClient; using OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation.Transmission; -using Xunit; namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests; diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpExporterOptionsTests.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpExporterOptionsTests.cs index 9536d283cf5..5878bf1be5f 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpExporterOptionsTests.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpExporterOptionsTests.cs @@ -2,7 +2,6 @@ // SPDX-License-Identifier: Apache-2.0 using Microsoft.Extensions.Configuration; -using Xunit; namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests; diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpHttpExportClientTests.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpHttpExportClientTests.cs index 5de79944839..3bab01deeda 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpHttpExportClientTests.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpHttpExportClientTests.cs @@ -5,7 +5,6 @@ using System.Net.Http; #endif using OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation.ExportClient; -using Xunit; namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests; diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpLogExporterTests.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpLogExporterTests.cs index c6f7f32f6d0..ee5d571c0d8 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpLogExporterTests.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpLogExporterTests.cs @@ -17,7 +17,6 @@ using OpenTelemetry.Resources; using OpenTelemetry.Tests; using OpenTelemetry.Trace; -using Xunit; using static OpenTelemetry.Proto.Common.V1.AnyValue; using OtlpCollector = OpenTelemetry.Proto.Collector.Logs.V1; using OtlpCommon = OpenTelemetry.Proto.Common.V1; diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpMetricsExporterTests.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpMetricsExporterTests.cs index 52499046070..f394f74aca8 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpMetricsExporterTests.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpMetricsExporterTests.cs @@ -12,7 +12,6 @@ using OpenTelemetry.Resources; using OpenTelemetry.Tests; using OpenTelemetry.Trace; -using Xunit; using OtlpCollector = OpenTelemetry.Proto.Collector.Metrics.V1; using OtlpMetrics = OpenTelemetry.Proto.Metrics.V1; diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpResourceTests.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpResourceTests.cs index 5bc0c3601ae..97d63f3a145 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpResourceTests.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpResourceTests.cs @@ -4,7 +4,6 @@ using OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation.Serializer; using OpenTelemetry.Proto.Trace.V1; using OpenTelemetry.Resources; -using Xunit; namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests; diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpRetryTests.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpRetryTests.cs index 9e3a266a749..c6a6bb728b5 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpRetryTests.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpRetryTests.cs @@ -2,7 +2,6 @@ // SPDX-License-Identifier: Apache-2.0 using OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation.ExportClient.Grpc; -using Xunit; namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation.ExportClient.Tests; diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpSpecConfigDefinitionTests.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpSpecConfigDefinitionTests.cs index c5d1b0717a4..6c65703168a 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpSpecConfigDefinitionTests.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpSpecConfigDefinitionTests.cs @@ -5,7 +5,6 @@ using System.Globalization; using Microsoft.Extensions.Configuration; using OpenTelemetry.Metrics; -using Xunit; namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests; diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpTestHelpers.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpTestHelpers.cs index 7cc6b10336e..65a5bbd82ec 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpTestHelpers.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpTestHelpers.cs @@ -3,7 +3,6 @@ using System.Globalization; using Google.Protobuf.Collections; -using Xunit; using OtlpCommon = OpenTelemetry.Proto.Common.V1; namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests; diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpTraceExporterTests.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpTraceExporterTests.cs index d9e1fdb9a39..fa574c5e31f 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpTraceExporterTests.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpTraceExporterTests.cs @@ -11,7 +11,6 @@ using OpenTelemetry.Resources; using OpenTelemetry.Tests; using OpenTelemetry.Trace; -using Xunit; using OtlpCollector = OpenTelemetry.Proto.Collector.Trace.V1; using OtlpCommon = OpenTelemetry.Proto.Common.V1; using OtlpTrace = OpenTelemetry.Proto.Trace.V1; diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/SdkLimitOptionsTests.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/SdkLimitOptionsTests.cs index 0a737ff1438..a7f227c4d05 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/SdkLimitOptionsTests.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/SdkLimitOptionsTests.cs @@ -3,7 +3,6 @@ using Microsoft.Extensions.Configuration; using OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation; -using Xunit; namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests; diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/UseOtlpExporterExtensionTests.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/UseOtlpExporterExtensionTests.cs index 2bb8245b657..293ee236232 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/UseOtlpExporterExtensionTests.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/UseOtlpExporterExtensionTests.cs @@ -9,7 +9,6 @@ using OpenTelemetry.Metrics; using OpenTelemetry.Tests; using OpenTelemetry.Trace; -using Xunit; namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests; diff --git a/test/OpenTelemetry.Tests/Shared/SkipUnlessEnvVarFoundTheoryAttribute.cs b/test/OpenTelemetry.Tests/Shared/SkipUnlessEnvVarFoundTheoryAttribute.cs index dd0a5011d51..f08dd03a6ef 100644 --- a/test/OpenTelemetry.Tests/Shared/SkipUnlessEnvVarFoundTheoryAttribute.cs +++ b/test/OpenTelemetry.Tests/Shared/SkipUnlessEnvVarFoundTheoryAttribute.cs @@ -1,7 +1,9 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#pragma warning disable IDE0005 // Using directive is unnecessary. using Xunit; +#pragma warning restore IDE0005 // Using directive is unnecessary. namespace OpenTelemetry.Tests; diff --git a/test/Shared/StrongNameTests.cs b/test/Shared/StrongNameTests.cs index d56435f3e3f..066c1121110 100644 --- a/test/Shared/StrongNameTests.cs +++ b/test/Shared/StrongNameTests.cs @@ -1,7 +1,9 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#pragma warning disable IDE0005 // Using directive is unnecessary. using Xunit; +#pragma warning restore IDE0005 // Using directive is unnecessary. namespace OpenTelemetry.Tests;