diff --git a/build/Common.test.props b/build/Common.test.props index 4163e120d..c5742d34a 100644 --- a/build/Common.test.props +++ b/build/Common.test.props @@ -5,6 +5,7 @@ $(MSBuildThisFileDirectory)/debug.snk $(DefineConstants);SIGNED true + $(NoWarn),1574,1591 diff --git a/build/OpenTelemetry.prod.ruleset b/build/OpenTelemetry.prod.ruleset index 1b6ff9c8d..d8632be28 100644 --- a/build/OpenTelemetry.prod.ruleset +++ b/build/OpenTelemetry.prod.ruleset @@ -5,168 +5,9 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + diff --git a/build/OpenTelemetry.test.ruleset b/build/OpenTelemetry.test.ruleset index 2229c0172..eabc72709 100644 --- a/build/OpenTelemetry.test.ruleset +++ b/build/OpenTelemetry.test.ruleset @@ -6,168 +6,12 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + diff --git a/build/stylecop.json b/build/stylecop.json index 3c0661e7d..064a1ef5a 100644 --- a/build/stylecop.json +++ b/build/stylecop.json @@ -4,6 +4,9 @@ "documentationRules": { "companyName": "OpenTelemetry Authors", "copyrightText": "Copyright The OpenTelemetry Authors\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License." + }, + "orderingRules": { + "usingDirectivesPlacement": "outsideNamespace" } } } diff --git a/samples/Exporters/AspNet/Properties/AssemblyInfo.cs b/samples/Exporters/AspNet/Properties/AssemblyInfo.cs index a0fdd497b..f108d3c8d 100644 --- a/samples/Exporters/AspNet/Properties/AssemblyInfo.cs +++ b/samples/Exporters/AspNet/Properties/AssemblyInfo.cs @@ -1,5 +1,4 @@ using System.Reflection; -using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following diff --git a/samples/Exporters/Console/TestPrometheus.cs b/samples/Exporters/Console/TestPrometheus.cs index 108deec76..b891618b3 100644 --- a/samples/Exporters/Console/TestPrometheus.cs +++ b/samples/Exporters/Console/TestPrometheus.cs @@ -59,9 +59,9 @@ namespace Samples // All meters from this factory will be configured with the common processor. var meterFactory = MeterFactory.Create(mb => { - mb.SetMetricProcessor(processor); - mb.SetMetricExporter(promExporter); - mb.SetMetricPushInterval(TimeSpan.FromSeconds(pushIntervalInSecs)); + mb.SetMetricProcessor(processor); + mb.SetMetricExporter(promExporter); + mb.SetMetricPushInterval(TimeSpan.FromSeconds(pushIntervalInSecs)); }); // Obtain a Meter. Libraries would pass their name as argument. diff --git a/samples/Exporters/Console/TestZPages.cs b/samples/Exporters/Console/TestZPages.cs index 3a7c500e8..1a97cb414 100644 --- a/samples/Exporters/Console/TestZPages.cs +++ b/samples/Exporters/Console/TestZPages.cs @@ -20,7 +20,6 @@ using OpenTelemetry.Exporter.ZPages; using OpenTelemetry.Exporter.ZPages.Implementation; using OpenTelemetry.Trace; using OpenTelemetry.Trace.Configuration; -using OpenTelemetry.Trace.Export; namespace Samples { diff --git a/samples/Exporters/Web/WeatherForecast.cs b/samples/Exporters/Web/WeatherForecast.cs index 746c1362b..10bd3f4f0 100644 --- a/samples/Exporters/Web/WeatherForecast.cs +++ b/samples/Exporters/Web/WeatherForecast.cs @@ -8,7 +8,7 @@ namespace API public int TemperatureC { get; set; } - public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); + public int TemperatureF => 32 + (int)(this.TemperatureC / 0.5556); public string Summary { get; set; } } diff --git a/samples/LoggingTracer/LoggingTracer/LoggingExporter.cs b/samples/LoggingTracer/LoggingTracer/LoggingExporter.cs index efaab2fcb..c33de49b5 100644 --- a/samples/LoggingTracer/LoggingTracer/LoggingExporter.cs +++ b/samples/LoggingTracer/LoggingTracer/LoggingExporter.cs @@ -19,7 +19,6 @@ using System.Text; using System.Threading; using System.Threading.Tasks; using OpenTelemetry.Resources; -using OpenTelemetry.Trace; using OpenTelemetry.Trace.Export; namespace LoggingTracer diff --git a/samples/LoggingTracer/LoggingTracer/LoggingSpan.cs b/samples/LoggingTracer/LoggingTracer/LoggingSpan.cs index b88420d17..d5f88ca7b 100644 --- a/samples/LoggingTracer/LoggingTracer/LoggingSpan.cs +++ b/samples/LoggingTracer/LoggingTracer/LoggingSpan.cs @@ -14,7 +14,6 @@ // limitations under the License. // using System; -using System.Collections.Generic; using OpenTelemetry.Trace; namespace LoggingTracer diff --git a/samples/LoggingTracer/LoggingTracer/LoggingTracer.cs b/samples/LoggingTracer/LoggingTracer/LoggingTracer.cs index e8606aaaf..cb2409eb2 100644 --- a/samples/LoggingTracer/LoggingTracer/LoggingTracer.cs +++ b/samples/LoggingTracer/LoggingTracer/LoggingTracer.cs @@ -16,7 +16,6 @@ using System; using System.Collections.Generic; using System.Diagnostics; -using OpenTelemetry.Context.Propagation; using OpenTelemetry.Trace; namespace LoggingTracer diff --git a/src/OpenTelemetry.Api/Context/CorrelationContextEntry.cs b/src/OpenTelemetry.Api/Context/CorrelationContextEntry.cs index f2bb40d97..ee7c35f4d 100644 --- a/src/OpenTelemetry.Api/Context/CorrelationContextEntry.cs +++ b/src/OpenTelemetry.Api/Context/CorrelationContextEntry.cs @@ -96,7 +96,7 @@ namespace OpenTelemetry.Context /// public override bool Equals(object o) { - return o is CorrelationContextEntry that && (this.Key == that.Key && this.Value == that.Value); + return o is CorrelationContextEntry that && this.Key == that.Key && this.Value == that.Value; } /// diff --git a/src/OpenTelemetry.Api/Context/DistributedContext.cs b/src/OpenTelemetry.Api/Context/DistributedContext.cs index e3ece6b66..b26c4d982 100644 --- a/src/OpenTelemetry.Api/Context/DistributedContext.cs +++ b/src/OpenTelemetry.Api/Context/DistributedContext.cs @@ -15,7 +15,6 @@ // using System; -using System.Linq; using OpenTelemetry.Internal; namespace OpenTelemetry.Context diff --git a/src/OpenTelemetry.Api/Metrics/BlankLabelSet.cs b/src/OpenTelemetry.Api/Metrics/BlankLabelSet.cs index 65a0411e1..c7c56b767 100644 --- a/src/OpenTelemetry.Api/Metrics/BlankLabelSet.cs +++ b/src/OpenTelemetry.Api/Metrics/BlankLabelSet.cs @@ -14,8 +14,6 @@ // limitations under the License. // -using System.Collections.Generic; - namespace OpenTelemetry.Metrics { /// diff --git a/src/OpenTelemetry.Api/Metrics/LabelSet.cs b/src/OpenTelemetry.Api/Metrics/LabelSet.cs index 3fbef8105..72ba59cbe 100644 --- a/src/OpenTelemetry.Api/Metrics/LabelSet.cs +++ b/src/OpenTelemetry.Api/Metrics/LabelSet.cs @@ -15,7 +15,6 @@ // using System.Collections.Generic; using System.Linq; -using System.Text; namespace OpenTelemetry.Metrics { diff --git a/src/OpenTelemetry.Api/Metrics/NoOpMeasureMetric.cs b/src/OpenTelemetry.Api/Metrics/NoOpMeasureMetric.cs index 7935829be..2459df8b1 100644 --- a/src/OpenTelemetry.Api/Metrics/NoOpMeasureMetric.cs +++ b/src/OpenTelemetry.Api/Metrics/NoOpMeasureMetric.cs @@ -15,8 +15,6 @@ // using System.Collections.Generic; -using OpenTelemetry.Context; -using OpenTelemetry.Trace; namespace OpenTelemetry.Metrics { diff --git a/src/OpenTelemetry.Api/Trace/ProxyTracer.cs b/src/OpenTelemetry.Api/Trace/ProxyTracer.cs index 0b38e8390..7e866243a 100644 --- a/src/OpenTelemetry.Api/Trace/ProxyTracer.cs +++ b/src/OpenTelemetry.Api/Trace/ProxyTracer.cs @@ -18,7 +18,6 @@ using System; using System.Collections.Generic; using System.Diagnostics; using System.Threading; -using OpenTelemetry.Context.Propagation; namespace OpenTelemetry.Trace { diff --git a/src/OpenTelemetry.Exporter.Jaeger/IJaegerUdpBatcher.cs b/src/OpenTelemetry.Exporter.Jaeger/IJaegerUdpBatcher.cs index c336c2299..548bf7b92 100644 --- a/src/OpenTelemetry.Exporter.Jaeger/IJaegerUdpBatcher.cs +++ b/src/OpenTelemetry.Exporter.Jaeger/IJaegerUdpBatcher.cs @@ -17,7 +17,6 @@ using System; using System.Threading; using System.Threading.Tasks; using OpenTelemetry.Exporter.Jaeger.Implementation; -using OpenTelemetry.Trace.Export; namespace OpenTelemetry.Exporter.Jaeger { diff --git a/src/OpenTelemetry.Exporter.Prometheus/PrometheusExporter.cs b/src/OpenTelemetry.Exporter.Prometheus/PrometheusExporter.cs index 3ea6edf46..00e9f6071 100644 --- a/src/OpenTelemetry.Exporter.Prometheus/PrometheusExporter.cs +++ b/src/OpenTelemetry.Exporter.Prometheus/PrometheusExporter.cs @@ -15,7 +15,6 @@ // using System.Collections.Generic; -using System.Linq; using System.Threading; using System.Threading.Tasks; using OpenTelemetry.Metrics.Export; diff --git a/src/OpenTelemetry.Exporter.Prometheus/PrometheusExporterMetricsHttpServer.cs b/src/OpenTelemetry.Exporter.Prometheus/PrometheusExporterMetricsHttpServer.cs index 6965f8c0f..fb55c7bed 100644 --- a/src/OpenTelemetry.Exporter.Prometheus/PrometheusExporterMetricsHttpServer.cs +++ b/src/OpenTelemetry.Exporter.Prometheus/PrometheusExporterMetricsHttpServer.cs @@ -20,7 +20,6 @@ using System.Net; using System.Threading; using System.Threading.Tasks; using OpenTelemetry.Exporter.Prometheus.Implementation; -using OpenTelemetry.Metrics.Export; namespace OpenTelemetry.Exporter.Prometheus { diff --git a/src/OpenTelemetry.Exporter.ZPages/Implementation/ZPagesSpanInformation.cs b/src/OpenTelemetry.Exporter.ZPages/Implementation/ZPagesSpanInformation.cs index 6c37781d0..2df94955b 100644 --- a/src/OpenTelemetry.Exporter.ZPages/Implementation/ZPagesSpanInformation.cs +++ b/src/OpenTelemetry.Exporter.ZPages/Implementation/ZPagesSpanInformation.cs @@ -15,9 +15,6 @@ // using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading; using OpenTelemetry.Trace.Export; namespace OpenTelemetry.Exporter.ZPages.Implementation diff --git a/src/OpenTelemetry.Exporter.ZPages/ZPagesExporter.cs b/src/OpenTelemetry.Exporter.ZPages/ZPagesExporter.cs index 072adbda4..3778b12da 100644 --- a/src/OpenTelemetry.Exporter.ZPages/ZPagesExporter.cs +++ b/src/OpenTelemetry.Exporter.ZPages/ZPagesExporter.cs @@ -14,7 +14,6 @@ // limitations under the License. // -using System; using System.Collections.Generic; using System.Linq; using System.Threading; diff --git a/src/OpenTelemetry.Exporter.ZPages/ZPagesExporterStatsHttpServer.cs b/src/OpenTelemetry.Exporter.ZPages/ZPagesExporterStatsHttpServer.cs index 37e37fb19..7a8f95cd8 100644 --- a/src/OpenTelemetry.Exporter.ZPages/ZPagesExporterStatsHttpServer.cs +++ b/src/OpenTelemetry.Exporter.ZPages/ZPagesExporterStatsHttpServer.cs @@ -16,10 +16,8 @@ using System; using System.Collections.Concurrent; -using System.Collections.Generic; using System.IO; using System.Net; -using System.Text; using System.Threading; using System.Threading.Tasks; using OpenTelemetry.Exporter.ZPages.Implementation; diff --git a/src/OpenTelemetry.Exporter.ZPages/ZPagesSpanProcessor.cs b/src/OpenTelemetry.Exporter.ZPages/ZPagesSpanProcessor.cs index 941774422..ac2074849 100644 --- a/src/OpenTelemetry.Exporter.ZPages/ZPagesSpanProcessor.cs +++ b/src/OpenTelemetry.Exporter.ZPages/ZPagesSpanProcessor.cs @@ -15,13 +15,10 @@ // using System; -using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; -using System.Timers; using OpenTelemetry.Exporter.ZPages.Implementation; using OpenTelemetry.Trace.Export; -using Timer = System.Timers.Timer; namespace OpenTelemetry.Exporter.ZPages { diff --git a/src/OpenTelemetry/Context/AsyncLocalDistributedContextCarrier.cs b/src/OpenTelemetry/Context/AsyncLocalDistributedContextCarrier.cs index 4da003c6d..315dd3f73 100644 --- a/src/OpenTelemetry/Context/AsyncLocalDistributedContextCarrier.cs +++ b/src/OpenTelemetry/Context/AsyncLocalDistributedContextCarrier.cs @@ -21,7 +21,6 @@ using System.Reflection; using System.Runtime.Remoting.Messaging; #endif using System.Threading; -using System.Threading.Tasks; namespace OpenTelemetry.Context { diff --git a/src/OpenTelemetry/Internal/OpenTelemetrySdkEventSource.cs b/src/OpenTelemetry/Internal/OpenTelemetrySdkEventSource.cs index e88dd3250..5b8120687 100644 --- a/src/OpenTelemetry/Internal/OpenTelemetrySdkEventSource.cs +++ b/src/OpenTelemetry/Internal/OpenTelemetrySdkEventSource.cs @@ -18,7 +18,6 @@ using System; using System.Diagnostics.Tracing; using System.Globalization; using System.Threading; -using OpenTelemetry.Metrics.Export; using OpenTelemetry.Trace.Export; namespace OpenTelemetry.Internal diff --git a/src/OpenTelemetry/Metrics/Aggregators/DoubleCounterSumAggregator.cs b/src/OpenTelemetry/Metrics/Aggregators/DoubleCounterSumAggregator.cs index a73bcdae5..f667ca6c5 100644 --- a/src/OpenTelemetry/Metrics/Aggregators/DoubleCounterSumAggregator.cs +++ b/src/OpenTelemetry/Metrics/Aggregators/DoubleCounterSumAggregator.cs @@ -15,7 +15,6 @@ // using System; -using System.Runtime.CompilerServices; using System.Threading; using OpenTelemetry.Metrics.Export; diff --git a/src/OpenTelemetry/Metrics/Aggregators/Int64CounterSumAggregator.cs b/src/OpenTelemetry/Metrics/Aggregators/Int64CounterSumAggregator.cs index 30b03b2e8..b39c98c6b 100644 --- a/src/OpenTelemetry/Metrics/Aggregators/Int64CounterSumAggregator.cs +++ b/src/OpenTelemetry/Metrics/Aggregators/Int64CounterSumAggregator.cs @@ -15,7 +15,6 @@ // using System; -using System.Runtime.CompilerServices; using System.Threading; using OpenTelemetry.Metrics.Export; diff --git a/src/OpenTelemetry/Metrics/CounterMetricSdkBase.cs b/src/OpenTelemetry/Metrics/CounterMetricSdkBase.cs index 4cc57c9be..bd85db38d 100644 --- a/src/OpenTelemetry/Metrics/CounterMetricSdkBase.cs +++ b/src/OpenTelemetry/Metrics/CounterMetricSdkBase.cs @@ -72,43 +72,43 @@ namespace OpenTelemetry.Metrics boundInstrument.Status = RecordStatus.UpdatePending; break; case RecordStatus.CandidateForRemoval: - { - // if boundInstrument is marked for removal, then take the - // lock to sync with Unbind() and re-add. As Collect() might have called Unbind(). - - /* - * If Unbind gets the lock first, then it'd have removed the record. - * But it gets added again by Bind() so no record is lost. - * If Bind method gets this lock first, it'd promote record to UpdatePending, so that - * Unbind will leave this record untouched. - - * Additional notes: - * This lock is never taken for bound instruments, and they offer the fastest performance. - * This lock is only taken for those labelsets which are marked CandidateForRemoval. - * It means the the 1st time a labelset is re-encountered after two Collect() has occured, - * this lock must be taken. Subsequent usage of this labelset before the next two Collect() - * will already have status promoted, and no lock is taken. - * In effect, the lock is only taken for those labelsets - * which was used once, then not used for two collect(), and then used within the subsequent - * Collect(). - * - * Its important to note that, for a brand new LabelSet being encountered for the 1st time, lock is not - * taken. Lock is taken only during the 1st re-appearance of a LabelSet after a Collect period. - * - */ - - lock (this.bindUnbindLock) { - boundInstrument.Status = RecordStatus.UpdatePending; + // if boundInstrument is marked for removal, then take the + // lock to sync with Unbind() and re-add. As Collect() might have called Unbind(). - if (!this.counterBoundInstruments.ContainsKey(labelset)) + /* + * If Unbind gets the lock first, then it'd have removed the record. + * But it gets added again by Bind() so no record is lost. + * If Bind method gets this lock first, it'd promote record to UpdatePending, so that + * Unbind will leave this record untouched. + + * Additional notes: + * This lock is never taken for bound instruments, and they offer the fastest performance. + * This lock is only taken for those labelsets which are marked CandidateForRemoval. + * It means the the 1st time a labelset is re-encountered after two Collect() has occured, + * this lock must be taken. Subsequent usage of this labelset before the next two Collect() + * will already have status promoted, and no lock is taken. + * In effect, the lock is only taken for those labelsets + * which was used once, then not used for two collect(), and then used within the subsequent + * Collect(). + * + * Its important to note that, for a brand new LabelSet being encountered for the 1st time, lock is not + * taken. Lock is taken only during the 1st re-appearance of a LabelSet after a Collect period. + * + */ + + lock (this.bindUnbindLock) { - this.counterBoundInstruments.Add(labelset, boundInstrument); - } - } + boundInstrument.Status = RecordStatus.UpdatePending; - break; - } + if (!this.counterBoundInstruments.ContainsKey(labelset)) + { + this.counterBoundInstruments.Add(labelset, boundInstrument); + } + } + + break; + } } return boundInstrument; diff --git a/src/OpenTelemetry/Metrics/Export/MetricExporter.cs b/src/OpenTelemetry/Metrics/Export/MetricExporter.cs index 913146644..5fc00e111 100644 --- a/src/OpenTelemetry/Metrics/Export/MetricExporter.cs +++ b/src/OpenTelemetry/Metrics/Export/MetricExporter.cs @@ -14,10 +14,7 @@ // limitations under the License. // -using System; using System.Collections.Generic; -using System.Linq; -using System.Text; using System.Threading; using System.Threading.Tasks; diff --git a/src/OpenTelemetry/Trace/Configuration/OpenTelemetryBuilder.cs b/src/OpenTelemetry/Trace/Configuration/OpenTelemetryBuilder.cs index ff6725053..33a7a5472 100644 --- a/src/OpenTelemetry/Trace/Configuration/OpenTelemetryBuilder.cs +++ b/src/OpenTelemetry/Trace/Configuration/OpenTelemetryBuilder.cs @@ -15,7 +15,6 @@ // using System; using System.Collections.Generic; -using OpenTelemetry.Resources; namespace OpenTelemetry.Trace.Configuration { diff --git a/src/OpenTelemetry/Trace/Configuration/TracerBuilder.cs b/src/OpenTelemetry/Trace/Configuration/TracerBuilder.cs index f695cf464..4a1fc7a70 100644 --- a/src/OpenTelemetry/Trace/Configuration/TracerBuilder.cs +++ b/src/OpenTelemetry/Trace/Configuration/TracerBuilder.cs @@ -15,7 +15,6 @@ // using System; using System.Collections.Generic; -using OpenTelemetry.Context.Propagation; using OpenTelemetry.Resources; namespace OpenTelemetry.Trace.Configuration diff --git a/src/OpenTelemetry/Trace/Configuration/TracerFactory.cs b/src/OpenTelemetry/Trace/Configuration/TracerFactory.cs index 568b71254..cebc27761 100644 --- a/src/OpenTelemetry/Trace/Configuration/TracerFactory.cs +++ b/src/OpenTelemetry/Trace/Configuration/TracerFactory.cs @@ -17,7 +17,6 @@ using System; using System.Collections.Generic; using System.Linq; -using OpenTelemetry.Context.Propagation; using OpenTelemetry.Resources; using OpenTelemetry.Trace.Export; using OpenTelemetry.Trace.Export.Internal; diff --git a/src/OpenTelemetry/Trace/Export/SimpleSpanProcessor.cs b/src/OpenTelemetry/Trace/Export/SimpleSpanProcessor.cs index 716b905ac..adda98eac 100644 --- a/src/OpenTelemetry/Trace/Export/SimpleSpanProcessor.cs +++ b/src/OpenTelemetry/Trace/Export/SimpleSpanProcessor.cs @@ -14,8 +14,6 @@ // limitations under the License. // using System; -using System.Collections.Generic; -using System.Linq; using System.Threading; using System.Threading.Tasks; using OpenTelemetry.Internal; diff --git a/test/OpenTelemetry.Exporter.Jaeger.Tests/Implementation/Intt128Test.cs b/test/OpenTelemetry.Exporter.Jaeger.Tests/Implementation/Int128Test.cs similarity index 94% rename from test/OpenTelemetry.Exporter.Jaeger.Tests/Implementation/Intt128Test.cs rename to test/OpenTelemetry.Exporter.Jaeger.Tests/Implementation/Int128Test.cs index b5ecb31b0..5e388914a 100644 --- a/test/OpenTelemetry.Exporter.Jaeger.Tests/Implementation/Intt128Test.cs +++ b/test/OpenTelemetry.Exporter.Jaeger.Tests/Implementation/Int128Test.cs @@ -1,4 +1,4 @@ -// +// // Copyright The OpenTelemetry Authors // // Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/test/OpenTelemetry.Exporter.Jaeger.Tests/Implementation/JaegerActivityConversionTest.cs b/test/OpenTelemetry.Exporter.Jaeger.Tests/Implementation/JaegerActivityConversionTest.cs index 7eb26a891..179f5ac7a 100644 --- a/test/OpenTelemetry.Exporter.Jaeger.Tests/Implementation/JaegerActivityConversionTest.cs +++ b/test/OpenTelemetry.Exporter.Jaeger.Tests/Implementation/JaegerActivityConversionTest.cs @@ -414,12 +414,12 @@ namespace OpenTelemetry.Exporter.Jaeger.Tests.Implementation var attributes = new Dictionary { - { "stringKey", "value"}, - { "longKey", 1L}, + { "stringKey", "value" }, + { "longKey", 1L }, { "longKey2", 1 }, - { "doubleKey", 1D}, - { "doubleKey2", 1F}, - { "boolKey", true}, + { "doubleKey", 1D }, + { "doubleKey2", 1F }, + { "boolKey", true }, }; if (additionalAttributes != null) { @@ -437,34 +437,39 @@ namespace OpenTelemetry.Exporter.Jaeger.Tests.Implementation new Dictionary { { "key", "value" }, - } - ), + }), new ActivityEvent( "Event2", eventTimestamp, new Dictionary { { "key", "value" }, - } - ), + }), }; var linkedSpanId = ActivitySpanId.CreateFromString("888915b6286b9c41".AsSpan()); var activitySource = new ActivitySource(nameof(CreateTestActivity)); + + var tags = setAttributes ? + attributes.Select(kvp => new KeyValuePair(kvp.Key, kvp.Value.ToString())) + : null; + var links = addLinks ? + new[] + { + new ActivityLink(new ActivityContext( + traceId, + linkedSpanId, + ActivityTraceFlags.Recorded)), + } + : null; + var activity = activitySource.StartActivity( "Name", kind, parentContext: new ActivityContext(traceId, parentSpanId, ActivityTraceFlags.Recorded), - tags: setAttributes ? - attributes.Select(kvp => new KeyValuePair(kvp.Key, kvp.Value.ToString())) - : null, - links: addLinks ? - new[] { new ActivityLink(new ActivityContext( - traceId, - linkedSpanId, - ActivityTraceFlags.Recorded)), } - : null, + tags, + links, startTime: startTimestamp); if (addEvents) diff --git a/test/OpenTelemetry.Exporter.Jaeger.Tests/Implementation/JaegerSpanConverterTest.cs b/test/OpenTelemetry.Exporter.Jaeger.Tests/Implementation/JaegerSpanConverterTest.cs index 06f4cd61d..6aa9f0565 100644 --- a/test/OpenTelemetry.Exporter.Jaeger.Tests/Implementation/JaegerSpanConverterTest.cs +++ b/test/OpenTelemetry.Exporter.Jaeger.Tests/Implementation/JaegerSpanConverterTest.cs @@ -14,7 +14,6 @@ // limitations under the License. // - using System; using System.Collections.Generic; using System.Diagnostics; @@ -199,7 +198,8 @@ namespace OpenTelemetry.Exporter.Jaeger.Tests.Implementation Assert.Equal(0x1, jaegerSpan.Flags); Assert.Equal(span.StartTimestamp.ToEpochMicroseconds(), jaegerSpan.StartTime); - Assert.Equal(span.EndTimestamp.ToEpochMicroseconds() + Assert.Equal( + span.EndTimestamp.ToEpochMicroseconds() - span.StartTimestamp.ToEpochMicroseconds(), jaegerSpan.Duration); var tags = jaegerSpan.Tags.ToArray(); @@ -251,7 +251,8 @@ namespace OpenTelemetry.Exporter.Jaeger.Tests.Implementation Assert.Equal(0x1, jaegerSpan.Flags); Assert.Equal(span.StartTimestamp.ToEpochMicroseconds(), jaegerSpan.StartTime); - Assert.Equal(span.EndTimestamp.ToEpochMicroseconds() + Assert.Equal( + span.EndTimestamp.ToEpochMicroseconds() - span.StartTimestamp.ToEpochMicroseconds(), jaegerSpan.Duration); var tags = jaegerSpan.Tags.ToArray(); @@ -423,12 +424,12 @@ namespace OpenTelemetry.Exporter.Jaeger.Tests.Implementation var attributes = new Dictionary { - { "stringKey", "value"}, - { "longKey", 1L}, + { "stringKey", "value" }, + { "longKey", 1L }, { "longKey2", 1 }, - { "doubleKey", 1D}, - { "doubleKey2", 1F}, - { "boolKey", true}, + { "doubleKey", 1D }, + { "doubleKey2", 1F }, + { "boolKey", true }, }; if (additionalAttributes != null) { @@ -446,19 +447,26 @@ namespace OpenTelemetry.Exporter.Jaeger.Tests.Implementation new Dictionary { { "key", "value" }, - } - ), + }), new Event( "Event2", eventTimestamp, new Dictionary { { "key", "value" }, - } - ), + }), }; var linkedSpanId = ActivitySpanId.CreateFromString("888915b6286b9c41".AsSpan()); + var links = addLinks + ? new[] + { + new Link(new SpanContext( + traceId, + linkedSpanId, + ActivityTraceFlags.Recorded)), + } + : null; return new SpanData( "Name", @@ -468,10 +476,7 @@ namespace OpenTelemetry.Exporter.Jaeger.Tests.Implementation startTimestamp, setAttributes ? attributes : null, addEvents ? events : null, - addLinks ? new[] { new Link(new SpanContext( - traceId, - linkedSpanId, - ActivityTraceFlags.Recorded)), } : null, + links, resource, Status.Ok, endTimestamp); diff --git a/test/OpenTelemetry.Exporter.Jaeger.Tests/Implementation/JaegerUdpBatcherTests.cs b/test/OpenTelemetry.Exporter.Jaeger.Tests/Implementation/JaegerUdpBatcherTests.cs index 57f53fb41..37d11721e 100644 --- a/test/OpenTelemetry.Exporter.Jaeger.Tests/Implementation/JaegerUdpBatcherTests.cs +++ b/test/OpenTelemetry.Exporter.Jaeger.Tests/Implementation/JaegerUdpBatcherTests.cs @@ -78,13 +78,13 @@ namespace OpenTelemetry.Exporter.Jaeger.Tests.Implementation // Assert Assert.Equal(2, batches.Count()); - var PrimaryBatch = batches.Where(b => b.Process.ServiceName == "TestService"); - Assert.Single(PrimaryBatch); - Assert.Equal(2, PrimaryBatch.First().SpanMessages.Count()); + var primaryBatch = batches.Where(b => b.Process.ServiceName == "TestService"); + Assert.Single(primaryBatch); + Assert.Equal(2, primaryBatch.First().SpanMessages.Count()); - var MySQLBatch = batches.Where(b => b.Process.ServiceName == "MySQL"); - Assert.Single(MySQLBatch); - Assert.Single(MySQLBatch.First().SpanMessages); + var mySQLBatch = batches.Where(b => b.Process.ServiceName == "MySQL"); + Assert.Single(mySQLBatch); + Assert.Single(mySQLBatch.First().SpanMessages); } [Fact] @@ -150,12 +150,12 @@ namespace OpenTelemetry.Exporter.Jaeger.Tests.Implementation var parentSpanId = ActivitySpanId.CreateFromBytes(new byte[] { 12, 23, 34, 45, 56, 67, 78, 89 }); var attributes = new Dictionary { - { "stringKey", "value"}, - { "longKey", 1L}, + { "stringKey", "value" }, + { "longKey", 1L }, { "longKey2", 1 }, - { "doubleKey", 1D}, - { "doubleKey2", 1F}, - { "boolKey", true}, + { "doubleKey", 1D }, + { "doubleKey2", 1F }, + { "boolKey", true }, }; var events = new List { @@ -165,16 +165,14 @@ namespace OpenTelemetry.Exporter.Jaeger.Tests.Implementation new Dictionary { { "key", "value" }, - } - ), + }), new Event( "Event2", eventTimestamp, new Dictionary { { "key", "value" }, - } - ), + }), }; var linkedSpanId = ActivitySpanId.CreateFromString("888915b6286b9c41".AsSpan()); diff --git a/test/OpenTelemetry.Exporter.Jaeger.Tests/Implementation/ThriftUdpClientTransportTests.cs b/test/OpenTelemetry.Exporter.Jaeger.Tests/Implementation/ThriftUdpClientTransportTests.cs index c11325c4d..7db00736a 100644 --- a/test/OpenTelemetry.Exporter.Jaeger.Tests/Implementation/ThriftUdpClientTransportTests.cs +++ b/test/OpenTelemetry.Exporter.Jaeger.Tests/Implementation/ThriftUdpClientTransportTests.cs @@ -26,8 +26,8 @@ namespace OpenTelemetry.Exporter.Jaeger.Tests.Implementation { public class ThriftUdpClientTransportTests : IDisposable { - private MemoryStream testingMemoryStream = new MemoryStream(); private readonly Mock mockClient = new Mock(); + private MemoryStream testingMemoryStream = new MemoryStream(); public void Dispose() { diff --git a/test/OpenTelemetry.Exporter.Jaeger.Tests/JaegerTraceExporterTests.cs b/test/OpenTelemetry.Exporter.Jaeger.Tests/JaegerTraceExporterTests.cs index ee54bdc28..b9f2cd148 100644 --- a/test/OpenTelemetry.Exporter.Jaeger.Tests/JaegerTraceExporterTests.cs +++ b/test/OpenTelemetry.Exporter.Jaeger.Tests/JaegerTraceExporterTests.cs @@ -1,4 +1,4 @@ -// +// // Copyright The OpenTelemetry Authors // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,7 +14,6 @@ // limitations under the License. // using System.Collections.Generic; -using System.Linq; using OpenTelemetry.Exporter.Jaeger.Implementation; using OpenTelemetry.Resources; using Xunit; diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/ActivityExtensionsTest.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/ActivityExtensionsTest.cs index 25f4d26eb..c7966de18 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/ActivityExtensionsTest.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/ActivityExtensionsTest.cs @@ -1,4 +1,4 @@ -// +// // Copyright The OpenTelemetry Authors // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -18,16 +18,12 @@ using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; - using Google.Protobuf.Collections; - using OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation; - +using Xunit; using OtlpCommon = Opentelemetry.Proto.Common.V1; using OtlpTrace = Opentelemetry.Proto.Trace.V1; -using Xunit; - namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests { public class ActivityExtensionsTest @@ -50,8 +46,8 @@ namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests [Fact] public void ToOtlpResourceSpansTest() { - var evenTags = new []{ new KeyValuePair("k0", "v0") }; - var oddTags = new []{ new KeyValuePair("k1", "v1") }; + var evenTags = new[] { new KeyValuePair("k0", "v0") }; + var oddTags = new[] { new KeyValuePair("k1", "v1") }; var sources = new[] { new ActivitySource("even", "2.4.6"), @@ -82,7 +78,7 @@ namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests foreach (var instrumentationLibrarySpans in otlpResourceSpans.First().InstrumentationLibrarySpans) { - Assert.Equal(numOfSpans/2, instrumentationLibrarySpans.Spans.Count); + Assert.Equal(numOfSpans / 2, instrumentationLibrarySpans.Spans.Count); Assert.NotNull(instrumentationLibrarySpans.InstrumentationLibrary); var expectedSpanNames = new List(); @@ -155,7 +151,7 @@ namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests var expectedStartTimeUnixNano = 100 * expectedUnixTimeTicks; Assert.Equal(expectedStartTimeUnixNano, otlpSpan.StartTimeUnixNano); - var expectedEndTimeUnixNano = expectedStartTimeUnixNano + duration.TotalMilliseconds * 1_000_000; + var expectedEndTimeUnixNano = expectedStartTimeUnixNano + (duration.TotalMilliseconds * 1_000_000); Assert.Equal(expectedEndTimeUnixNano, otlpSpan.EndTimeUnixNano); var childLinks = new List { new ActivityLink(rootActivity.Context, attributes) }; @@ -226,7 +222,7 @@ namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests switch (originalValue) { case string s: - Assert.Equal(akv.StringValue, s); + Assert.Equal(akv.StringValue, s); break; case bool b: Assert.Equal(akv.BoolValue, b); diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/SpanDataExtensionsTest.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/SpanDataExtensionsTest.cs index bae089c37..69ecad786 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/SpanDataExtensionsTest.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/SpanDataExtensionsTest.cs @@ -1,4 +1,4 @@ -// +// // Copyright The OpenTelemetry Authors // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -17,21 +17,17 @@ using System; using System.Collections.Generic; using System.Linq; - using Google.Protobuf.Collections; using Moq; - -using OpenTelemetry.Trace.Configuration; -using OpenTelemetry.Trace; -using OpenTelemetry.Trace.Export; - using OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation; using OpenTelemetry.Resources; +using OpenTelemetry.Trace; +using OpenTelemetry.Trace.Configuration; +using OpenTelemetry.Trace.Export; +using Xunit; using OtlpCommon = Opentelemetry.Proto.Common.V1; using OtlpTrace = Opentelemetry.Proto.Trace.V1; -using Xunit; - namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests { public class SpanDataExtensionsTest @@ -41,8 +37,8 @@ namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests { var spanProcessor = new Mock(); - var evenResource = new Resource(new []{ new KeyValuePair("k0", "v0") }); - var oddResource = new Resource(new []{ new KeyValuePair("k1", "v1") }); + var evenResource = new Resource(new[] { new KeyValuePair("k0", "v0") }); + var oddResource = new Resource(new[] { new KeyValuePair("k1", "v1") }); var tracers = new[] { TracerFactory.Create(b => b.SetResource(evenResource) @@ -74,7 +70,7 @@ namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests var spanDataList = new List(); var invocations = spanProcessor.Invocations; - for (var i = 0; i < invocations.Count; i += 2) // Just want one of the OnStart/OnEnd pair. + for (var i = 0; i < invocations.Count; i += 2 /* Just want one of the OnStart/OnEnd pair. */) { spanDataList.Add((SpanData)invocations[i].Arguments[0]); } @@ -90,7 +86,7 @@ namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests foreach (var resourceSpans in otlpResourceSpans) { Assert.Single(resourceSpans.InstrumentationLibrarySpans); - Assert.Equal(numOfSpans/2, resourceSpans.InstrumentationLibrarySpans[0].Spans.Count); + Assert.Equal(numOfSpans / 2, resourceSpans.InstrumentationLibrarySpans[0].Spans.Count); Assert.NotNull(resourceSpans.Resource); var expectedSpanNames = new List(); @@ -130,7 +126,7 @@ namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests "root", default, SpanKind.Producer, - new Status(), + default(Status), startTimestamp, duration, attributes); @@ -153,11 +149,11 @@ namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests var expectedStartTimeUnixNano = 100 * expectedUnixTimeTicks; Assert.Equal(expectedStartTimeUnixNano, otlpSpan.StartTimeUnixNano); - var expectedEndTimeUnixNano = expectedStartTimeUnixNano + duration.TotalMilliseconds * 1_000_000; + var expectedEndTimeUnixNano = expectedStartTimeUnixNano + (duration.TotalMilliseconds * 1_000_000); Assert.Equal(expectedEndTimeUnixNano, otlpSpan.EndTimeUnixNano); - var childEvents = new [] { new Event("e0"), new Event("e1", attributes) }; - var childLinks = new [] { new Link(rootSpan.Context, attributes) }; + var childEvents = new[] { new Event("e0"), new Event("e1", attributes) }; + var childLinks = new[] { new Link(rootSpan.Context, attributes) }; var childSpan = CreateSpanData( "child", rootSpan.Context, @@ -186,6 +182,7 @@ namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests Assert.Equal(childEvents[i].Name, otlpSpan.Events[i].Name); AssertOtlpAttributes(childEvents[i].Attributes, otlpSpan.Events[i].Attributes); } + Assert.Equal(childLinks.Length, otlpSpan.Links.Count); for (var i = 0; i < childLinks.Length; i++) { @@ -210,7 +207,7 @@ namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests switch (originalValue) { case string s: - Assert.Equal(akv.StringValue, s); + Assert.Equal(akv.StringValue, s); break; case bool b: Assert.Equal(akv.BoolValue, b); diff --git a/test/OpenTelemetry.Exporter.Prometheus.Tests/PrometheusExporterTests.cs b/test/OpenTelemetry.Exporter.Prometheus.Tests/PrometheusExporterTests.cs index 0bb96aaba..9e7f83d9d 100644 --- a/test/OpenTelemetry.Exporter.Prometheus.Tests/PrometheusExporterTests.cs +++ b/test/OpenTelemetry.Exporter.Prometheus.Tests/PrometheusExporterTests.cs @@ -32,9 +32,10 @@ namespace OpenTelemetry.Exporter.Prometheus.Tests { public class PrometheusExporterTests { + private const int MetricPushIntervalMsec = 100; + private const int WaitDuration = MetricPushIntervalMsec + 100; + private readonly ITestOutputHelper output; - private const int metricPushIntervalMsec = 100; - private const int waitDuration = metricPushIntervalMsec + 100; public PrometheusExporterTests(ITestOutputHelper output) { @@ -56,7 +57,7 @@ namespace OpenTelemetry.Exporter.Prometheus.Tests } finally { - await Task.Delay(waitDuration); + await Task.Delay(WaitDuration); var client = new HttpClient(); var response = await client.GetAsync("http://localhost:9184/metrics/"); @@ -83,7 +84,7 @@ namespace OpenTelemetry.Exporter.Prometheus.Tests .ConfigureServices(services => { services.AddSingleton(promOptions); - services.AddSingleton(promExporter); //Temporary till we figure out metrics configuration + services.AddSingleton(promExporter); // Temporary till we figure out metrics configuration }); var server = new TestServer(builder); @@ -98,7 +99,7 @@ namespace OpenTelemetry.Exporter.Prometheus.Tests var response = await client.GetAsync("/foo"); Assert.Equal(HttpStatusCode.NotFound, response.StatusCode); - await Task.Delay(waitDuration); + await Task.Delay(WaitDuration); response = await client.GetAsync("/metrics"); Assert.Equal(HttpStatusCode.OK, response.StatusCode); var responseText = await response.Content.ReadAsStringAsync(); @@ -113,7 +114,7 @@ namespace OpenTelemetry.Exporter.Prometheus.Tests { mb.SetMetricProcessor(simpleProcessor); mb.SetMetricExporter(exporter); - mb.SetMetricPushInterval(TimeSpan.FromMilliseconds(metricPushIntervalMsec)); + mb.SetMetricPushInterval(TimeSpan.FromMilliseconds(MetricPushIntervalMsec)); }).GetMeter("library1"); var testCounter = meter.CreateInt64Counter("testCounter"); @@ -154,12 +155,16 @@ namespace OpenTelemetry.Exporter.Prometheus.Tests // Validate measure. Assert.Contains("# TYPE testMeasure summary", responseText); + // sum is 6150 = 10 * (10+100+5+500) Assert.Contains("testMeasure_sum{dim1=\"value1\"} 6150", responseText); + // count is 10 * 4 Assert.Contains("testMeasure_count{dim1=\"value1\"} 40", responseText); + // Min is 5 Assert.Contains("testMeasure{dim1=\"value1\",quantile=\"0\"} 5", responseText); + // Max is 500 Assert.Contains("testMeasure{dim1=\"value1\",quantile=\"1\"} 500", responseText); diff --git a/test/OpenTelemetry.Exporter.Zipkin.Tests/Implementation/ZipkinSpanConverterTests.cs b/test/OpenTelemetry.Exporter.Zipkin.Tests/Implementation/ZipkinTraceExporterRemoteEndpointTests.cs similarity index 89% rename from test/OpenTelemetry.Exporter.Zipkin.Tests/Implementation/ZipkinSpanConverterTests.cs rename to test/OpenTelemetry.Exporter.Zipkin.Tests/Implementation/ZipkinTraceExporterRemoteEndpointTests.cs index 51345f9a1..76cafb61a 100644 --- a/test/OpenTelemetry.Exporter.Zipkin.Tests/Implementation/ZipkinSpanConverterTests.cs +++ b/test/OpenTelemetry.Exporter.Zipkin.Tests/Implementation/ZipkinTraceExporterRemoteEndpointTests.cs @@ -1,4 +1,4 @@ -// +// // Copyright The OpenTelemetry Authors // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -91,12 +91,12 @@ namespace OpenTelemetry.Exporter.Zipkin.Tests.Implementation var attributes = new Dictionary { - { "stringKey", "value"}, - { "longKey", 1L}, + { "stringKey", "value" }, + { "longKey", 1L }, { "longKey2", 1 }, - { "doubleKey", 1D}, - { "doubleKey2", 1F}, - { "boolKey", true}, + { "doubleKey", 1D }, + { "doubleKey2", 1F }, + { "boolKey", true }, }; if (additionalAttributes != null) { @@ -114,20 +114,26 @@ namespace OpenTelemetry.Exporter.Zipkin.Tests.Implementation new Dictionary { { "key", "value" }, - } - ), + }), new Event( "Event2", eventTimestamp, new Dictionary { { "key", "value" }, - } - ), + }), }; var linkedSpanId = ActivitySpanId.CreateFromString("888915b6286b9c41".AsSpan()); - + var links = addLinks + ? new[] + { + new Link(new SpanContext( + traceId, + linkedSpanId, + ActivityTraceFlags.Recorded)), + } + : null; return new SpanData( "Name", new SpanContext(traceId, spanId, ActivityTraceFlags.Recorded), @@ -136,10 +142,7 @@ namespace OpenTelemetry.Exporter.Zipkin.Tests.Implementation startTimestamp, setAttributes ? attributes : null, addEvents ? events : null, - addLinks ? new[] { new Link(new SpanContext( - traceId, - linkedSpanId, - ActivityTraceFlags.Recorded)), } : null, + links, null, Status.Ok, endTimestamp); diff --git a/test/OpenTelemetry.Exporter.Zipkin.Tests/ZipkinTraceExporterTests.cs b/test/OpenTelemetry.Exporter.Zipkin.Tests/ZipkinTraceExporterTests.cs index 13805ba06..abeea418e 100644 --- a/test/OpenTelemetry.Exporter.Zipkin.Tests/ZipkinTraceExporterTests.cs +++ b/test/OpenTelemetry.Exporter.Zipkin.Tests/ZipkinTraceExporterTests.cs @@ -21,9 +21,9 @@ using System.Net; using System.Text; using System.Threading; using System.Threading.Tasks; -using OpenTelemetry.Internal.Test; using OpenTelemetry.Exporter.Zipkin.Implementation; using OpenTelemetry.Exporter.Zipkin.Tests.Implementation; +using OpenTelemetry.Internal.Test; using OpenTelemetry.Trace.Export; using Xunit; @@ -89,9 +89,14 @@ namespace OpenTelemetry.Exporter.Zipkin.Tests StringBuilder ipInformation = new StringBuilder(); if (!string.IsNullOrEmpty(exporter.LocalEndpoint.Ipv4)) + { ipInformation.Append($@",""ipv4"":""{exporter.LocalEndpoint.Ipv4}"""); + } + if (!string.IsNullOrEmpty(exporter.LocalEndpoint.Ipv6)) + { ipInformation.Append($@",""ipv6"":""{exporter.LocalEndpoint.Ipv6}"""); + } Assert.Equal( $@"[{{""traceId"":""e8ea7e9ac72de94e91fabc613f9686b2"",""name"":""Name"",""parentId"":""{ZipkinConversionExtensions.EncodeSpanId(span.ParentSpanId)}"",""id"":""{ZipkinConversionExtensions.EncodeSpanId(context.SpanId)}"",""kind"":""CLIENT"",""timestamp"":{timestamp},""duration"":60000000,""localEndpoint"":{{""serviceName"":""Open Telemetry Exporter""{ipInformation}}},""annotations"":[{{""timestamp"":{timestamp},""value"":""Event1""}},{{""timestamp"":{timestamp},""value"":""Event2""}}],""tags"":{{""stringKey"":""value"",""longKey"":""1"",""longKey2"":""1"",""doubleKey"":""1"",""doubleKey2"":""1"",""boolKey"":""True"",""ot.status_code"":""Ok""}}}}]", diff --git a/test/OpenTelemetry.Extensions.Hosting.Tests/HostingIntegrationTests.cs b/test/OpenTelemetry.Extensions.Hosting.Tests/HostingIntegrationTests.cs index 666fcded7..c62139591 100644 --- a/test/OpenTelemetry.Extensions.Hosting.Tests/HostingIntegrationTests.cs +++ b/test/OpenTelemetry.Extensions.Hosting.Tests/HostingIntegrationTests.cs @@ -1,4 +1,4 @@ -// +// // Copyright The OpenTelemetry Authors // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,16 +14,16 @@ // limitations under the License. // +using System; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using OpenTelemetry.Trace; +using OpenTelemetry.Trace.Configuration; +using Xunit; + namespace OpenTelemetry.Extensions.Hosting { - using System; - using System.Threading.Tasks; - using Microsoft.Extensions.DependencyInjection; - using Microsoft.Extensions.Hosting; - using OpenTelemetry.Trace; - using OpenTelemetry.Trace.Configuration; - using Xunit; - public class HostingIntegrationTests { [Fact] @@ -116,7 +116,7 @@ namespace OpenTelemetry.Extensions.Hosting public void Dispose() { - Disposed = true; + this.Disposed = true; } } } diff --git a/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/BasicTests.cs b/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/BasicTests.cs index 164b99d8e..4e0ecc471 100644 --- a/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/BasicTests.cs +++ b/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/BasicTests.cs @@ -14,24 +14,24 @@ // limitations under the License. // -using OpenTelemetry.Trace.Configuration; -using Xunit; -using Microsoft.AspNetCore.Mvc.Testing; -using System.Threading.Tasks; -using Microsoft.Extensions.DependencyInjection; -using OpenTelemetry.Trace; -using OpenTelemetry.Trace.Export; -using Moq; -using Microsoft.AspNetCore.TestHost; using System; using System.Collections.Generic; -using System.Threading; using System.Diagnostics; using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc.Testing; +using Microsoft.AspNetCore.TestHost; +using Microsoft.Extensions.DependencyInjection; +using Moq; using OpenTelemetry.Context.Propagation; +using OpenTelemetry.Trace; +using OpenTelemetry.Trace.Configuration; +using OpenTelemetry.Trace.Export; using OpenTelemetry.Trace.Samplers; using TestApp.AspNetCore._3._1; +using Xunit; namespace OpenTelemetry.Instrumentation.AspNetCore.Tests { @@ -74,7 +74,6 @@ namespace OpenTelemetry.Instrumentation.AspNetCore.Tests builder.ConfigureTestServices(ConfigureTestServices)) .CreateClient()) { - // Act var response = await client.GetAsync("/api/values"); @@ -178,7 +177,6 @@ namespace OpenTelemetry.Instrumentation.AspNetCore.Tests Assert.Equal(expectedSpanId, span.ParentSpanId); } - [Fact] public async Task FilterOutRequest() { @@ -198,6 +196,7 @@ namespace OpenTelemetry.Instrumentation.AspNetCore.Tests builder.ConfigureTestServices(ConfigureTestServices))) { using var client = testFactory.CreateClient(); + // Act var response1 = await client.GetAsync("/api/values"); var response2 = await client.GetAsync("/api/values/2"); @@ -222,7 +221,8 @@ namespace OpenTelemetry.Instrumentation.AspNetCore.Tests // We need to let End callback execute as it is executed AFTER response was returned. // In unit tests environment there may be a lot of parallel unit tests executed, so // giving some breezing room for the End callback to complete - Assert.True(SpinWait.SpinUntil(() => + Assert.True(SpinWait.SpinUntil( + () => { Thread.Sleep(10); return spanProcessor.Invocations.Count >= 2; diff --git a/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/IncomingRequestsCollectionsIsAccordingToTheSpecTests.cs b/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/IncomingRequestsCollectionsIsAccordingToTheSpecTests.cs index 67654305f..5dd43cf96 100644 --- a/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/IncomingRequestsCollectionsIsAccordingToTheSpecTests.cs +++ b/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/IncomingRequestsCollectionsIsAccordingToTheSpecTests.cs @@ -14,18 +14,18 @@ // limitations under the License. // -using OpenTelemetry.Trace.Configuration; -using Xunit; -using Microsoft.AspNetCore.Mvc.Testing; -using System.Threading.Tasks; -using Microsoft.Extensions.DependencyInjection; -using OpenTelemetry.Trace; -using OpenTelemetry.Trace.Export; -using Moq; -using Microsoft.AspNetCore.TestHost; using System; +using System.Threading.Tasks; using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc.Testing; +using Microsoft.AspNetCore.TestHost; +using Microsoft.Extensions.DependencyInjection; +using Moq; +using OpenTelemetry.Trace; +using OpenTelemetry.Trace.Configuration; +using OpenTelemetry.Trace.Export; using TestApp.AspNetCore._3._1; +using Xunit; namespace OpenTelemetry.Instrumentation.AspNetCore.Tests { @@ -37,18 +37,6 @@ namespace OpenTelemetry.Instrumentation.AspNetCore.Tests public IncomingRequestsCollectionsIsAccordingToTheSpecTests(WebApplicationFactory factory) { this.factory = factory; - - } - - public class TestCallbackMiddlewareImpl : CallbackMiddleware.CallbackMiddlewareImpl - { - - public override async Task ProcessAsync(HttpContext context) - { - context.Response.StatusCode = 503; - await context.Response.WriteAsync("empty"); - return false; - } } [Fact] @@ -69,7 +57,6 @@ namespace OpenTelemetry.Instrumentation.AspNetCore.Tests })) .CreateClient()) { - try { // Act @@ -88,7 +75,7 @@ namespace OpenTelemetry.Instrumentation.AspNetCore.Tests } // We need to let End callback execute as it is executed AFTER response was returned. - // In unit tests environment there may be a lot of parallel unit tests executed, so + // In unit tests environment there may be a lot of parallel unit tests executed, so // giving some breezing room for the End callback to complete await Task.Delay(TimeSpan.FromSeconds(1)); } @@ -101,5 +88,15 @@ namespace OpenTelemetry.Instrumentation.AspNetCore.Tests Assert.Equal("/api/values", span.Attributes.GetValue("http.path")); Assert.Equal(503L, span.Attributes.GetValue("http.status_code")); } + + public class TestCallbackMiddlewareImpl : CallbackMiddleware.CallbackMiddlewareImpl + { + public override async Task ProcessAsync(HttpContext context) + { + context.Response.StatusCode = 503; + await context.Response.WriteAsync("empty"); + return false; + } + } } } diff --git a/test/OpenTelemetry.Instrumentation.Dependencies.Tests/HttpClientTests.Basic.netcore31.cs b/test/OpenTelemetry.Instrumentation.Dependencies.Tests/HttpClientTests.Basic.netcore31.cs index 9593795ff..eae5d5772 100644 --- a/test/OpenTelemetry.Instrumentation.Dependencies.Tests/HttpClientTests.Basic.netcore31.cs +++ b/test/OpenTelemetry.Instrumentation.Dependencies.Tests/HttpClientTests.Basic.netcore31.cs @@ -14,18 +14,18 @@ // limitations under the License. // #if NETCOREAPP3_1 -using OpenTelemetry.Trace.Configuration; -using Moq; -using OpenTelemetry.Internal.Test; -using OpenTelemetry.Trace; -using OpenTelemetry.Trace.Export; using System; using System.Diagnostics; using System.Linq; using System.Net.Http; using System.Threading; using System.Threading.Tasks; +using Moq; using OpenTelemetry.Context.Propagation; +using OpenTelemetry.Internal.Test; +using OpenTelemetry.Trace; +using OpenTelemetry.Trace.Configuration; +using OpenTelemetry.Trace.Export; using Xunit; namespace OpenTelemetry.Instrumentation.Dependencies.Tests @@ -250,8 +250,8 @@ namespace OpenTelemetry.Instrumentation.Dependencies.Tests using var cts = new CancellationTokenSource(TimeSpan.FromMilliseconds(100)); try { - await c.PostAsync("https://dc.services.visualstudio.com/", new StringContent(""), cts.Token); - await c.PostAsync("https://localhost:9411/api/v2/spans", new StringContent(""), cts.Token); + await c.PostAsync("https://dc.services.visualstudio.com/", new StringContent(string.Empty), cts.Token); + await c.PostAsync("https://localhost:9411/api/v2/spans", new StringContent(string.Empty), cts.Token); } catch { diff --git a/test/OpenTelemetry.Instrumentation.Dependencies.Tests/HttpClientTests.netcore31.cs b/test/OpenTelemetry.Instrumentation.Dependencies.Tests/HttpClientTests.netcore31.cs index 9a25928cc..faa90af1c 100644 --- a/test/OpenTelemetry.Instrumentation.Dependencies.Tests/HttpClientTests.netcore31.cs +++ b/test/OpenTelemetry.Instrumentation.Dependencies.Tests/HttpClientTests.netcore31.cs @@ -1,4 +1,4 @@ -// +// // Copyright The OpenTelemetry Authors // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,12 +14,6 @@ // limitations under the License. // #if NETCOREAPP3_1 -using Moq; -using Newtonsoft.Json; -using OpenTelemetry.Internal.Test; -using OpenTelemetry.Trace; -using OpenTelemetry.Trace.Configuration; -using OpenTelemetry.Trace.Export; using System; using System.Collections.Generic; using System.IO; @@ -27,6 +21,12 @@ using System.Linq; using System.Net.Http; using System.Reflection; using System.Threading.Tasks; +using Moq; +using Newtonsoft.Json; +using OpenTelemetry.Internal.Test; +using OpenTelemetry.Trace; +using OpenTelemetry.Trace.Configuration; +using OpenTelemetry.Trace.Export; using Xunit; namespace OpenTelemetry.Instrumentation.Dependencies.Tests @@ -80,7 +80,7 @@ namespace OpenTelemetry.Instrumentation.Dependencies.Tests } catch (Exception) { - //test case can intentionally send request that will result in exception + // test case can intentionally send request that will result in exception } } @@ -92,28 +92,30 @@ namespace OpenTelemetry.Instrumentation.Dependencies.Tests var d = new Dictionary() { - { StatusCanonicalCode.Ok, "OK"}, - { StatusCanonicalCode.Cancelled, "CANCELLED"}, - { StatusCanonicalCode.Unknown, "UNKNOWN"}, - { StatusCanonicalCode.InvalidArgument, "INVALID_ARGUMENT"}, - { StatusCanonicalCode.DeadlineExceeded, "DEADLINE_EXCEEDED"}, - { StatusCanonicalCode.NotFound, "NOT_FOUND"}, - { StatusCanonicalCode.AlreadyExists, "ALREADY_EXISTS"}, - { StatusCanonicalCode.PermissionDenied, "PERMISSION_DENIED"}, - { StatusCanonicalCode.ResourceExhausted, "RESOURCE_EXHAUSTED"}, - { StatusCanonicalCode.FailedPrecondition, "FAILED_PRECONDITION"}, - { StatusCanonicalCode.Aborted, "ABORTED"}, - { StatusCanonicalCode.OutOfRange, "OUT_OF_RANGE"}, - { StatusCanonicalCode.Unimplemented, "UNIMPLEMENTED"}, - { StatusCanonicalCode.Internal, "INTERNAL"}, - { StatusCanonicalCode.Unavailable, "UNAVAILABLE"}, - { StatusCanonicalCode.DataLoss, "DATA_LOSS"}, - { StatusCanonicalCode.Unauthenticated, "UNAUTHENTICATED"}, + { StatusCanonicalCode.Ok, "OK" }, + { StatusCanonicalCode.Cancelled, "CANCELLED" }, + { StatusCanonicalCode.Unknown, "UNKNOWN" }, + { StatusCanonicalCode.InvalidArgument, "INVALID_ARGUMENT" }, + { StatusCanonicalCode.DeadlineExceeded, "DEADLINE_EXCEEDED" }, + { StatusCanonicalCode.NotFound, "NOT_FOUND" }, + { StatusCanonicalCode.AlreadyExists, "ALREADY_EXISTS" }, + { StatusCanonicalCode.PermissionDenied, "PERMISSION_DENIED" }, + { StatusCanonicalCode.ResourceExhausted, "RESOURCE_EXHAUSTED" }, + { StatusCanonicalCode.FailedPrecondition, "FAILED_PRECONDITION" }, + { StatusCanonicalCode.Aborted, "ABORTED" }, + { StatusCanonicalCode.OutOfRange, "OUT_OF_RANGE" }, + { StatusCanonicalCode.Unimplemented, "UNIMPLEMENTED" }, + { StatusCanonicalCode.Internal, "INTERNAL" }, + { StatusCanonicalCode.Unavailable, "UNAVAILABLE" }, + { StatusCanonicalCode.DataLoss, "DATA_LOSS" }, + { StatusCanonicalCode.Unauthenticated, "UNAUTHENTICATED" }, }; Assert.Equal(tc.SpanStatus, d[span.Status.CanonicalCode]); if (tc.SpanStatusHasDescription.HasValue) + { Assert.Equal(tc.SpanStatusHasDescription.Value, !string.IsNullOrEmpty(span.Status.Description)); + } var normalizedAttributes = span.Attributes.ToDictionary(x => x.Key, x => x.Value.ToString()); tc.SpanAttributes = tc.SpanAttributes.ToDictionary(x => x.Key, x => HttpTestData.NormalizeValues(x.Value, host, port)); @@ -146,7 +148,7 @@ namespace OpenTelemetry.Instrumentation.Dependencies.Tests ] "))); - var t = (Task)this.GetType().InvokeMember(nameof(HttpOutCallsAreCollectedSuccessfullyAsync), BindingFlags.InvokeMethod, null, this, HttpTestData.GetArgumentsFromTestCaseObject(input).First()); + var t = (Task)this.GetType().InvokeMember(nameof(this.HttpOutCallsAreCollectedSuccessfullyAsync), BindingFlags.InvokeMethod, null, this, HttpTestData.GetArgumentsFromTestCaseObject(input).First()); await t; } } diff --git a/test/OpenTelemetry.Instrumentation.Dependencies.Tests/HttpTestData.cs b/test/OpenTelemetry.Instrumentation.Dependencies.Tests/HttpTestData.cs index a82d67b28..1441d2f09 100644 --- a/test/OpenTelemetry.Instrumentation.Dependencies.Tests/HttpTestData.cs +++ b/test/OpenTelemetry.Instrumentation.Dependencies.Tests/HttpTestData.cs @@ -13,15 +13,44 @@ // See the License for the specific language governing permissions and // limitations under the License. // -using Newtonsoft.Json; using System.Collections.Generic; using System.IO; using System.Reflection; +using Newtonsoft.Json; namespace OpenTelemetry.Instrumentation.Dependencies.Tests { public static class HttpTestData { + public static IEnumerable ReadTestCases() + { + var assembly = Assembly.GetExecutingAssembly(); + var serializer = new JsonSerializer(); + var input = serializer.Deserialize(new JsonTextReader(new StreamReader(assembly.GetManifestResourceStream("OpenTelemetry.Instrumentation.Dependencies.Tests.http-out-test-cases.json")))); + + return GetArgumentsFromTestCaseObject(input); + } + + public static IEnumerable GetArgumentsFromTestCaseObject(IEnumerable input) + { + var result = new List(); + + foreach (var testCase in input) + { + result.Add(new object[] + { + testCase, + }); + } + + return result; + } + + public static string NormalizeValues(string value, string host, int port) + { + return value.Replace("{host}", host).Replace("{port}", port.ToString()); + } + public class HttpOutTestCase { public string Name { get; set; } @@ -46,33 +75,5 @@ namespace OpenTelemetry.Instrumentation.Dependencies.Tests public bool SetHttpFlavor { get; set; } } - - public static IEnumerable ReadTestCases() - { - var assembly = Assembly.GetExecutingAssembly(); - var serializer = new JsonSerializer(); - var input = serializer.Deserialize(new JsonTextReader(new StreamReader(assembly.GetManifestResourceStream("OpenTelemetry.Instrumentation.Dependencies.Tests.http-out-test-cases.json")))); - - return GetArgumentsFromTestCaseObject(input); - } - - public static IEnumerable GetArgumentsFromTestCaseObject(IEnumerable input) - { - var result = new List(); - - foreach (var testCase in input) - { - result.Add(new object[] { - testCase, - }); - } - - return result; - } - - public static string NormalizeValues(string value, string host, int port) - { - return value.Replace("{host}", host).Replace("{port}", port.ToString()); - } } } diff --git a/test/OpenTelemetry.Instrumentation.Dependencies.Tests/HttpWebRequestActivitySourceTests.net461.cs b/test/OpenTelemetry.Instrumentation.Dependencies.Tests/HttpWebRequestActivitySourceTests.net461.cs index 64a1365ec..63ee22a1a 100644 --- a/test/OpenTelemetry.Instrumentation.Dependencies.Tests/HttpWebRequestActivitySourceTests.net461.cs +++ b/test/OpenTelemetry.Instrumentation.Dependencies.Tests/HttpWebRequestActivitySourceTests.net461.cs @@ -15,8 +15,8 @@ // #if NET461 using System; -using System.Collections.Generic; using System.Collections.Concurrent; +using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; @@ -24,26 +24,25 @@ using System.Net; using System.Net.Http; using System.Threading; using System.Threading.Tasks; -using Xunit; - -using OpenTelemetry.Internal.Test; using OpenTelemetry.Instrumentation.Dependencies.Implementation; +using OpenTelemetry.Internal.Test; using OpenTelemetry.Trace; +using Xunit; namespace OpenTelemetry.Instrumentation.Dependencies.Tests { public class HttpWebRequestActivitySourceTests : IDisposable { - static HttpWebRequestActivitySourceTests() - { - GC.KeepAlive(HttpWebRequestActivitySource.Instance); - } - private readonly IDisposable testServer; private readonly string testServerHost; private readonly int testServerPort; private readonly string hostNameAndPort; + static HttpWebRequestActivitySourceTests() + { + GC.KeepAlive(HttpWebRequestActivitySource.Instance); + } + public HttpWebRequestActivitySourceTests() { Assert.Null(Activity.Current); @@ -88,6 +87,7 @@ namespace OpenTelemetry.Instrumentation.Dependencies.Tests { context.Response.StatusCode = 200; } + if (context.Response.StatusCode != 204) { using StreamWriter writeStream = new StreamWriter(context.Response.OutputStream); @@ -122,6 +122,7 @@ namespace OpenTelemetry.Instrumentation.Dependencies.Tests listenerFound = true; return true; } + return false; }, }; @@ -256,118 +257,136 @@ namespace OpenTelemetry.Instrumentation.Dependencies.Tests using var eventRecords = new ActivitySourceRecorder(); + // Send a random Http request to generate some events + var webRequest = (HttpWebRequest)WebRequest.Create(url); + + if (method == "POST") { - // Send a random Http request to generate some events - var webRequest = (HttpWebRequest)WebRequest.Create(url); + webRequest.Method = method; - if (method == "POST") + Stream stream = null; + switch (mode) { - webRequest.Method = method; - - Stream stream = null; - switch (mode) - { - case 0: - stream = webRequest.GetRequestStream(); - break; - case 1: - stream = await webRequest.GetRequestStreamAsync(); - break; - case 2: - { - object state = new object(); - using EventWaitHandle handle = new EventWaitHandle(false, EventResetMode.ManualReset); - IAsyncResult asyncResult = webRequest.BeginGetRequestStream(ar => + case 0: + stream = webRequest.GetRequestStream(); + break; + case 1: + stream = await webRequest.GetRequestStreamAsync(); + break; + case 2: + { + object state = new object(); + using EventWaitHandle handle = new EventWaitHandle(false, EventResetMode.ManualReset); + IAsyncResult asyncResult = webRequest.BeginGetRequestStream( + ar => { Assert.Equal(state, ar.AsyncState); handle.Set(); }, state); - stream = webRequest.EndGetRequestStream(asyncResult); - if (!handle.WaitOne(TimeSpan.FromSeconds(30))) - throw new InvalidOperationException(); - handle.Dispose(); - } - break; - case 3: + stream = webRequest.EndGetRequestStream(asyncResult); + if (!handle.WaitOne(TimeSpan.FromSeconds(30))) { - using EventWaitHandle handle = new EventWaitHandle(false, EventResetMode.ManualReset); - object state = new object(); - webRequest.BeginGetRequestStream(ar => + throw new InvalidOperationException(); + } + + handle.Dispose(); + } + + break; + case 3: + { + using EventWaitHandle handle = new EventWaitHandle(false, EventResetMode.ManualReset); + object state = new object(); + webRequest.BeginGetRequestStream( + ar => { stream = webRequest.EndGetRequestStream(ar); Assert.Equal(state, ar.AsyncState); handle.Set(); }, state); - if (!handle.WaitOne(TimeSpan.FromSeconds(30))) - throw new InvalidOperationException(); - handle.Dispose(); + if (!handle.WaitOne(TimeSpan.FromSeconds(30))) + { + throw new InvalidOperationException(); } - break; - default: - throw new NotSupportedException(); - } - Assert.NotNull(stream); + handle.Dispose(); + } - using StreamWriter writer = new StreamWriter(stream); - - writer.WriteLine("hello world"); + break; + default: + throw new NotSupportedException(); } - WebResponse webResponse = null; - switch (mode) - { - case 0: - webResponse = webRequest.GetResponse(); - break; - case 1: - webResponse = await webRequest.GetResponseAsync(); - break; - case 2: - { - object state = new object(); - using EventWaitHandle handle = new EventWaitHandle(false, EventResetMode.ManualReset); - IAsyncResult asyncResult = webRequest.BeginGetResponse(ar => + Assert.NotNull(stream); + + using StreamWriter writer = new StreamWriter(stream); + + writer.WriteLine("hello world"); + } + + WebResponse webResponse = null; + switch (mode) + { + case 0: + webResponse = webRequest.GetResponse(); + break; + case 1: + webResponse = await webRequest.GetResponseAsync(); + break; + case 2: + { + object state = new object(); + using EventWaitHandle handle = new EventWaitHandle(false, EventResetMode.ManualReset); + IAsyncResult asyncResult = webRequest.BeginGetResponse( + ar => { Assert.Equal(state, ar.AsyncState); handle.Set(); }, state); - webResponse = webRequest.EndGetResponse(asyncResult); - if (!handle.WaitOne(TimeSpan.FromSeconds(30))) - throw new InvalidOperationException(); - handle.Dispose(); - } - break; - case 3: + webResponse = webRequest.EndGetResponse(asyncResult); + if (!handle.WaitOne(TimeSpan.FromSeconds(30))) { - using EventWaitHandle handle = new EventWaitHandle(false, EventResetMode.ManualReset); - object state = new object(); - webRequest.BeginGetResponse(ar => + throw new InvalidOperationException(); + } + + handle.Dispose(); + } + + break; + case 3: + { + using EventWaitHandle handle = new EventWaitHandle(false, EventResetMode.ManualReset); + object state = new object(); + webRequest.BeginGetResponse( + ar => { webResponse = webRequest.EndGetResponse(ar); Assert.Equal(state, ar.AsyncState); handle.Set(); }, state); - if (!handle.WaitOne(TimeSpan.FromSeconds(30))) - throw new InvalidOperationException(); - handle.Dispose(); + if (!handle.WaitOne(TimeSpan.FromSeconds(30))) + { + throw new InvalidOperationException(); } - break; - default: - throw new NotSupportedException(); - } - Assert.NotNull(webResponse); + handle.Dispose(); + } - using StreamReader reader = new StreamReader(webResponse.GetResponseStream()); - - reader.ReadToEnd(); // Make sure response is not disposed. + break; + default: + throw new NotSupportedException(); } + Assert.NotNull(webResponse); + + using StreamReader reader = new StreamReader(webResponse.GetResponseStream()); + + reader.ReadToEnd(); // Make sure response is not disposed. + // We should have exactly one Start and one Stop event Assert.Equal(2, eventRecords.Records.Count); Assert.Equal(1, eventRecords.Records.Count(rec => rec.Key == "Start")); @@ -681,7 +700,6 @@ namespace OpenTelemetry.Instrumentation.Dependencies.Tests return method == "GET" ? client.GetAsync(url) : client.PostAsync(url, new StringContent("hello world")); - }); Assert.True(ex is HttpRequestException); } @@ -730,6 +748,7 @@ namespace OpenTelemetry.Instrumentation.Dependencies.Tests Assert.Contains("bad%2Fkey=value", correlationContext); Assert.Contains("goodkey=bad%2Fvalue", correlationContext); } + parentActivity.Stop(); } @@ -847,19 +866,6 @@ namespace OpenTelemetry.Instrumentation.Dependencies.Tests } } - private string BuildRequestUrl(bool useHttps = false, string path = "echo", string queryString = null) - { - return $"{(useHttps ? "https" : "http")}://{this.testServerHost}:{this.testServerPort}/{path}{(string.IsNullOrWhiteSpace(queryString) ? string.Empty : $"?{queryString}")}"; - } - - private void CleanUpActivity() - { - while (Activity.Current != null) - { - Activity.Current.Stop(); - } - } - private static (Activity, HttpWebRequest) AssertFirstEventWasStart(ActivitySourceRecorder eventRecords) { Assert.True(eventRecords.Records.TryDequeue(out KeyValuePair startEvent)); @@ -883,7 +889,10 @@ namespace OpenTelemetry.Instrumentation.Dependencies.Tests Assert.Equal("http", activity.Tags.FirstOrDefault(i => i.Key == SpanAttributeConstants.ComponentKey).Value); Assert.Equal(method, activity.Tags.FirstOrDefault(i => i.Key == SpanAttributeConstants.HttpMethodKey).Value); if (hostNameAndPort != null) + { Assert.Equal(hostNameAndPort, activity.Tags.FirstOrDefault(i => i.Key == SpanAttributeConstants.HttpHostKey).Value); + } + Assert.Equal(url, activity.Tags.FirstOrDefault(i => i.Key == SpanAttributeConstants.HttpUrlKey).Value); Assert.Equal("1.1", activity.Tags.FirstOrDefault(i => i.Key == SpanAttributeConstants.HttpFlavorKey).Value); } @@ -894,20 +903,34 @@ namespace OpenTelemetry.Instrumentation.Dependencies.Tests Assert.Equal(statusText, activity.Tags.FirstOrDefault(i => i.Key == SpanAttributeConstants.StatusDescriptionKey).Value); } + private string BuildRequestUrl(bool useHttps = false, string path = "echo", string queryString = null) + { + return $"{(useHttps ? "https" : "http")}://{this.testServerHost}:{this.testServerPort}/{path}{(string.IsNullOrWhiteSpace(queryString) ? string.Empty : $"?{queryString}")}"; + } + + private void CleanUpActivity() + { + while (Activity.Current != null) + { + Activity.Current.Stop(); + } + } + /// /// is a helper class for recording events. /// private class ActivitySourceRecorder : IDisposable { private readonly Action> onEvent; + private readonly ActivityListener activityListener; public ActivitySourceRecorder(Action> onEvent = null, ActivityDataRequest activityDataRequest = ActivityDataRequest.AllDataAndRecorded) { this.activityListener = new ActivityListener { ShouldListenTo = (activitySource) => activitySource.Name == HttpWebRequestActivitySource.ActivitySourceName, - ActivityStarted = ActivityStarted, - ActivityStopped = ActivityStopped, + ActivityStarted = this.ActivityStarted, + ActivityStopped = this.ActivityStopped, GetRequestedDataUsingContext = (ref ActivityCreationOptions options) => activityDataRequest, }; @@ -916,13 +939,13 @@ namespace OpenTelemetry.Instrumentation.Dependencies.Tests this.onEvent = onEvent; } + public ConcurrentQueue> Records { get; } = new ConcurrentQueue>(); + public void Dispose() { this.activityListener.Dispose(); } - public ConcurrentQueue> Records { get; } = new ConcurrentQueue>(); - public void ActivityStarted(Activity activity) => this.Record("Start", activity); public void ActivityStopped(Activity activity) => this.Record("Stop", activity); @@ -934,8 +957,6 @@ namespace OpenTelemetry.Instrumentation.Dependencies.Tests this.Records.Enqueue(record); this.onEvent?.Invoke(record); } - - private readonly ActivityListener activityListener; } } } diff --git a/test/OpenTelemetry.Instrumentation.Dependencies.Tests/HttpWebRequestTests.Basic.net461.cs b/test/OpenTelemetry.Instrumentation.Dependencies.Tests/HttpWebRequestTests.Basic.net461.cs index af4bcf452..81ae48ee0 100644 --- a/test/OpenTelemetry.Instrumentation.Dependencies.Tests/HttpWebRequestTests.Basic.net461.cs +++ b/test/OpenTelemetry.Instrumentation.Dependencies.Tests/HttpWebRequestTests.Basic.net461.cs @@ -22,11 +22,11 @@ using System.Net.Http; using System.Threading.Tasks; using Moq; using OpenTelemetry.Context.Propagation; +using OpenTelemetry.Instrumentation.Dependencies.Implementation; using OpenTelemetry.Internal.Test; using OpenTelemetry.Trace; using OpenTelemetry.Trace.Configuration; using OpenTelemetry.Trace.Export; -using OpenTelemetry.Instrumentation.Dependencies.Implementation; using Xunit; namespace OpenTelemetry.Instrumentation.Dependencies.Tests diff --git a/test/OpenTelemetry.Instrumentation.Dependencies.Tests/HttpWebRequestTests.net461.cs b/test/OpenTelemetry.Instrumentation.Dependencies.Tests/HttpWebRequestTests.net461.cs index fb626b232..0fcf47ece 100644 --- a/test/OpenTelemetry.Instrumentation.Dependencies.Tests/HttpWebRequestTests.net461.cs +++ b/test/OpenTelemetry.Instrumentation.Dependencies.Tests/HttpWebRequestTests.net461.cs @@ -78,7 +78,7 @@ namespace OpenTelemetry.Instrumentation.Dependencies.Tests } catch (Exception) { - //test case can intentionally send request that will result in exception + // test case can intentionally send request that will result in exception } Assert.Equal(2, activityProcessor.Invocations.Count); // begin and end was called @@ -89,23 +89,23 @@ namespace OpenTelemetry.Instrumentation.Dependencies.Tests var d = new Dictionary() { - { StatusCanonicalCode.Ok.ToString(), "OK"}, - { StatusCanonicalCode.Cancelled.ToString(), "CANCELLED"}, - { StatusCanonicalCode.Unknown.ToString(), "UNKNOWN"}, - { StatusCanonicalCode.InvalidArgument.ToString(), "INVALID_ARGUMENT"}, - { StatusCanonicalCode.DeadlineExceeded.ToString(), "DEADLINE_EXCEEDED"}, - { StatusCanonicalCode.NotFound.ToString(), "NOT_FOUND"}, - { StatusCanonicalCode.AlreadyExists.ToString(), "ALREADY_EXISTS"}, - { StatusCanonicalCode.PermissionDenied.ToString(), "PERMISSION_DENIED"}, - { StatusCanonicalCode.ResourceExhausted.ToString(), "RESOURCE_EXHAUSTED"}, - { StatusCanonicalCode.FailedPrecondition.ToString(), "FAILED_PRECONDITION"}, - { StatusCanonicalCode.Aborted.ToString(), "ABORTED"}, - { StatusCanonicalCode.OutOfRange.ToString(), "OUT_OF_RANGE"}, - { StatusCanonicalCode.Unimplemented.ToString(), "UNIMPLEMENTED"}, - { StatusCanonicalCode.Internal.ToString(), "INTERNAL"}, - { StatusCanonicalCode.Unavailable.ToString(), "UNAVAILABLE"}, - { StatusCanonicalCode.DataLoss.ToString(), "DATA_LOSS"}, - { StatusCanonicalCode.Unauthenticated.ToString(), "UNAUTHENTICATED"}, + { StatusCanonicalCode.Ok.ToString(), "OK" }, + { StatusCanonicalCode.Cancelled.ToString(), "CANCELLED" }, + { StatusCanonicalCode.Unknown.ToString(), "UNKNOWN" }, + { StatusCanonicalCode.InvalidArgument.ToString(), "INVALID_ARGUMENT" }, + { StatusCanonicalCode.DeadlineExceeded.ToString(), "DEADLINE_EXCEEDED" }, + { StatusCanonicalCode.NotFound.ToString(), "NOT_FOUND" }, + { StatusCanonicalCode.AlreadyExists.ToString(), "ALREADY_EXISTS" }, + { StatusCanonicalCode.PermissionDenied.ToString(), "PERMISSION_DENIED" }, + { StatusCanonicalCode.ResourceExhausted.ToString(), "RESOURCE_EXHAUSTED" }, + { StatusCanonicalCode.FailedPrecondition.ToString(), "FAILED_PRECONDITION" }, + { StatusCanonicalCode.Aborted.ToString(), "ABORTED" }, + { StatusCanonicalCode.OutOfRange.ToString(), "OUT_OF_RANGE" }, + { StatusCanonicalCode.Unimplemented.ToString(), "UNIMPLEMENTED" }, + { StatusCanonicalCode.Internal.ToString(), "INTERNAL" }, + { StatusCanonicalCode.Unavailable.ToString(), "UNAVAILABLE" }, + { StatusCanonicalCode.DataLoss.ToString(), "DATA_LOSS" }, + { StatusCanonicalCode.Unauthenticated.ToString(), "UNAUTHENTICATED" }, }; tc.SpanAttributes = tc.SpanAttributes.ToDictionary( @@ -113,7 +113,10 @@ namespace OpenTelemetry.Instrumentation.Dependencies.Tests x => { if (x.Key == "http.flavor" && x.Value == "2.0") + { return "1.1"; + } + return HttpTestData.NormalizeValues(x.Value, host, port); }); @@ -128,22 +131,29 @@ namespace OpenTelemetry.Instrumentation.Dependencies.Tests { Assert.Equal(value, tag.Value); } + continue; } + if (tag.Key == SpanAttributeConstants.StatusCodeKey) { Assert.Equal(tc.SpanStatus, d[tag.Value]); continue; } + if (tag.Key == SpanAttributeConstants.StatusDescriptionKey) { if (tc.SpanStatusHasDescription.HasValue) + { Assert.Equal(tc.SpanStatusHasDescription.Value, !string.IsNullOrEmpty(tag.Value)); + } + continue; } Assert.True(false, $"Tag {tag.Key} was not found in test data."); } + Assert.Equal(value, tag.Value); } } diff --git a/test/OpenTelemetry.Instrumentation.Dependencies.Tests/SqlClientTests.cs b/test/OpenTelemetry.Instrumentation.Dependencies.Tests/SqlClientTests.cs index 6264da79a..5c8700eae 100644 --- a/test/OpenTelemetry.Instrumentation.Dependencies.Tests/SqlClientTests.cs +++ b/test/OpenTelemetry.Instrumentation.Dependencies.Tests/SqlClientTests.cs @@ -111,25 +111,29 @@ namespace OpenTelemetry.Instrumentation.Dependencies.Tests Assert.Equal(StatusCanonicalCode.Ok, span.Status.CanonicalCode); Assert.Null(span.Status.Description); - Assert.Equal("sql", span.Attributes.FirstOrDefault(i => - i.Key == SpanAttributeConstants.ComponentKey).Value as string); - Assert.Equal("sql", span.Attributes.FirstOrDefault(i => - i.Key == SpanAttributeConstants.DatabaseTypeKey).Value as string); - Assert.Equal("master", span.Attributes.FirstOrDefault(i => - i.Key == SpanAttributeConstants.DatabaseInstanceKey).Value as string); + Assert.Equal( + "sql", + span.Attributes.FirstOrDefault(i => i.Key == SpanAttributeConstants.ComponentKey).Value as string); + Assert.Equal( + "sql", + span.Attributes.FirstOrDefault(i => i.Key == SpanAttributeConstants.DatabaseTypeKey).Value as string); + Assert.Equal( + "master", + span.Attributes.FirstOrDefault(i => i.Key == SpanAttributeConstants.DatabaseInstanceKey).Value as string); switch (commandType) { case CommandType.StoredProcedure: if (captureStoredProcedureCommandName) { - Assert.Equal(commandText, span.Attributes.FirstOrDefault(i => - i.Key == SpanAttributeConstants.DatabaseStatementKey).Value as string); + Assert.Equal( + commandText, + span.Attributes.FirstOrDefault(i => i.Key == SpanAttributeConstants.DatabaseStatementKey).Value as string); } else { - Assert.Null(span.Attributes.FirstOrDefault(i => - i.Key == SpanAttributeConstants.DatabaseStatementKey).Value as string); + Assert.Null( + span.Attributes.FirstOrDefault(i => i.Key == SpanAttributeConstants.DatabaseStatementKey).Value as string); } break; @@ -137,8 +141,9 @@ namespace OpenTelemetry.Instrumentation.Dependencies.Tests case CommandType.Text: if (captureTextCommandContent) { - Assert.Equal(commandText, span.Attributes.FirstOrDefault(i => - i.Key == SpanAttributeConstants.DatabaseStatementKey).Value as string); + Assert.Equal( + commandText, + span.Attributes.FirstOrDefault(i => i.Key == SpanAttributeConstants.DatabaseStatementKey).Value as string); } else { @@ -149,8 +154,9 @@ namespace OpenTelemetry.Instrumentation.Dependencies.Tests break; } - Assert.Equal("(localdb)\\MSSQLLocalDB", span.Attributes.FirstOrDefault(i => - i.Key == SpanAttributeConstants.PeerServiceKey).Value as string); + Assert.Equal( + "(localdb)\\MSSQLLocalDB", + span.Attributes.FirstOrDefault(i => i.Key == SpanAttributeConstants.PeerServiceKey).Value as string); activity.Stop(); } @@ -209,16 +215,21 @@ namespace OpenTelemetry.Instrumentation.Dependencies.Tests Assert.Equal(StatusCanonicalCode.Unknown, span.Status.CanonicalCode); Assert.Equal("Boom!", span.Status.Description); - Assert.Equal("sql", span.Attributes.FirstOrDefault(i => - i.Key == SpanAttributeConstants.ComponentKey).Value as string); - Assert.Equal("sql", span.Attributes.FirstOrDefault(i => - i.Key == SpanAttributeConstants.DatabaseTypeKey).Value as string); - Assert.Equal("master", span.Attributes.FirstOrDefault(i => - i.Key == SpanAttributeConstants.DatabaseInstanceKey).Value as string); - Assert.Equal("SP_GetOrders", span.Attributes.FirstOrDefault(i => - i.Key == SpanAttributeConstants.DatabaseStatementKey).Value as string); - Assert.Equal("(localdb)\\MSSQLLocalDB", span.Attributes.FirstOrDefault(i => - i.Key == SpanAttributeConstants.PeerServiceKey).Value as string); + Assert.Equal( + "sql", + span.Attributes.FirstOrDefault(i => i.Key == SpanAttributeConstants.ComponentKey).Value as string); + Assert.Equal( + "sql", + span.Attributes.FirstOrDefault(i => i.Key == SpanAttributeConstants.DatabaseTypeKey).Value as string); + Assert.Equal( + "master", + span.Attributes.FirstOrDefault(i => i.Key == SpanAttributeConstants.DatabaseInstanceKey).Value as string); + Assert.Equal( + "SP_GetOrders", + span.Attributes.FirstOrDefault(i => i.Key == SpanAttributeConstants.DatabaseStatementKey).Value as string); + Assert.Equal( + "(localdb)\\MSSQLLocalDB", + span.Attributes.FirstOrDefault(i => i.Key == SpanAttributeConstants.PeerServiceKey).Value as string); activity.Stop(); } diff --git a/test/OpenTelemetry.Instrumentation.StackExchangeRedis.Tests/AttributesExtensions.cs b/test/OpenTelemetry.Instrumentation.StackExchangeRedis.Tests/AttributesExtensions.cs index 6e8e75f74..3a14387e5 100644 --- a/test/OpenTelemetry.Instrumentation.StackExchangeRedis.Tests/AttributesExtensions.cs +++ b/test/OpenTelemetry.Instrumentation.StackExchangeRedis.Tests/AttributesExtensions.cs @@ -14,8 +14,8 @@ // limitations under the License. // -using System.Linq; using System.Collections.Generic; +using System.Linq; namespace OpenTelemetry.Instrumentation.StackExchangeRedis.Tests { diff --git a/test/OpenTelemetry.Instrumentation.StackExchangeRedis.Tests/Implementation/RedisProfilerEntryToSpanConverterTests.cs b/test/OpenTelemetry.Instrumentation.StackExchangeRedis.Tests/Implementation/RedisProfilerEntryToSpanConverterTests.cs index c3d6a6523..0ff3aec13 100644 --- a/test/OpenTelemetry.Instrumentation.StackExchangeRedis.Tests/Implementation/RedisProfilerEntryToSpanConverterTests.cs +++ b/test/OpenTelemetry.Instrumentation.StackExchangeRedis.Tests/Implementation/RedisProfilerEntryToSpanConverterTests.cs @@ -1,4 +1,4 @@ -// +// // Copyright The OpenTelemetry Authors // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,7 +14,6 @@ // limitations under the License. // - using System; using Moq; using OpenTelemetry.Instrumentation.StackExchangeRedis.Tests; @@ -31,7 +30,7 @@ namespace OpenTelemetry.Instrumentation.StackExchangeRedis.Implementation public RedisProfilerEntryToSpanConverterTests() { - tracer = TracerFactory.Create(b => { }).GetTracer(null); + this.tracer = TracerFactory.Create(b => { }).GetTracer(null); } [Fact] @@ -42,7 +41,7 @@ namespace OpenTelemetry.Instrumentation.StackExchangeRedis.Implementation profiledCommand.Setup(m => m.CommandCreated).Returns(DateTime.UtcNow); profiledCommand.Setup(m => m.Command).Returns("SET"); - var result = (SpanSdk)RedisProfilerEntryToSpanConverter.ProfilerCommandToSpan(tracer, null, profiledCommand.Object); + var result = (SpanSdk)RedisProfilerEntryToSpanConverter.ProfilerCommandToSpan(this.tracer, null, profiledCommand.Object); Assert.Equal("SET", result.Name); } @@ -52,7 +51,7 @@ namespace OpenTelemetry.Instrumentation.StackExchangeRedis.Implementation var profiledCommand = new Mock(); var now = DateTimeOffset.Now; profiledCommand.Setup(m => m.CommandCreated).Returns(now.DateTime); - var result = ((SpanSdk)RedisProfilerEntryToSpanConverter.ProfilerCommandToSpan(this.tracer, null, profiledCommand.Object)); + var result = (SpanSdk)RedisProfilerEntryToSpanConverter.ProfilerCommandToSpan(this.tracer, null, profiledCommand.Object); Assert.Equal(now, result.StartTimestamp); } @@ -61,7 +60,7 @@ namespace OpenTelemetry.Instrumentation.StackExchangeRedis.Implementation { var profiledCommand = new Mock(); profiledCommand.Setup(m => m.CommandCreated).Returns(DateTime.UtcNow); - var result = ((SpanSdk)RedisProfilerEntryToSpanConverter.ProfilerCommandToSpan(this.tracer, null, profiledCommand.Object)); + var result = (SpanSdk)RedisProfilerEntryToSpanConverter.ProfilerCommandToSpan(this.tracer, null, profiledCommand.Object); Assert.Contains(result.Attributes, kvp => kvp.Key == "db.type"); Assert.Equal("redis", result.Attributes.GetValue("db.type")); } @@ -72,7 +71,7 @@ namespace OpenTelemetry.Instrumentation.StackExchangeRedis.Implementation var profiledCommand = new Mock(); profiledCommand.Setup(m => m.CommandCreated).Returns(DateTime.UtcNow); profiledCommand.Setup(m => m.Command).Returns("SET"); - var result = ((SpanSdk)RedisProfilerEntryToSpanConverter.ProfilerCommandToSpan(this.tracer, null, profiledCommand.Object)); + var result = (SpanSdk)RedisProfilerEntryToSpanConverter.ProfilerCommandToSpan(this.tracer, null, profiledCommand.Object); Assert.Contains(result.Attributes, kvp => kvp.Key == "db.statement"); Assert.Equal("SET", result.Attributes.GetValue("db.statement")); } @@ -85,7 +84,7 @@ namespace OpenTelemetry.Instrumentation.StackExchangeRedis.Implementation var expectedFlags = StackExchange.Redis.CommandFlags.FireAndForget | StackExchange.Redis.CommandFlags.NoRedirect; profiledCommand.Setup(m => m.Flags).Returns(expectedFlags); - var result = ((SpanSdk)RedisProfilerEntryToSpanConverter.ProfilerCommandToSpan(this.tracer, null, profiledCommand.Object)); + var result = (SpanSdk)RedisProfilerEntryToSpanConverter.ProfilerCommandToSpan(this.tracer, null, profiledCommand.Object); Assert.Contains(result.Attributes, kvp => kvp.Key == "redis.flags"); Assert.Equal("None, FireAndForget, NoRedirect", result.Attributes.GetValue("redis.flags")); } diff --git a/test/OpenTelemetry.Instrumentation.StackExchangeRedis.Tests/StackExchangeRedisCallsInstrumentationTests.cs b/test/OpenTelemetry.Instrumentation.StackExchangeRedis.Tests/StackExchangeRedisCallsInstrumentationTests.cs index cc427c9bd..69aba255a 100644 --- a/test/OpenTelemetry.Instrumentation.StackExchangeRedis.Tests/StackExchangeRedisCallsInstrumentationTests.cs +++ b/test/OpenTelemetry.Instrumentation.StackExchangeRedis.Tests/StackExchangeRedisCallsInstrumentationTests.cs @@ -14,11 +14,11 @@ // limitations under the License. // +using System.Threading.Tasks; using Moq; using OpenTelemetry.Trace.Configuration; using OpenTelemetry.Trace.Export; using StackExchange.Redis.Profiling; -using System.Threading.Tasks; using Xunit; namespace OpenTelemetry.Instrumentation.StackExchangeRedis diff --git a/test/OpenTelemetry.Shims.OpenTracing.Tests/Defaults.cs b/test/OpenTelemetry.Shims.OpenTracing.Tests/Defaults.cs index 107936d3b..3cb454839 100644 --- a/test/OpenTelemetry.Shims.OpenTracing.Tests/Defaults.cs +++ b/test/OpenTelemetry.Shims.OpenTracing.Tests/Defaults.cs @@ -1,4 +1,4 @@ -// +// // Copyright The OpenTelemetry Authors // // Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/test/OpenTelemetry.Shims.OpenTracing.Tests/SpanBuilderShimTests.cs b/test/OpenTelemetry.Shims.OpenTracing.Tests/SpanBuilderShimTests.cs index c2d6b5ad3..c66e5f408 100644 --- a/test/OpenTelemetry.Shims.OpenTracing.Tests/SpanBuilderShimTests.cs +++ b/test/OpenTelemetry.Shims.OpenTracing.Tests/SpanBuilderShimTests.cs @@ -14,13 +14,12 @@ // limitations under the License. // - using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; -using OpenTelemetry.Trace; using Moq; +using OpenTelemetry.Trace; using Xunit; namespace OpenTelemetry.Shims.OpenTracing.Tests @@ -49,8 +48,11 @@ namespace OpenTelemetry.Shims.OpenTracing.Tests // build shim.Start(); - tracerMock.Verify(o => o.StartRootSpan("foo", 0, - It.Is(so => so.StartTimestamp == default && !so.Links.Any())), Times.Once); + tracerMock.Verify( + o => o.StartRootSpan( + "foo", + 0, + It.Is(so => so.StartTimestamp == default && !so.Links.Any())), Times.Once); } [Fact] @@ -63,8 +65,12 @@ namespace OpenTelemetry.Shims.OpenTracing.Tests shim.WithStartTimestamp(startTimestamp); shim.Start(); - tracerMock.Verify(o => o.StartSpan("foo", It.IsAny(), 0, - It.Is(so => so.StartTimestamp == startTimestamp && !so.Links.Any())), Times.Once); + tracerMock.Verify( + o => o.StartSpan( + "foo", + It.IsAny(), + 0, + It.Is(so => so.StartTimestamp == startTimestamp && !so.Links.Any())), Times.Once); } [Fact] @@ -79,8 +85,12 @@ namespace OpenTelemetry.Shims.OpenTracing.Tests // build shim.Start(); - tracerMock.Verify(o => o.StartSpan("foo", It.IsAny(), 0, - It.Is(so => so.StartTimestamp == default && !so.Links.Any())), Times.Once); + tracerMock.Verify( + o => o.StartSpan( + "foo", + It.IsAny(), + 0, + It.Is(so => so.StartTimestamp == default && !so.Links.Any())), Times.Once); } [Fact] @@ -96,8 +106,12 @@ namespace OpenTelemetry.Shims.OpenTracing.Tests // build shim.Start(); - tracerMock.Verify(o => o.StartSpan("foo", span.Span, 0, - It.Is(so => so.StartTimestamp == default && !so.Links.Any())), Times.Once); + tracerMock.Verify( + o => o.StartSpan( + "foo", + span.Span, + 0, + It.Is(so => so.StartTimestamp == default && !so.Links.Any())), Times.Once); } [Fact] @@ -121,8 +135,12 @@ namespace OpenTelemetry.Shims.OpenTracing.Tests tracerMock = GetDefaultTracerMock(); shim = new SpanBuilderShim(tracerMock.Object, "foo", new List { "bar" }); shim.Start(); - tracerMock.Verify(o => o.StartSpan("foo", It.IsAny(), 0, - It.Is(so => so.StartTimestamp == default && !so.Links.Any())), Times.Once); + tracerMock.Verify( + o => o.StartSpan( + "foo", + It.IsAny(), + 0, + It.Is(so => so.StartTimestamp == default && !so.Links.Any())), Times.Once); } finally { @@ -145,8 +163,12 @@ namespace OpenTelemetry.Shims.OpenTracing.Tests // build shim.Start(); - tracerMock.Verify(o => o.StartSpan("foo", span1.Span, 0, - It.Is(so => so.StartTimestamp == default && so.Links.Single().Context.Equals(span2.Span.Context))), Times.Once); + tracerMock.Verify( + o => o.StartSpan( + "foo", + span1.Span, + 0, + It.Is(so => so.StartTimestamp == default && so.Links.Single().Context.Equals(span2.Span.Context))), Times.Once); } [Fact] @@ -162,8 +184,12 @@ namespace OpenTelemetry.Shims.OpenTracing.Tests shim.Start(); // should be no parent. - tracerMock.Verify(o => o.StartSpan("foo", It.IsAny(), 0, - It.Is(so => so.StartTimestamp == default && !so.Links.Any())), Times.Once); + tracerMock.Verify( + o => o.StartSpan( + "foo", + It.IsAny(), + 0, + It.Is(so => so.StartTimestamp == default && !so.Links.Any())), Times.Once); } [Fact] @@ -179,8 +205,12 @@ namespace OpenTelemetry.Shims.OpenTracing.Tests // build shim.Start(); - tracerMock.Verify(o => o.StartSpan("foo", spanContext.SpanContext, 0, - It.Is(so => so.StartTimestamp == default && !so.Links.Any())), Times.Once); + tracerMock.Verify( + o => o.StartSpan( + "foo", + spanContext.SpanContext, + 0, + It.Is(so => so.StartTimestamp == default && !so.Links.Any())), Times.Once); } [Fact] @@ -198,8 +228,12 @@ namespace OpenTelemetry.Shims.OpenTracing.Tests // build shim.Start(); - tracerMock.Verify(o => o.StartSpan("foo", spanContext1.SpanContext, 0, - It.Is(so => so.StartTimestamp == default && so.Links.Single().Context.Equals(spanContext2.SpanContext))), Times.Once); + tracerMock.Verify( + o => o.StartSpan( + "foo", + spanContext1.SpanContext, + 0, + It.Is(so => so.StartTimestamp == default && so.Links.Single().Context.Equals(spanContext2.SpanContext))), Times.Once); } [Fact] diff --git a/test/OpenTelemetry.Shims.OpenTracing.Tests/SpanMock.cs b/test/OpenTelemetry.Shims.OpenTracing.Tests/SpanMock.cs index 09a1009c4..b1e2aff70 100644 --- a/test/OpenTelemetry.Shims.OpenTracing.Tests/SpanMock.cs +++ b/test/OpenTelemetry.Shims.OpenTracing.Tests/SpanMock.cs @@ -15,7 +15,6 @@ // using System; using System.Collections.Generic; -using System.Collections.ObjectModel; using OpenTelemetry.Trace; namespace OpenTelemetry.Shims.OpenTracing.Tests diff --git a/test/OpenTelemetry.Shims.OpenTracing.Tests/TracerShimTests.cs b/test/OpenTelemetry.Shims.OpenTracing.Tests/TracerShimTests.cs index 4aaa7711d..7c432c12e 100644 --- a/test/OpenTelemetry.Shims.OpenTracing.Tests/TracerShimTests.cs +++ b/test/OpenTelemetry.Shims.OpenTracing.Tests/TracerShimTests.cs @@ -174,9 +174,6 @@ namespace OpenTelemetry.Shims.OpenTracing.Tests // TODO BaggageItems are not implemented yet. } - public interface UnsupportedCarrierType - { } - /// /// Simple ITextMap implementation used for the inject/extract tests. /// diff --git a/test/OpenTelemetry.Tests/Implementation/Configuration/MeterFactoryTests.cs b/test/OpenTelemetry.Tests/Implementation/Configuration/MeterFactoryTests.cs index b6c02723a..859a20607 100644 --- a/test/OpenTelemetry.Tests/Implementation/Configuration/MeterFactoryTests.cs +++ b/test/OpenTelemetry.Tests/Implementation/Configuration/MeterFactoryTests.cs @@ -1,4 +1,4 @@ -// +// // Copyright The OpenTelemetry Authors // // Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/test/OpenTelemetry.Tests/Implementation/Context/CorrelationContextBuilderTest.cs b/test/OpenTelemetry.Tests/Implementation/Context/CorrelationContextBuilderTest.cs index b5b1b1324..35423f578 100644 --- a/test/OpenTelemetry.Tests/Implementation/Context/CorrelationContextBuilderTest.cs +++ b/test/OpenTelemetry.Tests/Implementation/Context/CorrelationContextBuilderTest.cs @@ -15,26 +15,25 @@ // using System.Collections.Generic; -using System.Threading.Tasks; using Xunit; namespace OpenTelemetry.Context.Test { public class CorrelationContextBuilderTest { - private const string KEY_1 = "key 1"; - private const string KEY_2 = "key 2"; + private const string Key1 = "key 1"; + private const string Key2 = "key 2"; - private const string VALUE_1 = "value 1"; - private const string VALUE_2 = "value 2"; + private const string Value1 = "value 1"; + private const string Value2 = "value 2"; private static readonly List List1 = new List(1) - {new CorrelationContextEntry(KEY_1, VALUE_1)}; + { new CorrelationContextEntry(Key1, Value1) }; private static readonly List List2 = new List(2) { - new CorrelationContextEntry(KEY_1, VALUE_1), - new CorrelationContextEntry(KEY_2, VALUE_2), + new CorrelationContextEntry(Key1, Value1), + new CorrelationContextEntry(Key2, Value2), }; public CorrelationContextBuilderTest() @@ -51,7 +50,7 @@ namespace OpenTelemetry.Context.Test dc = CorrelationContextBuilder.CreateContext(CorrelationContext.Empty.Entries); Assert.Equal(CorrelationContext.Empty, dc); - dc = CorrelationContextBuilder.CreateContext(KEY_1, VALUE_1); + dc = CorrelationContextBuilder.CreateContext(Key1, Value1); Assert.Equal(CorrelationContextBuilder.CreateContext(List1), dc); Assert.Equal(dc, new CorrelationContextBuilder(dc).Build()); @@ -64,41 +63,35 @@ namespace OpenTelemetry.Context.Test Assert.Equal( CorrelationContextBuilder.CreateContext(List1), new CorrelationContextBuilder(inheritCurrentContext: false) - .Add(KEY_1, VALUE_1) - .Build() - ); + .Add(Key1, Value1) + .Build()); Assert.Equal( CorrelationContextBuilder.CreateContext(List1), new CorrelationContextBuilder(inheritCurrentContext: false) - .Add(new CorrelationContextEntry(KEY_1, VALUE_1)) - .Build() - ); + .Add(new CorrelationContextEntry(Key1, Value1)) + .Build()); Assert.Equal( CorrelationContextBuilder.CreateContext(List2), new CorrelationContextBuilder(inheritCurrentContext: false) - .Add(KEY_1, VALUE_1) - .Add(KEY_2, VALUE_2) - .Build() - ); + .Add(Key1, Value1) + .Add(Key2, Value2) + .Build()); Assert.Equal( CorrelationContextBuilder.CreateContext(List2), new CorrelationContextBuilder(inheritCurrentContext: false) - .Add(new CorrelationContextEntry(KEY_1, VALUE_1)) - .Add(new CorrelationContextEntry(KEY_2, VALUE_2)) - .Build() - ); + .Add(new CorrelationContextEntry(Key1, Value1)) + .Add(new CorrelationContextEntry(Key2, Value2)) + .Build()); Assert.Equal( CorrelationContextBuilder.CreateContext(List1), new CorrelationContextBuilder(inheritCurrentContext: false) .Add(List1) - .Build() - ); + .Build()); Assert.Equal( CorrelationContextBuilder.CreateContext(List2), new CorrelationContextBuilder(inheritCurrentContext: false) .Add(List2) - .Build() - ); + .Build()); } [Fact] @@ -107,17 +100,15 @@ namespace OpenTelemetry.Context.Test Assert.Equal( CorrelationContextBuilder.CreateContext(List1), new CorrelationContextBuilder(inheritCurrentContext: false) .Add(List2) - .Remove(KEY_2) - .Build() - ); + .Remove(Key2) + .Build()); Assert.Equal( CorrelationContext.Empty, new CorrelationContextBuilder(inheritCurrentContext: false) .Add(List2) - .Remove(KEY_2) - .Remove(KEY_1) - .Build() - ); + .Remove(Key2) + .Remove(Key1) + .Build()); } [Fact] diff --git a/test/OpenTelemetry.Tests/Implementation/Context/CorrelationContextEntryTest.cs b/test/OpenTelemetry.Tests/Implementation/Context/CorrelationContextEntryTest.cs index d3b2ad6b4..465f5bf72 100644 --- a/test/OpenTelemetry.Tests/Implementation/Context/CorrelationContextEntryTest.cs +++ b/test/OpenTelemetry.Tests/Implementation/Context/CorrelationContextEntryTest.cs @@ -13,9 +13,7 @@ // See the License for the specific language governing permissions and // limitations under the License. // -using System; using Xunit; -using System.Collections.Generic; namespace OpenTelemetry.Context.Test { diff --git a/test/OpenTelemetry.Tests/Implementation/Context/CorrelationContextTest.cs b/test/OpenTelemetry.Tests/Implementation/Context/CorrelationContextTest.cs index 880aa218d..fd41fe146 100644 --- a/test/OpenTelemetry.Tests/Implementation/Context/CorrelationContextTest.cs +++ b/test/OpenTelemetry.Tests/Implementation/Context/CorrelationContextTest.cs @@ -13,7 +13,6 @@ // See the License for the specific language governing permissions and // limitations under the License. // -using System; using System.Collections.Generic; using Xunit; @@ -51,7 +50,7 @@ namespace OpenTelemetry.Context.Test [Fact] public void AddExtraKey() { - var list = new List(1) { new CorrelationContextEntry(K1, V1)}; + var list = new List(1) { new CorrelationContextEntry(K1, V1) }; var dc = CorrelationContextBuilder.CreateContext(list); Assert.Equal(list, dc.Entries); @@ -104,7 +103,7 @@ namespace OpenTelemetry.Context.Test Assert.True(i.MoveNext()); var tag2 = i.Current; Assert.False(i.MoveNext()); - Assert.Equal(new List { new CorrelationContextEntry(K1, V1), new CorrelationContextEntry(K2, V2)}, new List { tag1, tag2 }); + Assert.Equal(new List { new CorrelationContextEntry(K1, V1), new CorrelationContextEntry(K2, V2) }, new List { tag1, tag2 }); } [Fact] diff --git a/test/OpenTelemetry.Tests/Implementation/Context/DistributedContextsScopeTest.cs b/test/OpenTelemetry.Tests/Implementation/Context/DistributedContextsScopeTest.cs index fcb2f1110..f3df27d01 100644 --- a/test/OpenTelemetry.Tests/Implementation/Context/DistributedContextsScopeTest.cs +++ b/test/OpenTelemetry.Tests/Implementation/Context/DistributedContextsScopeTest.cs @@ -21,11 +21,11 @@ namespace OpenTelemetry.Context.Test { public class DistributedContextsScopeTest { - private const string KEY_1 = "key 1"; - private const string KEY_2 = "key 2"; + private const string Key1 = "key 1"; + private const string Key2 = "key 2"; - private const string VALUE_1 = "value 1"; - private const string VALUE_2 = "value 2"; + private const string Value1 = "value 1"; + private const string Value2 = "value 2"; [Fact] public void NoopContextCarrier() @@ -33,11 +33,11 @@ namespace OpenTelemetry.Context.Test DistributedContext.Carrier = NoopDistributedContextCarrier.Instance; List list = new List(2) { - new CorrelationContextEntry(KEY_1, VALUE_1), new CorrelationContextEntry(KEY_2, VALUE_2), + new CorrelationContextEntry(Key1, Value1), new CorrelationContextEntry(Key2, Value2), }; Assert.Equal(DistributedContext.Empty, DistributedContext.Current); - using (DistributedContext.SetCurrent(DistributedContextBuilder.CreateContext(KEY_1, VALUE_1))) + using (DistributedContext.SetCurrent(DistributedContextBuilder.CreateContext(Key1, Value1))) { Assert.Equal(DistributedContext.Empty, DistributedContext.Current); using (DistributedContext.SetCurrent(DistributedContextBuilder.CreateContext(list))) @@ -53,9 +53,9 @@ namespace OpenTelemetry.Context.Test public async void AsyncContextCarrier() { DistributedContext.Carrier = AsyncLocalDistributedContextCarrier.Instance; - List list = new List(2) { new CorrelationContextEntry(KEY_1, VALUE_1), new CorrelationContextEntry(KEY_2, VALUE_2), }; + List list = new List(2) { new CorrelationContextEntry(Key1, Value1), new CorrelationContextEntry(Key2, Value2), }; - var dc1 = DistributedContextBuilder.CreateContext(KEY_1, VALUE_1); + var dc1 = DistributedContextBuilder.CreateContext(Key1, Value1); var dc2 = DistributedContextBuilder.CreateContext(list); DistributedContext.SetCurrent(DistributedContext.Empty); @@ -75,8 +75,10 @@ namespace OpenTelemetry.Context.Test { await Task.Run(() => Assert.Equal(dc2, DistributedContext.Current)); } + await Task.Run(() => Assert.Equal(dc1, DistributedContext.Current)); } + Assert.Equal(DistributedContext.Empty, DistributedContext.Current); await Task.Run(() => Assert.Equal(DistributedContext.Empty, DistributedContext.Current)); } @@ -85,8 +87,8 @@ namespace OpenTelemetry.Context.Test public async void TestContextInheritance() { DistributedContext.Carrier = AsyncLocalDistributedContextCarrier.Instance; - var list1 = new List(1) { new CorrelationContextEntry(KEY_1, VALUE_1) }; - var list2 = new List(2) { new CorrelationContextEntry(KEY_1, VALUE_1), new CorrelationContextEntry(KEY_2, VALUE_2) }; + var list1 = new List(1) { new CorrelationContextEntry(Key1, Value1) }; + var list2 = new List(2) { new CorrelationContextEntry(Key1, Value1), new CorrelationContextEntry(Key2, Value2) }; DistributedContext.SetCurrent(DistributedContext.Empty); await Task.Run(() => Assert.Equal(DistributedContext.Empty, DistributedContext.Current)); @@ -99,10 +101,10 @@ namespace OpenTelemetry.Context.Test { await Task.Run(() => Assert.Equal(DistributedContextBuilder.CreateContext(list1), DistributedContext.Current)); - using (DistributedContext.SetCurrent(new DistributedContextBuilder(inheritCurrentContext: true).Correlations(b => b.Add(KEY_2, VALUE_2)).Build())) + using (DistributedContext.SetCurrent(new DistributedContextBuilder(inheritCurrentContext: true).Correlations(b => b.Add(Key2, Value2)).Build())) { await Task.Run(() => Assert.Equal(DistributedContextBuilder.CreateContext(list2), DistributedContext.Current)); - using (DistributedContext.SetCurrent(new DistributedContextBuilder(inheritCurrentContext: true).Correlations(b => b.Remove(KEY_2)).Build())) + using (DistributedContext.SetCurrent(new DistributedContextBuilder(inheritCurrentContext: true).Correlations(b => b.Remove(Key2)).Build())) { await Task.Run(() => Assert.Equal(DistributedContextBuilder.CreateContext(list1), DistributedContext.Current)); } @@ -121,4 +123,3 @@ namespace OpenTelemetry.Context.Test } } } - diff --git a/test/OpenTelemetry.Tests/Implementation/Context/Propagation/DistributedContextDeserializationTest.cs b/test/OpenTelemetry.Tests/Implementation/Context/Propagation/DistributedContextDeserializationTest.cs index 64eea3a71..5cda9b1de 100644 --- a/test/OpenTelemetry.Tests/Implementation/Context/Propagation/DistributedContextDeserializationTest.cs +++ b/test/OpenTelemetry.Tests/Implementation/Context/Propagation/DistributedContextDeserializationTest.cs @@ -14,7 +14,6 @@ // limitations under the License. // -using System; using System.Collections.Generic; using System.IO; using System.Text; @@ -30,7 +29,7 @@ namespace OpenTelemetry.Context.Propagation.Test public DistributedContextDeserializationTest() { DistributedContext.Carrier = AsyncLocalDistributedContextCarrier.Instance; - serializer = new DistributedContextBinarySerializer(); + this.serializer = new DistributedContextBinarySerializer(); } [Fact] @@ -45,17 +44,17 @@ namespace OpenTelemetry.Context.Propagation.Test [Fact] public void TestNoTagsSerialization() { - var dc = serializer.FromByteArray(serializer.ToByteArray(DistributedContext.Empty)); + var dc = this.serializer.FromByteArray(this.serializer.ToByteArray(DistributedContext.Empty)); Assert.Empty(dc.CorrelationContext.Entries); - dc = serializer.FromByteArray(new byte[] { SerializationUtils.VersionId }); // One byte that represents Version ID. + dc = this.serializer.FromByteArray(new byte[] { SerializationUtils.VersionId }); // One byte that represents Version ID. Assert.Empty(dc.CorrelationContext.Entries); } [Fact] public void TestDeserializeEmptyByteArrayThrowException() { - Assert.Equal(DistributedContext.Empty, serializer.FromByteArray(new byte[0])); + Assert.Equal(DistributedContext.Empty, this.serializer.FromByteArray(new byte[0])); } [Fact] @@ -64,7 +63,7 @@ namespace OpenTelemetry.Context.Propagation.Test var output = new MemoryStream(); output.WriteByte(SerializationUtils.VersionId); - for (var i = 0; i < SerializationUtils.TagContextSerializedSizeLimit / 8 - 1; i++) + for (var i = 0; i < (SerializationUtils.TagContextSerializedSizeLimit / 8) - 1; i++) { // Each tag will be with format {key : "0123", value : "0123"}, so the length of it is 8. string str = i.ToString("0000"); @@ -76,7 +75,7 @@ namespace OpenTelemetry.Context.Propagation.Test EncodeTagToOutPut("last", "last1", output); var bytes = output.ToArray(); - Assert.Equal(DistributedContext.Empty, serializer.FromByteArray(bytes)); + Assert.Equal(DistributedContext.Empty, this.serializer.FromByteArray(bytes)); } // Deserializing this inPut should cause an error, even though it represents a relatively small @@ -87,7 +86,7 @@ namespace OpenTelemetry.Context.Propagation.Test var output = new MemoryStream(); output.WriteByte(SerializationUtils.VersionId); - for (var i = 0; i < SerializationUtils.TagContextSerializedSizeLimit / 8 - 1; i++) + for (var i = 0; i < (SerializationUtils.TagContextSerializedSizeLimit / 8) - 1; i++) { // Each tag will be with format {key : "key_", value : "0123"}, so the length of it is 8. EncodeTagToOutPut("key_", i.ToString("0000"), output); @@ -98,7 +97,7 @@ namespace OpenTelemetry.Context.Propagation.Test EncodeTagToOutPut("key_", "last1", output); var bytes = output.ToArray(); - Assert.Equal(DistributedContext.Empty, serializer.FromByteArray(bytes)); + Assert.Equal(DistributedContext.Empty, this.serializer.FromByteArray(bytes)); } [Fact] @@ -109,7 +108,7 @@ namespace OpenTelemetry.Context.Propagation.Test EncodeTagToOutPut("Key", "Value", output); var expected = DistributedContextBuilder.CreateContext("Key", "Value"); - Assert.Equal(expected, serializer.FromByteArray(output.ToArray())); + Assert.Equal(expected, this.serializer.FromByteArray(output.ToArray())); } [Fact] @@ -121,9 +120,8 @@ namespace OpenTelemetry.Context.Propagation.Test EncodeTagToOutPut("Key2", "Value2", output); var expected = DistributedContextBuilder.CreateContext( - new List(2) { new CorrelationContextEntry("Key1", "Value1"), new CorrelationContextEntry("Key2", "Value2") } - ); - Assert.Equal(expected, serializer.FromByteArray(output.ToArray())); + new List(2) { new CorrelationContextEntry("Key1", "Value1"), new CorrelationContextEntry("Key2", "Value2") }); + Assert.Equal(expected, this.serializer.FromByteArray(output.ToArray())); } [Fact] @@ -135,7 +133,7 @@ namespace OpenTelemetry.Context.Propagation.Test EncodeTagToOutPut("Key1", "Value2", output); var expected = DistributedContextBuilder.CreateContext("Key1", "Value2"); - Assert.Equal(expected, serializer.FromByteArray(output.ToArray())); + Assert.Equal(expected, this.serializer.FromByteArray(output.ToArray())); } [Fact] @@ -155,9 +153,8 @@ namespace OpenTelemetry.Context.Propagation.Test new CorrelationContextEntry("Key1", "Value4"), new CorrelationContextEntry("Key2", "Value5"), new CorrelationContextEntry("Key3", "Value3"), - } - ); - Assert.Equal(expected, serializer.FromByteArray(output.ToArray())); + }); + Assert.Equal(expected, this.serializer.FromByteArray(output.ToArray())); } [Fact] @@ -169,7 +166,7 @@ namespace OpenTelemetry.Context.Propagation.Test EncodeTagToOutPut("Key1", "Value2", output); var expected = DistributedContextBuilder.CreateContext("Key1", "Value2"); - Assert.Equal(expected, serializer.FromByteArray(output.ToArray())); + Assert.Equal(expected, this.serializer.FromByteArray(output.ToArray())); } [Fact] @@ -189,9 +186,8 @@ namespace OpenTelemetry.Context.Propagation.Test new CorrelationContextEntry("Key1", "Value1"), new CorrelationContextEntry("Key2", "Value2"), new CorrelationContextEntry("Key3", "Value3"), - } - ); - Assert.Equal(expected, serializer.FromByteArray(output.ToArray())); + }); + Assert.Equal(expected, this.serializer.FromByteArray(output.ToArray())); } [Fact] @@ -213,9 +209,8 @@ namespace OpenTelemetry.Context.Propagation.Test { new CorrelationContextEntry("Key1", "Value1"), new CorrelationContextEntry("Key2", "Value2"), - } - ); - Assert.Equal(expected, serializer.FromByteArray(output.ToArray())); + }); + Assert.Equal(expected, this.serializer.FromByteArray(output.ToArray())); } [Fact] @@ -229,26 +224,26 @@ namespace OpenTelemetry.Context.Propagation.Test output.Write(new byte[] { 1, 2, 3, 4 }, 0, 4); EncodeTagToOutPut("Key", "Value", output); - Assert.Equal(DistributedContext.Empty, serializer.FromByteArray(output.ToArray())); + Assert.Equal(DistributedContext.Empty, this.serializer.FromByteArray(output.ToArray())); } [Fact] public void TestDeserializeWrongFormat() { // encoded tags should follow the format ()* - Assert.Equal(DistributedContext.Empty, serializer.FromByteArray(new byte[3])); + Assert.Equal(DistributedContext.Empty, this.serializer.FromByteArray(new byte[3])); } [Fact] public void TestDeserializeWrongVersionId() { - Assert.Equal(DistributedContext.Empty, serializer.FromByteArray(new byte[] { SerializationUtils.VersionId + 1 })); + Assert.Equal(DistributedContext.Empty, this.serializer.FromByteArray(new byte[] { SerializationUtils.VersionId + 1 })); } [Fact] public void TestDeserializeNegativeVersionId() { - Assert.Equal(DistributedContext.Empty, serializer.FromByteArray(new byte[] { 0xff })); + Assert.Equal(DistributedContext.Empty, this.serializer.FromByteArray(new byte[] { 0xff })); } // == @@ -257,14 +252,14 @@ namespace OpenTelemetry.Context.Propagation.Test // == tag_key_len bytes comprising tag key name // == varint encoded integer // == tag_val_len bytes comprising UTF-8 string - private static void EncodeTagToOutPut(String key, String value, MemoryStream output) + private static void EncodeTagToOutPut(string key, string value, MemoryStream output) { output.WriteByte(SerializationUtils.TagFieldId); EncodeString(key, output); EncodeString(value, output); } - private static void EncodeString(String input, MemoryStream output) + private static void EncodeString(string input, MemoryStream output) { var length = input.Length; var bytes = new byte[VarInt.VarIntSize(length)]; diff --git a/test/OpenTelemetry.Tests/Implementation/Context/Propagation/DistributedContextRoundtripTest.cs b/test/OpenTelemetry.Tests/Implementation/Context/Propagation/DistributedContextRoundtripTest.cs index c4111fe4b..4eb585efb 100644 --- a/test/OpenTelemetry.Tests/Implementation/Context/Propagation/DistributedContextRoundtripTest.cs +++ b/test/OpenTelemetry.Tests/Implementation/Context/Propagation/DistributedContextRoundtripTest.cs @@ -14,8 +14,8 @@ // limitations under the License. // -using Xunit; using System.Collections.Generic; +using Xunit; namespace OpenTelemetry.Context.Propagation.Test { @@ -25,7 +25,6 @@ namespace OpenTelemetry.Context.Propagation.Test private const string K2 = "k2"; private const string K3 = "k3"; - private const string V_EMPTY = ""; private const string V1 = "v1"; private const string V2 = "v2"; private const string V3 = "v3"; @@ -50,11 +49,10 @@ namespace OpenTelemetry.Context.Propagation.Test new CorrelationContextEntry(K1, V1), new CorrelationContextEntry(K2, V2), new CorrelationContextEntry(K3, V3), - } - ); + }); this.TestRoundtripSerialization(expected); - this.TestRoundtripSerialization(DistributedContextBuilder.CreateContext(K1, V_EMPTY)); + this.TestRoundtripSerialization(DistributedContextBuilder.CreateContext(K1, string.Empty)); } [Fact] diff --git a/test/OpenTelemetry.Tests/Implementation/Context/Propagation/DistributedContextSerializationTest.cs b/test/OpenTelemetry.Tests/Implementation/Context/Propagation/DistributedContextSerializationTest.cs index 8f8efcee2..03f8cc2ff 100644 --- a/test/OpenTelemetry.Tests/Implementation/Context/Propagation/DistributedContextSerializationTest.cs +++ b/test/OpenTelemetry.Tests/Implementation/Context/Propagation/DistributedContextSerializationTest.cs @@ -14,8 +14,6 @@ // limitations under the License. // -using System; -using System.Collections; using System.Collections.Generic; using System.IO; using System.Linq; @@ -47,25 +45,25 @@ namespace OpenTelemetry.Context.Propagation.Test public DistributedContextSerializationTest() { DistributedContext.Carrier = AsyncLocalDistributedContextCarrier.Instance; - serializer = new DistributedContextBinarySerializer(); + this.serializer = new DistributedContextBinarySerializer(); } [Fact] public void TestSerializeDefault() { - TestSerialize(); + this.TestSerialize(); } [Fact] public void TestSerializeWithOneTag() { - TestSerialize(T1); + this.TestSerialize(T1); } [Fact] public void TestSerializeWithMultipleTags() { - TestSerialize(T1, T2, T3, T4); + this.TestSerialize(T1, T2, T3, T4); } [Fact] @@ -73,7 +71,7 @@ namespace OpenTelemetry.Context.Propagation.Test { var list = new List(); - for (var i = 0; i < SerializationUtils.TagContextSerializedSizeLimit / 8 - 1; i++) + for (var i = 0; i < (SerializationUtils.TagContextSerializedSizeLimit / 8) - 1; i++) { // Each tag will be with format {key : "0123", value : "0123"}, so the length of it is 8. var str = i.ToString("0000"); @@ -85,37 +83,7 @@ namespace OpenTelemetry.Context.Propagation.Test list.Add(new CorrelationContextEntry("last", "last1")); var dc = DistributedContextBuilder.CreateContext(list); - Assert.Empty(serializer.ToByteArray(dc)); - } - - private void TestSerialize(params CorrelationContextEntry[] tags) - { - var list = new List(tags); - - var actual = serializer.ToByteArray(DistributedContextBuilder.CreateContext(list)); - var tagsList = tags.ToList(); - var tagPermutation = Permutate(tagsList, tagsList.Count); - ISet possibleOutPuts = new HashSet(); - - foreach (var distributedContextEntries in tagPermutation) - { - var l = (List)distributedContextEntries; - var expected = new MemoryStream(); - expected.WriteByte(SerializationUtils.VersionId); - - foreach (var tag in l) - { - expected.WriteByte(SerializationUtils.TagFieldId); - EncodeString(tag.Key, expected); - EncodeString(tag.Value, expected); - } - - var bytes = expected.ToArray(); - possibleOutPuts.Add(Encoding.UTF8.GetString(bytes)); - } - - var exp = Encoding.UTF8.GetString(actual); - Assert.Contains(exp, possibleOutPuts); + Assert.Empty(this.serializer.ToByteArray(dc)); } private static void EncodeString(string input, MemoryStream byteArrayOutPutStream) @@ -151,5 +119,35 @@ namespace OpenTelemetry.Context.Propagation.Test } } } + + private void TestSerialize(params CorrelationContextEntry[] tags) + { + var list = new List(tags); + + var actual = this.serializer.ToByteArray(DistributedContextBuilder.CreateContext(list)); + var tagsList = tags.ToList(); + var tagPermutation = Permutate(tagsList, tagsList.Count); + ISet possibleOutPuts = new HashSet(); + + foreach (var distributedContextEntries in tagPermutation) + { + var l = (List)distributedContextEntries; + var expected = new MemoryStream(); + expected.WriteByte(SerializationUtils.VersionId); + + foreach (var tag in l) + { + expected.WriteByte(SerializationUtils.TagFieldId); + EncodeString(tag.Key, expected); + EncodeString(tag.Value, expected); + } + + var bytes = expected.ToArray(); + possibleOutPuts.Add(Encoding.UTF8.GetString(bytes)); + } + + var exp = Encoding.UTF8.GetString(actual); + Assert.Contains(exp, possibleOutPuts); + } } } diff --git a/test/OpenTelemetry.Tests/Implementation/Internal/TestHttpServer.cs b/test/OpenTelemetry.Tests/Implementation/Internal/TestHttpServer.cs index fecdd6f47..ec93af61c 100644 --- a/test/OpenTelemetry.Tests/Implementation/Internal/TestHttpServer.cs +++ b/test/OpenTelemetry.Tests/Implementation/Internal/TestHttpServer.cs @@ -24,6 +24,31 @@ namespace OpenTelemetry.Internal.Test { private static readonly Random GlobalRandom = new Random(); + public static IDisposable RunServer(Action action, out string host, out int port) + { + host = "localhost"; + port = 0; + RunningServer server = null; + + var retryCount = 5; + while (retryCount > 0) + { + try + { + port = GlobalRandom.Next(2000, 5000); + server = new RunningServer(action, host, port); + server.Start(); + break; + } + catch (HttpListenerException) + { + retryCount--; + } + } + + return server; + } + private class RunningServer : IDisposable { private readonly Task httpListenerTask; @@ -51,11 +76,14 @@ namespace OpenTelemetry.Internal.Test } catch (Exception ex) { - if (ex is ObjectDisposedException // Listener was closed before we got into GetContextAsync. - || (ex is HttpListenerException httpEx && httpEx.ErrorCode == 995)) // Listener was closed while we were in GetContextAsync. + if (ex is ObjectDisposedException + || (ex is HttpListenerException httpEx && httpEx.ErrorCode == 995)) { + // Listener was closed before we got into GetContextAsync or + // Listener was closed while we were in GetContextAsync. break; } + throw; } } @@ -80,30 +108,5 @@ namespace OpenTelemetry.Internal.Test } } } - - public static IDisposable RunServer(Action action, out string host, out int port) - { - host = "localhost"; - port = 0; - RunningServer server = null; - - var retryCount = 5; - while (retryCount > 0) - { - try - { - port = GlobalRandom.Next(2000, 5000); - server = new RunningServer(action, host, port); - server.Start(); - break; - } - catch (HttpListenerException) - { - retryCount--; - } - } - - return server; - } } } diff --git a/test/OpenTelemetry.Tests/Implementation/Metrics/Aggregators/CounterAggregatorTest.cs b/test/OpenTelemetry.Tests/Implementation/Metrics/Aggregators/CounterAggregatorTest.cs index 442593f06..1d575aca6 100644 --- a/test/OpenTelemetry.Tests/Implementation/Metrics/Aggregators/CounterAggregatorTest.cs +++ b/test/OpenTelemetry.Tests/Implementation/Metrics/Aggregators/CounterAggregatorTest.cs @@ -13,7 +13,6 @@ // See the License for the specific language governing permissions and // limitations under the License. // -using System; using System.Threading; using OpenTelemetry.Metrics.Aggregators; using OpenTelemetry.Metrics.Export; @@ -23,14 +22,6 @@ namespace OpenTelemetry.Metrics.Test { public class CounterAggregatorTest { - private class UpdateThreadArguments where T : struct - { - public ManualResetEvent mreToBlockUpdateThread; - public ManualResetEvent mreToEnsureAllThreadsStart; - public int threadsStartedCount; - public Aggregator counterSumAggregator; - } - [Fact] public void CounterAggregatorAggregatesCorrectlyWhenMultipleThreadsUpdatesLong() { @@ -48,10 +39,10 @@ namespace OpenTelemetry.Metrics.Test var argToThread = new UpdateThreadArguments { - counterSumAggregator = aggregator, - threadsStartedCount = 0, - mreToBlockUpdateThread = mre, - mreToEnsureAllThreadsStart = mreToEnsureAllThreadsStart, + CounterSumAggregator = aggregator, + ThreadsStartedCount = 0, + MreToBlockUpdateThread = mre, + MreToEnsureAllThreadsStart = mreToEnsureAllThreadsStart, }; Thread[] t = new Thread[10]; @@ -98,10 +89,10 @@ namespace OpenTelemetry.Metrics.Test var argToThread = new UpdateThreadArguments { - counterSumAggregator = aggregator, - threadsStartedCount = 0, - mreToBlockUpdateThread = mre, - mreToEnsureAllThreadsStart = mreToEnsureAllThreadsStart, + CounterSumAggregator = aggregator, + ThreadsStartedCount = 0, + MreToBlockUpdateThread = mre, + MreToEnsureAllThreadsStart = mreToEnsureAllThreadsStart, }; Thread[] t = new Thread[10]; @@ -131,15 +122,14 @@ namespace OpenTelemetry.Metrics.Test Assert.Equal(105000000, sum.Sum); } - private static void LongMetricUpdateThread(object obj) { var arguments = obj as UpdateThreadArguments; - var mre = arguments.mreToBlockUpdateThread; - var mreToEnsureAllThreadsStart = arguments.mreToEnsureAllThreadsStart; - var agg = arguments.counterSumAggregator; + var mre = arguments.MreToBlockUpdateThread; + var mreToEnsureAllThreadsStart = arguments.MreToEnsureAllThreadsStart; + var agg = arguments.CounterSumAggregator; - if (Interlocked.Increment(ref arguments.threadsStartedCount) == 10) + if (Interlocked.Increment(ref arguments.ThreadsStartedCount) == 10) { mreToEnsureAllThreadsStart.Set(); } @@ -156,11 +146,11 @@ namespace OpenTelemetry.Metrics.Test private static void DoubleMetricUpdateThread(object obj) { var arguments = obj as UpdateThreadArguments; - var mre = arguments.mreToBlockUpdateThread; - var mreToEnsureAllThreadsStart = arguments.mreToEnsureAllThreadsStart; - var agg = arguments.counterSumAggregator; + var mre = arguments.MreToBlockUpdateThread; + var mreToEnsureAllThreadsStart = arguments.MreToEnsureAllThreadsStart; + var agg = arguments.CounterSumAggregator; - if (Interlocked.Increment(ref arguments.threadsStartedCount) == 10) + if (Interlocked.Increment(ref arguments.ThreadsStartedCount) == 10) { mreToEnsureAllThreadsStart.Set(); } @@ -173,5 +163,14 @@ namespace OpenTelemetry.Metrics.Test agg.Update(10.5); } } + + private class UpdateThreadArguments + where T : struct + { + public ManualResetEvent MreToBlockUpdateThread; + public ManualResetEvent MreToEnsureAllThreadsStart; + public int ThreadsStartedCount; + public Aggregator CounterSumAggregator; + } } } diff --git a/test/OpenTelemetry.Tests/Implementation/Metrics/Aggregators/LastValueAggregatorTest.cs b/test/OpenTelemetry.Tests/Implementation/Metrics/Aggregators/LastValueAggregatorTest.cs index f3e170adf..f0f44f431 100644 --- a/test/OpenTelemetry.Tests/Implementation/Metrics/Aggregators/LastValueAggregatorTest.cs +++ b/test/OpenTelemetry.Tests/Implementation/Metrics/Aggregators/LastValueAggregatorTest.cs @@ -13,8 +13,6 @@ // See the License for the specific language governing permissions and // limitations under the License. // -using System; -using System.Threading; using OpenTelemetry.Metrics.Aggregators; using OpenTelemetry.Metrics.Export; using Xunit; diff --git a/test/OpenTelemetry.Tests/Implementation/Metrics/Aggregators/MinMaxSumCountAggregatorTest.cs b/test/OpenTelemetry.Tests/Implementation/Metrics/Aggregators/MinMaxSumCountAggregatorTest.cs index 683c3837d..59a1e267d 100644 --- a/test/OpenTelemetry.Tests/Implementation/Metrics/Aggregators/MinMaxSumCountAggregatorTest.cs +++ b/test/OpenTelemetry.Tests/Implementation/Metrics/Aggregators/MinMaxSumCountAggregatorTest.cs @@ -13,7 +13,6 @@ // See the License for the specific language governing permissions and // limitations under the License. // -using System; using System.Threading; using OpenTelemetry.Metrics.Aggregators; using OpenTelemetry.Metrics.Export; @@ -23,14 +22,6 @@ namespace OpenTelemetry.Metrics.Test { public class MinMaxSumCountAggregatorTest { - private class UpdateThreadArguments where T : struct - { - public ManualResetEvent mreToBlockUpdateThread; - public ManualResetEvent mreToEnsureAllThreadsStart; - public int threadsStartedCount; - public Aggregator minMaxSumCountAggregator; - } - [Fact] public void MeasureAggregatorAggregatesCorrectlyWhenMultipleThreadsUpdatesLong() { @@ -47,10 +38,10 @@ namespace OpenTelemetry.Metrics.Test var mreToEnsureAllThreadsStart = new ManualResetEvent(false); var argToThread = new UpdateThreadArguments(); - argToThread.minMaxSumCountAggregator = aggregator; - argToThread.threadsStartedCount = 0; - argToThread.mreToBlockUpdateThread = mre; - argToThread.mreToEnsureAllThreadsStart = mreToEnsureAllThreadsStart; + argToThread.MinMaxSumCountAggregator = aggregator; + argToThread.ThreadsStartedCount = 0; + argToThread.MreToBlockUpdateThread = mre; + argToThread.MreToEnsureAllThreadsStart = mreToEnsureAllThreadsStart; Thread[] t = new Thread[10]; for (int i = 0; i < 10; i++) @@ -102,10 +93,10 @@ namespace OpenTelemetry.Metrics.Test var mreToEnsureAllThreadsStart = new ManualResetEvent(false); var argToThread = new UpdateThreadArguments(); - argToThread.minMaxSumCountAggregator = aggregator; - argToThread.threadsStartedCount = 0; - argToThread.mreToBlockUpdateThread = mre; - argToThread.mreToEnsureAllThreadsStart = mreToEnsureAllThreadsStart; + argToThread.MinMaxSumCountAggregator = aggregator; + argToThread.ThreadsStartedCount = 0; + argToThread.MreToBlockUpdateThread = mre; + argToThread.MreToEnsureAllThreadsStart = mreToEnsureAllThreadsStart; Thread[] t = new Thread[10]; for (int i = 0; i < 10; i++) @@ -141,15 +132,14 @@ namespace OpenTelemetry.Metrics.Test Assert.Equal(100, summary.Max); } - private static void LongMetricUpdateThread(object obj) { var arguments = obj as UpdateThreadArguments; - var mre = arguments.mreToBlockUpdateThread; - var mreToEnsureAllThreadsStart = arguments.mreToEnsureAllThreadsStart; - var agg = arguments.minMaxSumCountAggregator; + var mre = arguments.MreToBlockUpdateThread; + var mreToEnsureAllThreadsStart = arguments.MreToEnsureAllThreadsStart; + var agg = arguments.MinMaxSumCountAggregator; - if (Interlocked.Increment(ref arguments.threadsStartedCount) == 10) + if (Interlocked.Increment(ref arguments.ThreadsStartedCount) == 10) { mreToEnsureAllThreadsStart.Set(); } @@ -168,11 +158,11 @@ namespace OpenTelemetry.Metrics.Test private static void DoubleMetricUpdateThread(object obj) { var arguments = obj as UpdateThreadArguments; - var mre = arguments.mreToBlockUpdateThread; - var mreToEnsureAllThreadsStart = arguments.mreToEnsureAllThreadsStart; - var agg = arguments.minMaxSumCountAggregator; + var mre = arguments.MreToBlockUpdateThread; + var mreToEnsureAllThreadsStart = arguments.MreToEnsureAllThreadsStart; + var agg = arguments.MinMaxSumCountAggregator; - if (Interlocked.Increment(ref arguments.threadsStartedCount) == 10) + if (Interlocked.Increment(ref arguments.ThreadsStartedCount) == 10) { mreToEnsureAllThreadsStart.Set(); } @@ -187,5 +177,14 @@ namespace OpenTelemetry.Metrics.Test agg.Update(100.0); } } + + private class UpdateThreadArguments + where T : struct + { + public ManualResetEvent MreToBlockUpdateThread; + public ManualResetEvent MreToEnsureAllThreadsStart; + public int ThreadsStartedCount; + public Aggregator MinMaxSumCountAggregator; + } } } diff --git a/test/OpenTelemetry.Tests/Implementation/Metrics/CounterCleanUpTests.cs b/test/OpenTelemetry.Tests/Implementation/Metrics/CounterCleanUpTests.cs index f5e0c505d..07bb28e28 100644 --- a/test/OpenTelemetry.Tests/Implementation/Metrics/CounterCleanUpTests.cs +++ b/test/OpenTelemetry.Tests/Implementation/Metrics/CounterCleanUpTests.cs @@ -14,13 +14,13 @@ // limitations under the License. // +using System; using System.Collections.Generic; +using System.Threading; using OpenTelemetry.Metrics.Configuration; +using OpenTelemetry.Metrics.Export; using OpenTelemetry.Trace; using Xunit; -using OpenTelemetry.Metrics.Export; -using System.Threading; -using System; using Xunit.Abstractions; namespace OpenTelemetry.Metrics.Test @@ -59,17 +59,20 @@ namespace OpenTelemetry.Metrics.Test // ls2 is bound by user. testCounter.Add(context, 100, ls1); testCounter.Add(context, 10, ls1); - // initial status for temp bound instruments are UpdatePending. + + // initial status for temp bound instruments are UpdatePending. Assert.Equal(RecordStatus.UpdatePending, testCounter.GetAllBoundInstruments()[ls1].Status); var boundCounterLabel2 = testCounter.Bind(ls2); boundCounterLabel2.Add(context, 200); + // initial/forever status for user bound instruments are Bound. Assert.Equal(RecordStatus.Bound, testCounter.GetAllBoundInstruments()[ls2].Status); testCounter.Add(context, 200, ls3); testCounter.Add(context, 10, ls3); - // initial status for temp bound instruments are UpdatePending. + + // initial status for temp bound instruments are UpdatePending. Assert.Equal(RecordStatus.UpdatePending, testCounter.GetAllBoundInstruments()[ls3].Status); // This collect should mark ls1, ls3 as NoPendingUpdate, leave ls2 untouched. @@ -128,17 +131,20 @@ namespace OpenTelemetry.Metrics.Test // ls2 is bound by user. testCounter.Add(context, 100.0, ls1); testCounter.Add(context, 10.0, ls1); - // initial status for temp bound instruments are UpdatePending. + + // initial status for temp bound instruments are UpdatePending. Assert.Equal(RecordStatus.UpdatePending, testCounter.GetAllBoundInstruments()[ls1].Status); var boundCounterLabel2 = testCounter.Bind(ls2); boundCounterLabel2.Add(context, 200.0); + // initial/forever status for user bound instruments are Bound. Assert.Equal(RecordStatus.Bound, testCounter.GetAllBoundInstruments()[ls2].Status); testCounter.Add(context, 200.0, ls3); testCounter.Add(context, 10.0, ls3); - // initial status for temp bound instruments are UpdatePending. + + // initial status for temp bound instruments are UpdatePending. Assert.Equal(RecordStatus.UpdatePending, testCounter.GetAllBoundInstruments()[ls3].Status); // This collect should mark ls1, ls3 as NoPendingUpdate, leave ls2 untouched. @@ -202,12 +208,12 @@ namespace OpenTelemetry.Metrics.Test // candidate for removal after above step. var mre = new ManualResetEvent(false); var argsForMeterCollect = new ArgsToThread(); - argsForMeterCollect.mreToBlockStartOfThread = mre; - argsForMeterCollect.callback = () => meter.Collect(); + argsForMeterCollect.MreToBlockStartOfThread = mre; + argsForMeterCollect.Callback = () => meter.Collect(); var argsForCounterAdd = new ArgsToThread(); - argsForCounterAdd.mreToBlockStartOfThread = mre; - argsForCounterAdd.callback = () => testCounter.Add(context, 100, ls1); + argsForCounterAdd.MreToBlockStartOfThread = mre; + argsForCounterAdd.Callback = () => testCounter.Add(context, 100, ls1); var collectThread = new Thread(ThreadMethod); var updateThread = new Thread(ThreadMethod); @@ -231,9 +237,9 @@ namespace OpenTelemetry.Metrics.Test meter.Collect(); long sum = 0; - foreach (var exportedData in testProcessor.metrics) + foreach (var exportedData in testProcessor.Metrics) { - exportedData.Data.ForEach((data => sum += (data as Int64SumData).Sum)); + exportedData.Data.ForEach(data => sum += (data as Int64SumData).Sum); } // 210 = 110 from initial update, 100 from the multi-thread test case. @@ -258,7 +264,7 @@ namespace OpenTelemetry.Metrics.Test testCounter.Add(context, 10.0, ls1); // This collect should mark ls1 NoPendingUpdate - meter.Collect(); + meter.Collect(); // Validate collect() has marked records correctly. Assert.Equal(RecordStatus.NoPendingUpdate, testCounter.GetAllBoundInstruments()[ls1].Status); @@ -271,12 +277,12 @@ namespace OpenTelemetry.Metrics.Test // candidate for removal after above step. var mre = new ManualResetEvent(false); var argsForMeterCollect = new ArgsToThread(); - argsForMeterCollect.mreToBlockStartOfThread = mre; - argsForMeterCollect.callback = () => meter.Collect(); + argsForMeterCollect.MreToBlockStartOfThread = mre; + argsForMeterCollect.Callback = () => meter.Collect(); var argsForCounterAdd = new ArgsToThread(); - argsForCounterAdd.mreToBlockStartOfThread = mre; - argsForCounterAdd.callback = () => testCounter.Add(context, 100.0, ls1); + argsForCounterAdd.MreToBlockStartOfThread = mre; + argsForCounterAdd.Callback = () => testCounter.Add(context, 100.0, ls1); var collectThread = new Thread(ThreadMethod); var updateThread = new Thread(ThreadMethod); @@ -300,10 +306,10 @@ namespace OpenTelemetry.Metrics.Test meter.Collect(); double sum = 0; - - foreach (var exportedData in testProcessor.metrics) + + foreach (var exportedData in testProcessor.Metrics) { - exportedData.Data.ForEach((data => sum += (data as DoubleSumData).Sum)); + exportedData.Data.ForEach(data => sum += (data as DoubleSumData).Sum); } // 210 = 110 from initial update, 100 from the multi-thread test case. @@ -313,18 +319,18 @@ namespace OpenTelemetry.Metrics.Test private static void ThreadMethod(object obj) { var args = obj as ArgsToThread; - var mre = args.mreToBlockStartOfThread; - var callBack = args.callback; + var mre = args.MreToBlockStartOfThread; + var callBack = args.Callback; // Wait until signalled to call Collect. mre.WaitOne(); callBack(); } - } - class ArgsToThread - { - public ManualResetEvent mreToBlockStartOfThread; - public Action callback; + private class ArgsToThread + { + public ManualResetEvent MreToBlockStartOfThread; + public Action Callback; + } } } diff --git a/test/OpenTelemetry.Tests/Implementation/Metrics/LabelSetTest.cs b/test/OpenTelemetry.Tests/Implementation/Metrics/LabelSetTest.cs index 9863ec70f..6e815cb3d 100644 --- a/test/OpenTelemetry.Tests/Implementation/Metrics/LabelSetTest.cs +++ b/test/OpenTelemetry.Tests/Implementation/Metrics/LabelSetTest.cs @@ -15,9 +15,6 @@ // using System.Collections.Generic; using System.Linq; -using OpenTelemetry.Metrics; -using OpenTelemetry.Metrics.Configuration; -using OpenTelemetry.Metrics.Export; using Xunit; namespace OpenTelemetry.Metrics.Test @@ -63,6 +60,7 @@ namespace OpenTelemetry.Metrics.Test labels1.Add(new KeyValuePair("dim1", "value1")); labels1.Add(new KeyValuePair("dim2", "value2")); labels1.Add(new KeyValuePair("dim3", "value3")); + // Construct labelset some labels. var labelSet1 = new LabelSetSdk(labels1); @@ -70,6 +68,7 @@ namespace OpenTelemetry.Metrics.Test labels1.Add(new KeyValuePair("dim3", "value3")); labels1.Add(new KeyValuePair("dim2", "value2")); labels1.Add(new KeyValuePair("dim1", "value1")); + // Construct another labelset with same labels but in different order. var labelSet2 = new LabelSetSdk(labels1); @@ -82,7 +81,6 @@ namespace OpenTelemetry.Metrics.Test Assert.True(hashSet.Count == 1); Assert.Equal(labelSet1.GetHashCode(), labelSet2.GetHashCode()); Assert.Equal(labelSet1, labelSet2); - } } } diff --git a/test/OpenTelemetry.Tests/Implementation/Metrics/MeterFactoryBaseTests.cs b/test/OpenTelemetry.Tests/Implementation/Metrics/MeterFactoryBaseTests.cs index be35a87f9..f78110bcc 100644 --- a/test/OpenTelemetry.Tests/Implementation/Metrics/MeterFactoryBaseTests.cs +++ b/test/OpenTelemetry.Tests/Implementation/Metrics/MeterFactoryBaseTests.cs @@ -31,7 +31,7 @@ namespace OpenTelemetry.Metrics.Config.Test public void MeterFactory_Default() { Assert.NotNull(MeterFactoryBase.Default); - var defaultMeter = MeterFactoryBase.Default.GetMeter(""); + var defaultMeter = MeterFactoryBase.Default.GetMeter(string.Empty); Assert.NotNull(defaultMeter); Assert.Same(defaultMeter, MeterFactoryBase.Default.GetMeter("named meter")); @@ -45,7 +45,7 @@ namespace OpenTelemetry.Metrics.Config.Test var factory = MeterFactory.Create(b => { }); MeterFactoryBase.SetDefault(factory); - var defaultMeter = MeterFactoryBase.Default.GetMeter(""); + var defaultMeter = MeterFactoryBase.Default.GetMeter(string.Empty); Assert.NotNull(defaultMeter); Assert.IsType(defaultMeter); @@ -71,7 +71,7 @@ namespace OpenTelemetry.Metrics.Config.Test [Fact] public void MeterFactory_UpdateDefault_CachedTracer() { - var defaultMeter = MeterFactoryBase.Default.GetMeter(""); + var defaultMeter = MeterFactoryBase.Default.GetMeter(string.Empty); var noOpCounter = defaultMeter.CreateDoubleCounter("ctr"); Assert.IsType>(noOpCounter); @@ -79,7 +79,7 @@ namespace OpenTelemetry.Metrics.Config.Test var counter = defaultMeter.CreateDoubleCounter("ctr"); Assert.IsType(counter); - var newdefaultMeter = MeterFactoryBase.Default.GetMeter(""); + var newdefaultMeter = MeterFactoryBase.Default.GetMeter(string.Empty); Assert.NotSame(defaultMeter, newdefaultMeter); Assert.IsType(newdefaultMeter); } diff --git a/test/OpenTelemetry.Tests/Implementation/Metrics/MetricsTest.cs b/test/OpenTelemetry.Tests/Implementation/Metrics/MetricsTest.cs index 7642cf446..806c98e7c 100644 --- a/test/OpenTelemetry.Tests/Implementation/Metrics/MetricsTest.cs +++ b/test/OpenTelemetry.Tests/Implementation/Metrics/MetricsTest.cs @@ -14,12 +14,12 @@ // limitations under the License. // -using System.Linq; using System.Collections.Generic; +using System.Linq; using OpenTelemetry.Metrics.Configuration; +using OpenTelemetry.Metrics.Export; using OpenTelemetry.Trace; using Xunit; -using OpenTelemetry.Metrics.Export; namespace OpenTelemetry.Metrics.Test { @@ -53,8 +53,8 @@ namespace OpenTelemetry.Metrics.Test meter.Collect(); - Assert.Single(testProcessor.metrics); - var metric = testProcessor.metrics[0]; + Assert.Single(testProcessor.Metrics); + var metric = testProcessor.Metrics[0]; Assert.Equal("testCounter", metric.MetricName); Assert.Equal("library1", metric.MetricNamespace); @@ -73,7 +73,7 @@ namespace OpenTelemetry.Metrics.Test metricLong = metricSeries as Int64SumData; Assert.Equal(210, metricLong.Sum); } - + [Fact] public void MeasureSendsAggregateToRegisteredProcessor() { @@ -96,8 +96,8 @@ namespace OpenTelemetry.Metrics.Test meter.Collect(); - Assert.Single(testProcessor.metrics); - var metric = testProcessor.metrics[0]; + Assert.Single(testProcessor.Metrics); + var metric = testProcessor.Metrics[0]; Assert.Equal("testMeasure", metric.MetricName); Assert.Equal("library1", metric.MetricNamespace); @@ -124,12 +124,12 @@ namespace OpenTelemetry.Metrics.Test { var testProcessor = new TestMetricProcessor(); var meter = MeterFactory.Create(mb => mb.SetMetricProcessor(testProcessor)).GetMeter("library1") as MeterSdk; - var testObserver = meter.CreateInt64Observer("testObserver", TestCallbackLong); + var testObserver = meter.CreateInt64Observer("testObserver", this.TestCallbackLong); meter.Collect(); - Assert.Single(testProcessor.metrics); - var metric = testProcessor.metrics[0]; + Assert.Single(testProcessor.Metrics); + var metric = testProcessor.Metrics[0]; Assert.Equal("testObserver", metric.MetricName); Assert.Equal("library1", metric.MetricNamespace); @@ -150,12 +150,12 @@ namespace OpenTelemetry.Metrics.Test { var testProcessor = new TestMetricProcessor(); var meter = MeterFactory.Create(mb => mb.SetMetricProcessor(testProcessor)).GetMeter("library1") as MeterSdk; - var testObserver = meter.CreateDoubleObserver("testObserver", TestCallbackDouble); + var testObserver = meter.CreateDoubleObserver("testObserver", this.TestCallbackDouble); meter.Collect(); - Assert.Single(testProcessor.metrics); - var metric = testProcessor.metrics[0]; + Assert.Single(testProcessor.Metrics); + var metric = testProcessor.Metrics[0]; Assert.Equal("testObserver", metric.MetricName); Assert.Equal("library1", metric.MetricNamespace); diff --git a/test/OpenTelemetry.Tests/Implementation/Metrics/PushControllerTest.cs b/test/OpenTelemetry.Tests/Implementation/Metrics/PushControllerTest.cs index 4e0e616e9..998499ee7 100644 --- a/test/OpenTelemetry.Tests/Implementation/Metrics/PushControllerTest.cs +++ b/test/OpenTelemetry.Tests/Implementation/Metrics/PushControllerTest.cs @@ -14,12 +14,12 @@ // limitations under the License. // -using System.Collections.Generic; -using Xunit; -using OpenTelemetry.Metrics.Export; -using System.Diagnostics; using System; +using System.Collections.Generic; +using System.Diagnostics; using System.Threading; +using OpenTelemetry.Metrics.Export; +using Xunit; using static OpenTelemetry.Metrics.Configuration.MeterFactory; namespace OpenTelemetry.Metrics.Test @@ -44,20 +44,21 @@ namespace OpenTelemetry.Metrics.Test int meter2CollectCount = 0; var meters = new Dictionary(); var testMeter1 = new TestMeter("meter1", testProcessor, () => meter1CollectCount++); - meters.Add(new MeterRegistryKey("meter1", ""), testMeter1); + meters.Add(new MeterRegistryKey("meter1", string.Empty), testMeter1); var testMeter2 = new TestMeter("meter2", testProcessor, () => meter2CollectCount++); - meters.Add(new MeterRegistryKey("meter2", ""), testMeter2); + meters.Add(new MeterRegistryKey("meter2", string.Empty), testMeter2); var pushInterval = TimeSpan.FromMilliseconds(controllerPushIntervalInMsec); - var pushController = new PushMetricController(meters, + var pushController = new PushMetricController( + meters, testProcessor, testExporter, pushInterval, new CancellationTokenSource()); // Validate that collect is called on Meter1, Meter2. - ValidateMeterCollect(ref meter1CollectCount, collectionCountExpectedMin, "meter1", TimeSpan.FromMilliseconds(maxWaitInMsec)); - ValidateMeterCollect(ref meter2CollectCount, collectionCountExpectedMin, "meter2", TimeSpan.FromMilliseconds(maxWaitInMsec)); + this.ValidateMeterCollect(ref meter1CollectCount, collectionCountExpectedMin, "meter1", TimeSpan.FromMilliseconds(maxWaitInMsec)); + this.ValidateMeterCollect(ref meter2CollectCount, collectionCountExpectedMin, "meter2", TimeSpan.FromMilliseconds(maxWaitInMsec)); // Export must be called same no: of times as Collect. Assert.True(exportCalledCount >= collectionCountExpectedMin); @@ -72,9 +73,10 @@ namespace OpenTelemetry.Metrics.Test Thread.Sleep(10); } - Assert.True(meterCollectCount >= expectedMeterCollectCount + Assert.True( + meterCollectCount >= expectedMeterCollectCount && meterCollectCount <= expectedMeterCollectCount, - $"Actual Collect Count for meter: {meterName} is {meterCollectCount} vs Expected count of {expectedMeterCollectCount}"); + $"Actual Collect Count for meter: {meterName} is {meterCollectCount} vs Expected count of {expectedMeterCollectCount}"); } } } diff --git a/test/OpenTelemetry.Tests/Implementation/Metrics/TestMeter.cs b/test/OpenTelemetry.Tests/Implementation/Metrics/TestMeter.cs index 579fd19ed..96499d9d0 100644 --- a/test/OpenTelemetry.Tests/Implementation/Metrics/TestMeter.cs +++ b/test/OpenTelemetry.Tests/Implementation/Metrics/TestMeter.cs @@ -15,19 +15,13 @@ // using System; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using OpenTelemetry.Metrics.Aggregators; using OpenTelemetry.Metrics.Export; namespace OpenTelemetry.Metrics.Test { internal class TestMeter : MeterSdk { - Action collectAction; + private readonly Action collectAction; internal TestMeter(string meterName, MetricProcessor metricProcessor, Action collectAction) : base(meterName, metricProcessor) diff --git a/test/OpenTelemetry.Tests/Implementation/Metrics/TestMetricExporter.cs b/test/OpenTelemetry.Tests/Implementation/Metrics/TestMetricExporter.cs index 0e1194a01..0bb501a1a 100644 --- a/test/OpenTelemetry.Tests/Implementation/Metrics/TestMetricExporter.cs +++ b/test/OpenTelemetry.Tests/Implementation/Metrics/TestMetricExporter.cs @@ -25,7 +25,7 @@ namespace OpenTelemetry.Metrics.Test internal class TestMetricExporter : MetricExporter { public List Metrics = new List(); - private readonly Action onExport; + private readonly Action onExport; public TestMetricExporter(Action onExport) { diff --git a/test/OpenTelemetry.Tests/Implementation/Metrics/TestMetricProcessor.cs b/test/OpenTelemetry.Tests/Implementation/Metrics/TestMetricProcessor.cs index db906ffd7..2aaf66ba9 100644 --- a/test/OpenTelemetry.Tests/Implementation/Metrics/TestMetricProcessor.cs +++ b/test/OpenTelemetry.Tests/Implementation/Metrics/TestMetricProcessor.cs @@ -21,17 +21,17 @@ namespace OpenTelemetry.Metrics.Test { internal class TestMetricProcessor : MetricProcessor { - public List metrics = new List(); + public List Metrics = new List(); public override void FinishCollectionCycle(out IEnumerable metrics) { - metrics = this.metrics; - this.metrics = new List(); + metrics = this.Metrics; + this.Metrics = new List(); } public override void Process(Metric metric) { - this.metrics.Add(metric); + this.Metrics.Add(metric); } } } diff --git a/test/OpenTelemetry.Tests/Implementation/Resources/ResourceTest.cs b/test/OpenTelemetry.Tests/Implementation/Resources/ResourceTest.cs index 10dd6c785..550a829f7 100644 --- a/test/OpenTelemetry.Tests/Implementation/Resources/ResourceTest.cs +++ b/test/OpenTelemetry.Tests/Implementation/Resources/ResourceTest.cs @@ -13,11 +13,11 @@ // See the License for the specific language governing permissions and // limitations under the License. // -using Xunit; -using OpenTelemetry.Resources; -using System.Collections.Generic; using System; +using System.Collections.Generic; using System.Linq; +using OpenTelemetry.Resources; +using Xunit; namespace OpenTelemetry.Impl.Resources { @@ -150,8 +150,8 @@ namespace OpenTelemetry.Impl.Resources { var attributes = new Dictionary { - { "dynamic", new {} }, - { "array", new int [1]}, + { "dynamic", new { } }, + { "array", new int[1] }, { "complex", this }, { "float", 0.1f }, }; @@ -337,19 +337,13 @@ namespace OpenTelemetry.Impl.Resources } } - private Dictionary CreateAttributes(int attributeCount, int startIndex = 0) - { - var attributes = new Dictionary(); - AddAttributes(attributes, attributeCount, startIndex); - return attributes; - } - private static void ValidateAttributes(IEnumerable> attributes, int startIndex = 0) { var keyValuePairs = attributes as KeyValuePair[] ?? attributes.ToArray(); for (var i = startIndex; i < keyValuePairs.Length; ++i) { - Assert.Contains(new KeyValuePair( + Assert.Contains( + new KeyValuePair( $"{KeyName}{i}", $"{ValueName}{i}"), keyValuePairs); } } @@ -368,5 +362,12 @@ namespace OpenTelemetry.Impl.Resources return new string(Enumerable.Repeat(chars, length) .Select(s => s[Random.Next(s.Length)]).ToArray()); } + + private Dictionary CreateAttributes(int attributeCount, int startIndex = 0) + { + var attributes = new Dictionary(); + AddAttributes(attributes, attributeCount, startIndex); + return attributes; + } } } diff --git a/test/OpenTelemetry.Tests/Implementation/Testing/Export/TestExporter.cs b/test/OpenTelemetry.Tests/Implementation/Testing/Export/TestExporter.cs index 37e9b0b48..e396d2747 100644 --- a/test/OpenTelemetry.Tests/Implementation/Testing/Export/TestExporter.cs +++ b/test/OpenTelemetry.Tests/Implementation/Testing/Export/TestExporter.cs @@ -14,11 +14,10 @@ // limitations under the License. // using System; -using System.Collections.Generic; using System.Collections.Concurrent; +using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; -using OpenTelemetry.Trace; using OpenTelemetry.Trace.Export; namespace OpenTelemetry.Testing.Export @@ -27,12 +26,13 @@ namespace OpenTelemetry.Testing.Export { private readonly ConcurrentQueue spanDataList = new ConcurrentQueue(); private readonly Action> onExport; + public TestExporter(Action> onExport) { this.onExport = onExport; } - public SpanData[] ExportedSpans => spanDataList.ToArray(); + public SpanData[] ExportedSpans => this.spanDataList.ToArray(); public bool WasShutDown { get; private set; } = false; diff --git a/test/OpenTelemetry.Tests/Implementation/Trace/ActivityListenerSdkTest.cs b/test/OpenTelemetry.Tests/Implementation/Trace/ActivityListenerSdkTest.cs index ea9b82e33..0c9f2e4e6 100644 --- a/test/OpenTelemetry.Tests/Implementation/Trace/ActivityListenerSdkTest.cs +++ b/test/OpenTelemetry.Tests/Implementation/Trace/ActivityListenerSdkTest.cs @@ -1,4 +1,4 @@ -// +// // Copyright The OpenTelemetry Authors // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -32,9 +32,9 @@ namespace OpenTelemetry.Tests.Implementation.Trace [Fact] public void BuildSamplingParametersHandlesCurrentActivity() { - using var activitySource = new ActivitySource(nameof(BuildSamplingParametersHandlesCurrentActivity)); + using var activitySource = new ActivitySource(nameof(this.BuildSamplingParametersHandlesCurrentActivity)); - var latestSamplingParameters = new ActivitySamplingParameters(); + var latestSamplingParameters = default(ActivitySamplingParameters); using var listener = new ActivityListener { diff --git a/test/OpenTelemetry.Tests/Implementation/Trace/AttributesExtensions.cs b/test/OpenTelemetry.Tests/Implementation/Trace/AttributesExtensions.cs index 10ae6487b..374bb44c8 100644 --- a/test/OpenTelemetry.Tests/Implementation/Trace/AttributesExtensions.cs +++ b/test/OpenTelemetry.Tests/Implementation/Trace/AttributesExtensions.cs @@ -27,7 +27,8 @@ namespace OpenTelemetry.Tests return attributes.FirstOrDefault(kvp => kvp.Key == key).Value; } - public static void AssertAreSame(this IEnumerable> attributes, + public static void AssertAreSame( + this IEnumerable> attributes, IEnumerable> expectedAttributes) { var expectedKeyValuePairs = expectedAttributes as KeyValuePair[] ?? expectedAttributes.ToArray(); diff --git a/test/OpenTelemetry.Tests/Implementation/Trace/BlankSpanTest.cs b/test/OpenTelemetry.Tests/Implementation/Trace/BlankSpanTest.cs index d6983875d..75e1d56e0 100644 --- a/test/OpenTelemetry.Tests/Implementation/Trace/BlankSpanTest.cs +++ b/test/OpenTelemetry.Tests/Implementation/Trace/BlankSpanTest.cs @@ -14,7 +14,6 @@ // limitations under the License. // -using System; using System.Collections.Generic; using Xunit; @@ -34,6 +33,7 @@ namespace OpenTelemetry.Trace.Test multipleAttributes.Add("MyBooleanAttributeKey", true); multipleAttributes.Add("MyLongAttributeKey", 123); multipleAttributes.Add("MyDoubleAttributeKey", 0.005); + // Tests only that all the methods are not crashing/throwing errors. BlankSpan.Instance.SetAttribute( "MyStringAttributeKey2", "MyStringAttributeValue2"); @@ -62,7 +62,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void BadArguments_DoesNotThrow() { - BlankSpan.Instance.Status = new Status(); + BlankSpan.Instance.Status = default(Status); BlankSpan.Instance.UpdateName(null); BlankSpan.Instance.SetAttribute(null, string.Empty); BlankSpan.Instance.SetAttribute(string.Empty, null); diff --git a/test/OpenTelemetry.Tests/Implementation/Trace/Config/BroadcastProcessorTests.cs b/test/OpenTelemetry.Tests/Implementation/Trace/Config/BroadcastProcessorTests.cs index c59f182ea..330aad878 100644 --- a/test/OpenTelemetry.Tests/Implementation/Trace/Config/BroadcastProcessorTests.cs +++ b/test/OpenTelemetry.Tests/Implementation/Trace/Config/BroadcastProcessorTests.cs @@ -41,7 +41,8 @@ namespace OpenTelemetry.Tests.Impl.Trace.Config bool start2Called = false; bool end1Called = false; bool end2Called = false; - var processor1 = new TestProcessor(ss => + var processor1 = new TestProcessor( + ss => { start1Called = true; Assert.False(start2Called); @@ -54,7 +55,8 @@ namespace OpenTelemetry.Tests.Impl.Trace.Config Assert.True(start2Called); Assert.False(end2Called); }); - var processor2 = new TestProcessor(ss => + var processor2 = new TestProcessor( + ss => { start2Called = true; Assert.True(start1Called); @@ -66,7 +68,6 @@ namespace OpenTelemetry.Tests.Impl.Trace.Config Assert.True(start1Called); Assert.True(start2Called); Assert.True(end1Called); - }); var broadcastProcessor = new BroadcastProcessor(new[] { processor1, processor2 }); @@ -91,7 +92,8 @@ namespace OpenTelemetry.Tests.Impl.Trace.Config bool start2Called = false; bool end1Called = false; bool end2Called = false; - var processor1 = new TestProcessor(ss => + var processor1 = new TestProcessor( + ss => { start1Called = true; Assert.False(start2Called); @@ -108,7 +110,8 @@ namespace OpenTelemetry.Tests.Impl.Trace.Config throw new Exception("End exception"); }); - var processor2 = new TestProcessor(ss => + var processor2 = new TestProcessor( + ss => { start2Called = true; Assert.True(start1Called); @@ -120,7 +123,6 @@ namespace OpenTelemetry.Tests.Impl.Trace.Config Assert.True(start1Called); Assert.True(start2Called); Assert.True(end1Called); - }); var broadcastProcessor = new BroadcastProcessor(new[] { processor1, processor2 }); @@ -159,8 +161,6 @@ namespace OpenTelemetry.Tests.Impl.Trace.Config { private readonly Action onStart; private readonly Action onEnd; - public bool ShutdownCalled { get; private set; } = false; - public bool DisposedCalled { get; private set; } = false; public TestProcessor(Action onStart, Action onEnd) { @@ -168,6 +168,10 @@ namespace OpenTelemetry.Tests.Impl.Trace.Config this.onEnd = onEnd; } + public bool ShutdownCalled { get; private set; } = false; + + public bool DisposedCalled { get; private set; } = false; + public override void OnStart(SpanData span) { this.onStart?.Invoke(span); diff --git a/test/OpenTelemetry.Tests/Implementation/Trace/Config/TraceParamsTest.cs b/test/OpenTelemetry.Tests/Implementation/Trace/Config/TraceConfigTest.cs similarity index 93% rename from test/OpenTelemetry.Tests/Implementation/Trace/Config/TraceParamsTest.cs rename to test/OpenTelemetry.Tests/Implementation/Trace/Config/TraceConfigTest.cs index 3cc8387dc..752934ac6 100644 --- a/test/OpenTelemetry.Tests/Implementation/Trace/Config/TraceParamsTest.cs +++ b/test/OpenTelemetry.Tests/Implementation/Trace/Config/TraceConfigTest.cs @@ -1,4 +1,4 @@ -// +// // Copyright The OpenTelemetry Authors // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -43,9 +43,8 @@ namespace OpenTelemetry.Trace.Config.Test Assert.Throws(() => new TracerConfiguration(1, 0, 1)); } - [Fact] - public void updateTraceParams_NonPositiveMaxNumberOfLinks() + public void UpdateTraceParams_NonPositiveMaxNumberOfLinks() { Assert.Throws(() => new TracerConfiguration(1, 1, 0)); } diff --git a/test/OpenTelemetry.Tests/Implementation/Trace/Config/TracerBuilderTests.cs b/test/OpenTelemetry.Tests/Implementation/Trace/Config/TracerBuilderTests.cs index 021c2a4b9..6f2078df2 100644 --- a/test/OpenTelemetry.Tests/Implementation/Trace/Config/TracerBuilderTests.cs +++ b/test/OpenTelemetry.Tests/Implementation/Trace/Config/TracerBuilderTests.cs @@ -16,7 +16,6 @@ using System; using System.Linq; -using OpenTelemetry.Context.Propagation; using OpenTelemetry.Resources; using OpenTelemetry.Testing.Export; using OpenTelemetry.Trace; @@ -102,6 +101,7 @@ namespace OpenTelemetry.Tests.Impl.Trace private class TestInstrumentation { private readonly Tracer tracer; + public TestInstrumentation(Tracer tracer) { this.tracer = tracer; diff --git a/test/OpenTelemetry.Tests/Implementation/Trace/Config/TracerFactoryBaseTests.cs b/test/OpenTelemetry.Tests/Implementation/Trace/Config/TracerFactoryBaseTests.cs index 6da24a3e0..b40c6d0b5 100644 --- a/test/OpenTelemetry.Tests/Implementation/Trace/Config/TracerFactoryBaseTests.cs +++ b/test/OpenTelemetry.Tests/Implementation/Trace/Config/TracerFactoryBaseTests.cs @@ -32,7 +32,7 @@ namespace OpenTelemetry.Tests.Impl.Trace.Config public void TraceFactory_Default() { Assert.NotNull(TracerFactoryBase.Default); - var defaultTracer = TracerFactoryBase.Default.GetTracer(""); + var defaultTracer = TracerFactoryBase.Default.GetTracer(string.Empty); Assert.NotNull(defaultTracer); Assert.Same(defaultTracer, TracerFactoryBase.Default.GetTracer("named tracerSdk")); @@ -46,7 +46,7 @@ namespace OpenTelemetry.Tests.Impl.Trace.Config var factory = TracerFactory.Create(b => { }); TracerFactoryBase.SetDefault(factory); - var defaultTracer = TracerFactoryBase.Default.GetTracer(""); + var defaultTracer = TracerFactoryBase.Default.GetTracer(string.Empty); Assert.NotNull(defaultTracer); Assert.IsType(defaultTracer); @@ -72,7 +72,7 @@ namespace OpenTelemetry.Tests.Impl.Trace.Config [Fact] public void TraceFactory_UpdateDefault_CachedTracer() { - var defaultTracer = TracerFactoryBase.Default.GetTracer(""); + var defaultTracer = TracerFactoryBase.Default.GetTracer(string.Empty); var noopSpan = defaultTracer.StartSpan("foo"); Assert.IsType(noopSpan); @@ -80,7 +80,7 @@ namespace OpenTelemetry.Tests.Impl.Trace.Config var span = defaultTracer.StartSpan("foo"); Assert.IsType(span); - var newDefaultTracer = TracerFactoryBase.Default.GetTracer(""); + var newDefaultTracer = TracerFactoryBase.Default.GetTracer(string.Empty); Assert.NotSame(defaultTracer, newDefaultTracer); Assert.IsType(newDefaultTracer); } diff --git a/test/OpenTelemetry.Tests/Implementation/Trace/Config/TracerFactoryTest.cs b/test/OpenTelemetry.Tests/Implementation/Trace/Config/TracerFactoryTest.cs index a0b6b8ea2..0cf593077 100644 --- a/test/OpenTelemetry.Tests/Implementation/Trace/Config/TracerFactoryTest.cs +++ b/test/OpenTelemetry.Tests/Implementation/Trace/Config/TracerFactoryTest.cs @@ -19,7 +19,6 @@ using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; -using OpenTelemetry.Context.Propagation; using OpenTelemetry.Resources; using OpenTelemetry.Testing.Export; using OpenTelemetry.Trace.Configuration; @@ -40,7 +39,7 @@ namespace OpenTelemetry.Trace.Test public void CreateFactory_DefaultBuilder() { var tracerFactory = TracerFactory.Create(b => { }); - var tracer = tracerFactory.GetTracer(""); + var tracer = tracerFactory.GetTracer(string.Empty); Assert.NotNull(tracer); Assert.IsType(tracer); @@ -120,7 +119,6 @@ namespace OpenTelemetry.Trace.Test Assert.True(processor.IsDisposed); } - [Fact] public void CreateFactory_BuilderWithMultiplePipelines() { @@ -165,7 +163,7 @@ namespace OpenTelemetry.Trace.Test public void GetTracer_NoName_NoVersion() { var tracerFactory = TracerFactory.Create(b => { }); - var tracer = (TracerSdk)tracerFactory.GetTracer(""); + var tracer = (TracerSdk)tracerFactory.GetTracer(string.Empty); Assert.DoesNotContain(tracer.LibraryResource.Attributes, kvp => kvp.Key == "name"); Assert.DoesNotContain(tracer.LibraryResource.Attributes, kvp => kvp.Key == "version"); } @@ -228,7 +226,7 @@ namespace OpenTelemetry.Trace.Test var tracer3 = tracerFactory.GetTracer("foo", "semver:2.3.4"); var tracer4 = tracerFactory.GetTracer("bar", "semver:1.2.3"); var tracer5 = tracerFactory.GetTracer("foo", "semver:1.2.3"); - var tracer6 = tracerFactory.GetTracer(""); + var tracer6 = tracerFactory.GetTracer(string.Empty); var tracer7 = tracerFactory.GetTracer(null); var tracer8 = tracerFactory.GetTracer(null, "semver:1.2.3"); @@ -246,8 +244,6 @@ namespace OpenTelemetry.Trace.Test private readonly SpanExporter exporter; private readonly Action onEnd; - public bool IsDisposed { get; private set; } - public TestProcessor(Action onEnd) { this.exporter = null; @@ -260,9 +256,11 @@ namespace OpenTelemetry.Trace.Test this.onEnd = null; } + public bool IsDisposed { get; private set; } + public void Dispose() { - IsDisposed = true; + this.IsDisposed = true; } public override void OnStart(SpanData span) @@ -272,7 +270,7 @@ namespace OpenTelemetry.Trace.Test public override void OnEnd(SpanData span) { this.onEnd?.Invoke(span); - exporter?.ExportAsync(new[] { span }, default); + this.exporter?.ExportAsync(new[] { span }, default); } public override Task ShutdownAsync(CancellationToken cancellationToken) @@ -284,13 +282,14 @@ namespace OpenTelemetry.Trace.Test private class TestInstrumentation : IDisposable { private readonly Tracer tracer; - public bool IsDisposed { get; private set; } public TestInstrumentation(Tracer tracer) { this.tracer = tracer; } + public bool IsDisposed { get; private set; } + public SpanSdk Collect() { var span = this.tracer.StartSpan("foo"); @@ -300,7 +299,7 @@ namespace OpenTelemetry.Trace.Test public void Dispose() { - IsDisposed = true; + this.IsDisposed = true; } } } diff --git a/test/OpenTelemetry.Tests/Implementation/Trace/CurrentSpanTests.cs b/test/OpenTelemetry.Tests/Implementation/Trace/CurrentSpanTests.cs index 705db5ffc..22897967d 100644 --- a/test/OpenTelemetry.Tests/Implementation/Trace/CurrentSpanTests.cs +++ b/test/OpenTelemetry.Tests/Implementation/Trace/CurrentSpanTests.cs @@ -1,4 +1,4 @@ -// +// // Copyright The OpenTelemetry Authors // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -31,7 +31,7 @@ namespace OpenTelemetry.Trace.Test Activity.DefaultIdFormat = ActivityIdFormat.W3C; Activity.ForceDefaultIdFormat = true; - tracer = TracerFactory.Create(b => { }).GetTracer(null); + this.tracer = TracerFactory.Create(b => { }).GetTracer(null); } [Fact] @@ -55,7 +55,7 @@ namespace OpenTelemetry.Trace.Test public void WithSpan_CloseDetaches(bool endSpan, bool recordEvents) { var spanContext = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), recordEvents ? ActivityTraceFlags.Recorded : ActivityTraceFlags.None); - var span = (SpanSdk)tracer.StartSpan("foo", spanContext); + var span = (SpanSdk)this.tracer.StartSpan("foo", spanContext); Assert.False(this.tracer.CurrentSpan.Context.IsValid); using (this.tracer.WithSpan(span, endSpan)) @@ -80,7 +80,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void WithSpan_NoFlag_DoesNotEndSpan() { - var span = (SpanSdk)tracer.StartSpan("foo"); + var span = (SpanSdk)this.tracer.StartSpan("foo"); Assert.False(this.tracer.CurrentSpan.Context.IsValid); using (this.tracer.WithSpan(span)) @@ -99,7 +99,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void WithSpan_AttachAndDetach() { - var span = (SpanSdk)tracer.StartSpan("foo"); + var span = (SpanSdk)this.tracer.StartSpan("foo"); Assert.False(this.tracer.CurrentSpan.Context.IsValid); using (this.tracer.WithSpan(span)) @@ -132,7 +132,7 @@ namespace OpenTelemetry.Trace.Test public void WithSpan_EndDoesNotDetach(bool endSpan, bool recordEvents) { var spanContext = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), recordEvents ? ActivityTraceFlags.Recorded : ActivityTraceFlags.None); - var span = (SpanSdk)tracer.StartSpan("foo", spanContext); + var span = (SpanSdk)this.tracer.StartSpan("foo", spanContext); Assert.False(this.tracer.CurrentSpan.Context.IsValid); using (this.tracer.WithSpan(span, endSpan)) @@ -175,7 +175,7 @@ namespace OpenTelemetry.Trace.Test activity.Start(); TelemetrySpan span; - using (var scope = tracer.StartActiveSpanFromActivity("foo", activity, out span)) + using (var scope = this.tracer.StartActiveSpanFromActivity("foo", activity, out span)) { Assert.IsType(scope); Assert.Same(scope, span); @@ -194,7 +194,7 @@ namespace OpenTelemetry.Trace.Test public void StartActiveSpan_OwningActivity() { SpanSdk span = null; - using (var scope = tracer.StartActiveSpan("foo", out var ispan)) + using (var scope = this.tracer.StartActiveSpan("foo", out var ispan)) { Assert.IsType(scope); span = (SpanSdk)scope; @@ -213,7 +213,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartActiveSpan_WithSpan() { - using (var scope = tracer.StartActiveSpan("foo", out var span)) + using (var scope = this.tracer.StartActiveSpan("foo", out var span)) { Assert.Same(scope, this.tracer.WithSpan(span)); } @@ -229,10 +229,10 @@ namespace OpenTelemetry.Trace.Test { var spanContext = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), recordEvents ? ActivityTraceFlags.Recorded : ActivityTraceFlags.None); - var parentSpan = tracer.StartSpan("parent", spanContext); + var parentSpan = this.tracer.StartSpan("parent", spanContext); var parentScope = this.tracer.WithSpan(parentSpan); - var childSpan = (SpanSdk)tracer.StartSpan("child", parentSpan); + var childSpan = (SpanSdk)this.tracer.StartSpan("child", parentSpan); var childActivity = childSpan.Activity; Assert.Same(parentSpan, this.tracer.CurrentSpan); @@ -243,7 +243,6 @@ namespace OpenTelemetry.Trace.Test Assert.Same(childSpan, this.tracer.CurrentSpan); Assert.Equal(childActivity, Activity.Current); - // span not ended Assert.Equal(default, ((SpanSdk)parentSpan).EndTimestamp); } @@ -257,11 +256,11 @@ namespace OpenTelemetry.Trace.Test { var spanContext = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), recordEvents ? ActivityTraceFlags.Recorded : ActivityTraceFlags.None); - var parentSpan = (SpanSdk)tracer.StartSpan("parent", spanContext); + var parentSpan = (SpanSdk)this.tracer.StartSpan("parent", spanContext); var parentActivity = parentSpan.Activity; var parentScope = this.tracer.WithSpan(parentSpan); - var childSpan = (SpanSdk)tracer.StartSpan("child"); + var childSpan = (SpanSdk)this.tracer.StartSpan("child"); Assert.Same(parentSpan, this.tracer.CurrentSpan); using (this.tracer.WithSpan(childSpan, endSpan)) { @@ -283,7 +282,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void WithSpan_SameActivityCreateScopeTwice() { - var span = (SpanSdk)tracer.StartRootSpan("foo"); + var span = (SpanSdk)this.tracer.StartRootSpan("foo"); using (var scope1 = this.tracer.WithSpan(span)) { @@ -304,7 +303,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void WithSpan_NullActivity() { - var span = (SpanSdk)tracer.StartRootSpan("foo"); + var span = (SpanSdk)this.tracer.StartRootSpan("foo"); span.Activity.Stop(); @@ -338,7 +337,7 @@ namespace OpenTelemetry.Trace.Test { var spanContext = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), recordEvents ? ActivityTraceFlags.Recorded : ActivityTraceFlags.None); - var span = (SpanSdk)tracer.StartSpan("foo", spanContext); + var span = (SpanSdk)this.tracer.StartSpan("foo", spanContext); Assert.False(this.tracer.CurrentSpan.Context.IsValid); using (this.tracer.WithSpan(span)) { diff --git a/test/OpenTelemetry.Tests/Implementation/Trace/EventTest.cs b/test/OpenTelemetry.Tests/Implementation/Trace/EventTest.cs index 880814102..0a11acd18 100644 --- a/test/OpenTelemetry.Tests/Implementation/Trace/EventTest.cs +++ b/test/OpenTelemetry.Tests/Implementation/Trace/EventTest.cs @@ -69,7 +69,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void FromDescriptionAndAttributes_NullAttributes() { - var evnt = new Event("", DateTime.UtcNow, null); + var evnt = new Event(string.Empty, DateTime.UtcNow, null); Assert.Empty(evnt.Attributes); } diff --git a/test/OpenTelemetry.Tests/Implementation/Trace/Export/BatchingSpanProcessorTests.cs b/test/OpenTelemetry.Tests/Implementation/Trace/Export/BatchingSpanProcessorTest.cs similarity index 98% rename from test/OpenTelemetry.Tests/Implementation/Trace/Export/BatchingSpanProcessorTests.cs rename to test/OpenTelemetry.Tests/Implementation/Trace/Export/BatchingSpanProcessorTest.cs index c8c181c79..81123bc48 100644 --- a/test/OpenTelemetry.Tests/Implementation/Trace/Export/BatchingSpanProcessorTests.cs +++ b/test/OpenTelemetry.Tests/Implementation/Trace/Export/BatchingSpanProcessorTest.cs @@ -35,31 +35,6 @@ namespace OpenTelemetry.Trace.Export.Test private static readonly TimeSpan DefaultDelay = TimeSpan.FromMilliseconds(30); private static readonly TimeSpan DefaultTimeout = TimeSpan.FromSeconds(1); - private SpanSdk CreateSampledEndedSpan(string spanName, SpanProcessor spanProcessor) - { - var tracer = TracerFactory.Create(b => b - .SetSampler(new AlwaysOnSampler()) - .AddProcessorPipeline(p => p.AddProcessor(e => spanProcessor)) - .SetTracerOptions(new TracerConfiguration())).GetTracer(null); - - var context = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded); - var span = (SpanSdk)tracer.StartSpan(spanName, context); - span.End(); - return span; - } - - private SpanSdk CreateNotSampledEndedSpan(string spanName, SpanProcessor spanProcessor) - { - var tracer = TracerFactory.Create(b => b - .SetSampler(new AlwaysOffSampler()) - .AddProcessorPipeline(p => p.AddProcessor(_ => spanProcessor)) - .SetTracerOptions(new TracerConfiguration())).GetTracer(null); - var context = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.None); - var span = (SpanSdk)tracer.StartSpan(spanName, context); - span.End(); - return span; - } - [Fact] public void ThrowsOnInvalidArguments() { @@ -194,7 +169,6 @@ namespace OpenTelemetry.Trace.Export.Test Assert.Contains(new SpanData(span6), exported); } - [Fact] public void ExportNotSampledSpans() { @@ -203,6 +177,7 @@ namespace OpenTelemetry.Trace.Export.Test using var spanProcessor = new BatchingSpanProcessor(spanExporter, 128, DefaultDelay, 3); var span1 = this.CreateNotSampledEndedSpan(SpanName1, spanProcessor); var span2 = this.CreateSampledEndedSpan(SpanName2, spanProcessor); + // Spans are recorded and exported in the same order as they are ended, we test that a non // sampled span is not exported by creating and ending a sampled span after a non sampled span // and checking that the first exported span is the sampled span (the non sampled did not get @@ -276,7 +251,7 @@ namespace OpenTelemetry.Trace.Export.Test int exportCalledCount = 0; // we'll need about 1.5 sec to export all spans - // we export 100 spans in batches of 2, each export takes 30ms, in one thread + // we export 100 spans in batches of 2, each export takes 30ms, in one thread var spanExporter = new TestExporter(_ => { Interlocked.Increment(ref exportCalledCount); @@ -314,10 +289,12 @@ namespace OpenTelemetry.Trace.Export.Test { for (int i = 0; i < 100; i++) { - spans.Add(CreateSampledEndedSpan(i.ToString(), spanProcessor)); + spans.Add(this.CreateSampledEndedSpan(i.ToString(), spanProcessor)); } + Assert.True(spanExporter.ExportedSpans.Length < spans.Count); } + Assert.True(spanExporter.WasShutDown); Assert.Equal(spans.Count, spanExporter.ExportedSpans.Length); Assert.Equal(spans.Count / batchSize, exportCalledCount); @@ -336,10 +313,36 @@ namespace OpenTelemetry.Trace.Export.Test Thread.Sleep(10); } - Assert.True(exporter.ExportedSpans.Length >= spanCount, + Assert.True( + exporter.ExportedSpans.Length >= spanCount, $"Expected at least {spanCount}, got {exporter.ExportedSpans.Length}"); return exporter.ExportedSpans; } + + private SpanSdk CreateSampledEndedSpan(string spanName, SpanProcessor spanProcessor) + { + var tracer = TracerFactory.Create(b => b + .SetSampler(new AlwaysOnSampler()) + .AddProcessorPipeline(p => p.AddProcessor(e => spanProcessor)) + .SetTracerOptions(new TracerConfiguration())).GetTracer(null); + + var context = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded); + var span = (SpanSdk)tracer.StartSpan(spanName, context); + span.End(); + return span; + } + + private SpanSdk CreateNotSampledEndedSpan(string spanName, SpanProcessor spanProcessor) + { + var tracer = TracerFactory.Create(b => b + .SetSampler(new AlwaysOffSampler()) + .AddProcessorPipeline(p => p.AddProcessor(_ => spanProcessor)) + .SetTracerOptions(new TracerConfiguration())).GetTracer(null); + var context = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.None); + var span = (SpanSdk)tracer.StartSpan(spanName, context); + span.End(); + return span; + } } } diff --git a/test/OpenTelemetry.Tests/Implementation/Trace/Export/SimpleSpanProcessorTests.cs b/test/OpenTelemetry.Tests/Implementation/Trace/Export/SimpleSpanProcessorTest.cs similarity index 76% rename from test/OpenTelemetry.Tests/Implementation/Trace/Export/SimpleSpanProcessorTests.cs rename to test/OpenTelemetry.Tests/Implementation/Trace/Export/SimpleSpanProcessorTest.cs index dae3f4d46..1d4429be2 100644 --- a/test/OpenTelemetry.Tests/Implementation/Trace/Export/SimpleSpanProcessorTests.cs +++ b/test/OpenTelemetry.Tests/Implementation/Trace/Export/SimpleSpanProcessorTest.cs @@ -35,32 +35,15 @@ namespace OpenTelemetry.Trace.Export.Test public SimpleSpanProcessorTest() { - spanExporter = new TestExporter(null); - tracer = TracerFactory.Create(b => b + this.spanExporter = new TestExporter(null); + this.tracer = TracerFactory.Create(b => b .AddProcessorPipeline(p => p - .SetExporter(spanExporter) + .SetExporter(this.spanExporter) .SetExportingProcessor(e => new SimpleSpanProcessor(e))) .SetSampler(new AlwaysParentSampler())) .GetTracer(null); } - private SpanSdk CreateSampledEndedSpan(string spanName) - { - var context = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded); - var span = (SpanSdk)tracer.StartSpan(spanName, context); - span.End(); - return span; - } - - private SpanSdk CreateNotSampledEndedSpan(string spanName) - { - var context = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.None); - var span = (SpanSdk)tracer.StartSpan(spanName, context); - span.End(); - return span; - } - - [Fact] public void ThrowsOnNullExporter() { @@ -70,15 +53,15 @@ namespace OpenTelemetry.Trace.Export.Test [Fact] public void ThrowsInExporter() { - spanExporter = new TestExporter(_ => throw new ArgumentException("123")); - tracer = TracerFactory.Create(b => b + this.spanExporter = new TestExporter(_ => throw new ArgumentException("123")); + this.tracer = TracerFactory.Create(b => b .AddProcessorPipeline(p => p - .SetExporter(spanExporter) + .SetExporter(this.spanExporter) .SetExportingProcessor(e => new SimpleSpanProcessor(e)))) .GetTracer(null); var context = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded); - var span = (SpanSdk)tracer.StartSpan("foo", context); + var span = (SpanSdk)this.tracer.StartSpan("foo", context); // does not throw span.End(); @@ -87,15 +70,15 @@ namespace OpenTelemetry.Trace.Export.Test [Fact] public void ProcessorDoesNotBlockOnExporter() { - spanExporter = new TestExporter(async _ => await Task.Delay(500)); - tracer = TracerFactory.Create(b => b + this.spanExporter = new TestExporter(async _ => await Task.Delay(500)); + this.tracer = TracerFactory.Create(b => b .AddProcessorPipeline(p => p - .SetExporter(spanExporter) + .SetExporter(this.spanExporter) .SetExportingProcessor(e => new SimpleSpanProcessor(e)))) .GetTracer(null); var context = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded); - var span = (SpanSdk)tracer.StartSpan("foo", context); + var span = (SpanSdk)this.tracer.StartSpan("foo", context); // does not block var sw = Stopwatch.StartNew(); @@ -104,12 +87,11 @@ namespace OpenTelemetry.Trace.Export.Test Assert.InRange(sw.Elapsed, TimeSpan.Zero, TimeSpan.FromMilliseconds(100)); - var exported = WaitForSpans(spanExporter, 1, TimeSpan.FromMilliseconds(600)); + var exported = this.WaitForSpans(this.spanExporter, 1, TimeSpan.FromMilliseconds(600)); Assert.Single(exported); } - [Fact] public async Task ShutdownTwice() { @@ -124,10 +106,10 @@ namespace OpenTelemetry.Trace.Export.Test [Fact] public void ExportDifferentSampledSpans() { - var span1 = CreateSampledEndedSpan(SpanName1); - var span2 = CreateSampledEndedSpan(SpanName2); + var span1 = this.CreateSampledEndedSpan(SpanName1); + var span2 = this.CreateSampledEndedSpan(SpanName2); - var exported = WaitForSpans(spanExporter, 2, TimeSpan.FromMilliseconds(100)); + var exported = this.WaitForSpans(this.spanExporter, 2, TimeSpan.FromMilliseconds(100)); Assert.Equal(2, exported.Length); Assert.Contains(new SpanData(span1), exported); Assert.Contains(new SpanData(span2), exported); @@ -136,14 +118,15 @@ namespace OpenTelemetry.Trace.Export.Test [Fact] public void ExportNotSampledSpans() { - var span1 = CreateNotSampledEndedSpan(SpanName1); - var span2 = CreateSampledEndedSpan(SpanName2); + var span1 = this.CreateNotSampledEndedSpan(SpanName1); + var span2 = this.CreateSampledEndedSpan(SpanName2); + // Spans are recorded and exported in the same order as they are ended, we test that a non // sampled span is not exported by creating and ending a sampled span after a non sampled span // and checking that the first exported span is the sampled span (the non sampled did not get // exported). - var exported = WaitForSpans(spanExporter, 1, TimeSpan.FromMilliseconds(100)); + var exported = this.WaitForSpans(this.spanExporter, 1, TimeSpan.FromMilliseconds(100)); // Need to check this because otherwise the variable span1 is unused, other option is to not // have a span1 variable. @@ -153,14 +136,31 @@ namespace OpenTelemetry.Trace.Export.Test public void Dispose() { - spanExporter.ShutdownAsync(CancellationToken.None); + this.spanExporter.ShutdownAsync(CancellationToken.None); Activity.Current = null; } + private SpanSdk CreateSampledEndedSpan(string spanName) + { + var context = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded); + var span = (SpanSdk)this.tracer.StartSpan(spanName, context); + span.End(); + return span; + } + + private SpanSdk CreateNotSampledEndedSpan(string spanName) + { + var context = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.None); + var span = (SpanSdk)this.tracer.StartSpan(spanName, context); + span.End(); + return span; + } + private SpanData[] WaitForSpans(TestExporter exporter, int spanCount, TimeSpan timeout) { Assert.True( - SpinWait.SpinUntil(() => + SpinWait.SpinUntil( + () => { Thread.Sleep(0); return exporter.ExportedSpans.Length >= spanCount; diff --git a/test/OpenTelemetry.Tests/Implementation/Trace/LinkTest.cs b/test/OpenTelemetry.Tests/Implementation/Trace/LinkTest.cs index d9d591df3..a23540d7b 100644 --- a/test/OpenTelemetry.Tests/Implementation/Trace/LinkTest.cs +++ b/test/OpenTelemetry.Tests/Implementation/Trace/LinkTest.cs @@ -27,36 +27,36 @@ namespace OpenTelemetry.Trace.Test public LinkTest() { - spanContext = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.None); + this.spanContext = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.None); - attributesMap.Add("MyAttributeKey0", "MyStringAttribute"); - attributesMap.Add("MyAttributeKey1", 10L); - attributesMap.Add("MyAttributeKey2", true); - attributesMap.Add("MyAttributeKey3", 0.005); + this.attributesMap.Add("MyAttributeKey0", "MyStringAttribute"); + this.attributesMap.Add("MyAttributeKey1", 10L); + this.attributesMap.Add("MyAttributeKey2", true); + this.attributesMap.Add("MyAttributeKey3", 0.005); } [Fact] public void FromSpanContext() { - var link = new Link(spanContext); - Assert.Equal(spanContext.TraceId, link.Context.TraceId); - Assert.Equal(spanContext.SpanId, link.Context.SpanId); + var link = new Link(this.spanContext); + Assert.Equal(this.spanContext.TraceId, link.Context.TraceId); + Assert.Equal(this.spanContext.SpanId, link.Context.SpanId); } [Fact] public void FromSpanContext_WithAttributes() { - var link = new Link(spanContext, attributesMap); - Assert.Equal(spanContext.TraceId, link.Context.TraceId); - Assert.Equal(spanContext.SpanId, link.Context.SpanId); - Assert.Equal(attributesMap, link.Attributes); + var link = new Link(this.spanContext, this.attributesMap); + Assert.Equal(this.spanContext.TraceId, link.Context.TraceId); + Assert.Equal(this.spanContext.SpanId, link.Context.SpanId); + Assert.Equal(this.attributesMap, link.Attributes); } [Fact] public void Equality() { - var link1 = new Link(spanContext); - var link2 = new Link(spanContext); + var link1 = new Link(this.spanContext); + var link2 = new Link(this.spanContext); Assert.Equal(link1, link2); Assert.True(link1 == link2); @@ -65,8 +65,8 @@ namespace OpenTelemetry.Trace.Test [Fact] public void Equality_WithAttributes() { - var link1 = new Link(spanContext, attributesMap); - var link2 = new Link(spanContext, attributesMap); + var link1 = new Link(this.spanContext, this.attributesMap); + var link2 = new Link(this.spanContext, this.attributesMap); Assert.Equal(link1, link2); Assert.True(link1 == link2); @@ -85,8 +85,8 @@ namespace OpenTelemetry.Trace.Test [Fact] public void NotEquality_WithAttributes() { - var link1 = new Link(spanContext, new Dictionary()); - var link2 = new Link(spanContext, this.attributesMap); + var link1 = new Link(this.spanContext, new Dictionary()); + var link2 = new Link(this.spanContext, this.attributesMap); Assert.NotEqual(link1, link2); Assert.True(link1 != link2); diff --git a/test/OpenTelemetry.Tests/Implementation/Trace/Propagation/B3FormatTest.cs b/test/OpenTelemetry.Tests/Implementation/Trace/Propagation/B3FormatTest.cs index c7c27b63c..64431fb80 100644 --- a/test/OpenTelemetry.Tests/Implementation/Trace/Propagation/B3FormatTest.cs +++ b/test/OpenTelemetry.Tests/Implementation/Trace/Propagation/B3FormatTest.cs @@ -25,21 +25,27 @@ namespace OpenTelemetry.Context.Propagation.Test public class B3FormatTest { private const string TraceIdBase16 = "ff000000000000000000000000000041"; - private static readonly ActivityTraceId TraceId = ActivityTraceId.CreateFromString(TraceIdBase16.AsSpan()); private const string TraceIdBase16EightBytes = "0000000000000041"; - private static readonly ActivityTraceId TraceIdEightBytes = ActivityTraceId.CreateFromString(("0000000000000000" + TraceIdBase16EightBytes).AsSpan()); private const string SpanIdBase16 = "ff00000000000041"; - private static readonly ActivitySpanId SpanId = ActivitySpanId.CreateFromString(SpanIdBase16.AsSpan()); - private const string InvalidId = "abcdefghijklmnop"; private const string InvalidSizeId = "0123456789abcdef00"; - private const ActivityTraceFlags TraceOptions = ActivityTraceFlags.Recorded; + + private static readonly ActivityTraceId TraceId = ActivityTraceId.CreateFromString(TraceIdBase16.AsSpan()); + private static readonly ActivityTraceId TraceIdEightBytes = ActivityTraceId.CreateFromString(("0000000000000000" + TraceIdBase16EightBytes).AsSpan()); + private static readonly ActivitySpanId SpanId = ActivitySpanId.CreateFromString(SpanIdBase16.AsSpan()); + + private static readonly Action, string, string> Setter = (d, k, v) => d[k] = v; + private static readonly Func, string, IEnumerable> Getter = + (d, k) => + { + d.TryGetValue(k, out var v); + return new string[] { v }; + }; + private readonly B3Format b3Format = new B3Format(); private readonly B3Format b3FormatSingleHeader = new B3Format(true); - private static readonly Action, string, string> Setter = (d, k, v) => d[k] = v; - private static readonly Func, string, IEnumerable> Getter = (d, k) => { d.TryGetValue(k, out var v); return new string[] { v }; }; private readonly ITestOutputHelper output; public B3FormatTest(ITestOutputHelper output) @@ -51,8 +57,8 @@ namespace OpenTelemetry.Context.Propagation.Test public void Serialize_SampledContext() { var carrier = new Dictionary(); - b3Format.Inject(new SpanContext(TraceId, SpanId, TraceOptions), carrier, Setter); - ContainsExactly(carrier, new Dictionary { { B3Format.XB3TraceId, TraceIdBase16 }, { B3Format.XB3SpanId, SpanIdBase16 }, { B3Format.XB3Sampled, "1" } }); + this.b3Format.Inject(new SpanContext(TraceId, SpanId, TraceOptions), carrier, Setter); + this.ContainsExactly(carrier, new Dictionary { { B3Format.XB3TraceId, TraceIdBase16 }, { B3Format.XB3SpanId, SpanIdBase16 }, { B3Format.XB3Sampled, "1" } }); } [Fact] @@ -60,9 +66,9 @@ namespace OpenTelemetry.Context.Propagation.Test { var carrier = new Dictionary(); var context = new SpanContext(TraceId, SpanId, ActivityTraceFlags.None); - output.WriteLine(context.ToString()); - b3Format.Inject(context, carrier, Setter); - ContainsExactly(carrier, new Dictionary { { B3Format.XB3TraceId, TraceIdBase16 }, { B3Format.XB3SpanId, SpanIdBase16 } }); + this.output.WriteLine(context.ToString()); + this.b3Format.Inject(context, carrier, Setter); + this.ContainsExactly(carrier, new Dictionary { { B3Format.XB3TraceId, TraceIdBase16 }, { B3Format.XB3SpanId, SpanIdBase16 } }); } [Fact] @@ -70,10 +76,10 @@ namespace OpenTelemetry.Context.Propagation.Test { var headersNotSampled = new Dictionary { - {B3Format.XB3TraceId, TraceIdBase16}, {B3Format.XB3SpanId, SpanIdBase16}, + { B3Format.XB3TraceId, TraceIdBase16 }, { B3Format.XB3SpanId, SpanIdBase16 }, }; var spanContext = new SpanContext(TraceId, SpanId, ActivityTraceFlags.None); - Assert.Equal(spanContext, b3Format.Extract(headersNotSampled, Getter)); + Assert.Equal(spanContext, this.b3Format.Extract(headersNotSampled, Getter)); } [Fact] @@ -81,9 +87,9 @@ namespace OpenTelemetry.Context.Propagation.Test { var headersSampled = new Dictionary { - {B3Format.XB3TraceId, TraceIdBase16}, {B3Format.XB3SpanId, SpanIdBase16}, {B3Format.XB3Sampled, "1"}, + { B3Format.XB3TraceId, TraceIdBase16 }, { B3Format.XB3SpanId, SpanIdBase16 }, { B3Format.XB3Sampled, "1" }, }; - Assert.Equal(new SpanContext(TraceId, SpanId, TraceOptions), b3Format.Extract(headersSampled, Getter)); + Assert.Equal(new SpanContext(TraceId, SpanId, TraceOptions), this.b3Format.Extract(headersSampled, Getter)); } [Fact] @@ -91,9 +97,9 @@ namespace OpenTelemetry.Context.Propagation.Test { var headersNotSampled = new Dictionary { - {B3Format.XB3TraceId, TraceIdBase16}, {B3Format.XB3SpanId, SpanIdBase16}, {B3Format.XB3Sampled, "0"}, + { B3Format.XB3TraceId, TraceIdBase16 }, { B3Format.XB3SpanId, SpanIdBase16 }, { B3Format.XB3Sampled, "0" }, }; - Assert.Equal(new SpanContext(TraceId, SpanId, ActivityTraceFlags.None), b3Format.Extract(headersNotSampled, Getter)); + Assert.Equal(new SpanContext(TraceId, SpanId, ActivityTraceFlags.None), this.b3Format.Extract(headersNotSampled, Getter)); } [Fact] @@ -101,9 +107,9 @@ namespace OpenTelemetry.Context.Propagation.Test { var headersFlagSampled = new Dictionary { - {B3Format.XB3TraceId, TraceIdBase16}, {B3Format.XB3SpanId, SpanIdBase16}, {B3Format.XB3Flags, "1"}, + { B3Format.XB3TraceId, TraceIdBase16 }, { B3Format.XB3SpanId, SpanIdBase16 }, { B3Format.XB3Flags, "1" }, }; - Assert.Equal(new SpanContext(TraceId, SpanId, TraceOptions), b3Format.Extract(headersFlagSampled, Getter)); + Assert.Equal(new SpanContext(TraceId, SpanId, TraceOptions), this.b3Format.Extract(headersFlagSampled, Getter)); } [Fact] @@ -111,9 +117,9 @@ namespace OpenTelemetry.Context.Propagation.Test { var headersFlagNotSampled = new Dictionary { - {B3Format.XB3TraceId, TraceIdBase16}, {B3Format.XB3SpanId, SpanIdBase16}, {B3Format.XB3Flags, "0"}, + { B3Format.XB3TraceId, TraceIdBase16 }, { B3Format.XB3SpanId, SpanIdBase16 }, { B3Format.XB3Flags, "0" }, }; - Assert.Equal(new SpanContext(TraceId, SpanId, ActivityTraceFlags.None), b3Format.Extract(headersFlagNotSampled, Getter)); + Assert.Equal(new SpanContext(TraceId, SpanId, ActivityTraceFlags.None), this.b3Format.Extract(headersFlagNotSampled, Getter)); } [Fact] @@ -121,11 +127,11 @@ namespace OpenTelemetry.Context.Propagation.Test { var headersEightBytes = new Dictionary { - {B3Format.XB3TraceId, TraceIdBase16EightBytes}, - {B3Format.XB3SpanId, SpanIdBase16}, - {B3Format.XB3Sampled, "1"}, + { B3Format.XB3TraceId, TraceIdBase16EightBytes }, + { B3Format.XB3SpanId, SpanIdBase16 }, + { B3Format.XB3Sampled, "1" }, }; - Assert.Equal(new SpanContext(TraceIdEightBytes, SpanId, TraceOptions), b3Format.Extract(headersEightBytes, Getter)); + Assert.Equal(new SpanContext(TraceIdEightBytes, SpanId, TraceOptions), this.b3Format.Extract(headersEightBytes, Getter)); } [Fact] @@ -133,9 +139,9 @@ namespace OpenTelemetry.Context.Propagation.Test { var headersEightBytes = new Dictionary { - {B3Format.XB3TraceId, TraceIdBase16EightBytes}, {B3Format.XB3SpanId, SpanIdBase16}, + { B3Format.XB3TraceId, TraceIdBase16EightBytes }, { B3Format.XB3SpanId, SpanIdBase16 }, }; - Assert.Equal(new SpanContext(TraceIdEightBytes, SpanId, ActivityTraceFlags.None), b3Format.Extract(headersEightBytes, Getter)); + Assert.Equal(new SpanContext(TraceIdEightBytes, SpanId, ActivityTraceFlags.None), this.b3Format.Extract(headersEightBytes, Getter)); } [Fact] @@ -143,9 +149,9 @@ namespace OpenTelemetry.Context.Propagation.Test { var invalidHeaders = new Dictionary { - {B3Format.XB3TraceId, InvalidId}, {B3Format.XB3SpanId, SpanIdBase16}, + { B3Format.XB3TraceId, InvalidId }, { B3Format.XB3SpanId, SpanIdBase16 }, }; - Assert.Equal(SpanContext.BlankRemote, b3Format.Extract(invalidHeaders, Getter)); + Assert.Equal(SpanContext.BlankRemote, this.b3Format.Extract(invalidHeaders, Getter)); } [Fact] @@ -153,17 +159,17 @@ namespace OpenTelemetry.Context.Propagation.Test { var invalidHeaders = new Dictionary { - {B3Format.XB3TraceId, InvalidSizeId}, {B3Format.XB3SpanId, SpanIdBase16}, + { B3Format.XB3TraceId, InvalidSizeId }, { B3Format.XB3SpanId, SpanIdBase16 }, }; - Assert.Equal(SpanContext.BlankRemote, b3Format.Extract(invalidHeaders, Getter)); + Assert.Equal(SpanContext.BlankRemote, this.b3Format.Extract(invalidHeaders, Getter)); } [Fact] public void ParseMissingTraceId() { var invalidHeaders = new Dictionary { { B3Format.XB3SpanId, SpanIdBase16 }, }; - Assert.Equal(SpanContext.BlankRemote, b3Format.Extract(invalidHeaders, Getter)); + Assert.Equal(SpanContext.BlankRemote, this.b3Format.Extract(invalidHeaders, Getter)); } [Fact] @@ -171,9 +177,9 @@ namespace OpenTelemetry.Context.Propagation.Test { var invalidHeaders = new Dictionary { - {B3Format.XB3TraceId, TraceIdBase16}, {B3Format.XB3SpanId, InvalidId}, + { B3Format.XB3TraceId, TraceIdBase16 }, { B3Format.XB3SpanId, InvalidId }, }; - Assert.Equal(SpanContext.BlankRemote, b3Format.Extract(invalidHeaders, Getter)); + Assert.Equal(SpanContext.BlankRemote, this.b3Format.Extract(invalidHeaders, Getter)); } [Fact] @@ -181,24 +187,24 @@ namespace OpenTelemetry.Context.Propagation.Test { var invalidHeaders = new Dictionary { - {B3Format.XB3TraceId, TraceIdBase16}, {B3Format.XB3SpanId, InvalidSizeId}, + { B3Format.XB3TraceId, TraceIdBase16 }, { B3Format.XB3SpanId, InvalidSizeId }, }; - Assert.Equal(SpanContext.BlankRemote, b3Format.Extract(invalidHeaders, Getter)); + Assert.Equal(SpanContext.BlankRemote, this.b3Format.Extract(invalidHeaders, Getter)); } [Fact] public void ParseMissingSpanId() { var invalidHeaders = new Dictionary { { B3Format.XB3TraceId, TraceIdBase16 } }; - Assert.Equal(SpanContext.BlankRemote, b3Format.Extract(invalidHeaders, Getter)); + Assert.Equal(SpanContext.BlankRemote, this.b3Format.Extract(invalidHeaders, Getter)); } [Fact] public void Serialize_SampledContext_SingleHeader() { var carrier = new Dictionary(); - b3FormatSingleHeader.Inject(new SpanContext(TraceId, SpanId, TraceOptions), carrier, Setter); - ContainsExactly(carrier, new Dictionary { { B3Format.XB3Combined, $"{TraceIdBase16}-{SpanIdBase16}-1" } }); + this.b3FormatSingleHeader.Inject(new SpanContext(TraceId, SpanId, TraceOptions), carrier, Setter); + this.ContainsExactly(carrier, new Dictionary { { B3Format.XB3Combined, $"{TraceIdBase16}-{SpanIdBase16}-1" } }); } [Fact] @@ -206,9 +212,9 @@ namespace OpenTelemetry.Context.Propagation.Test { var carrier = new Dictionary(); var context = new SpanContext(TraceId, SpanId, ActivityTraceFlags.None); - output.WriteLine(context.ToString()); - b3FormatSingleHeader.Inject(context, carrier, Setter); - ContainsExactly(carrier, new Dictionary { { B3Format.XB3Combined, $"{TraceIdBase16}-{SpanIdBase16}" } }); + this.output.WriteLine(context.ToString()); + this.b3FormatSingleHeader.Inject(context, carrier, Setter); + this.ContainsExactly(carrier, new Dictionary { { B3Format.XB3Combined, $"{TraceIdBase16}-{SpanIdBase16}" } }); } [Fact] @@ -216,10 +222,10 @@ namespace OpenTelemetry.Context.Propagation.Test { var headersNotSampled = new Dictionary { - {B3Format.XB3Combined, $"{TraceIdBase16}-{SpanIdBase16}"}, + { B3Format.XB3Combined, $"{TraceIdBase16}-{SpanIdBase16}" }, }; var spanContext = new SpanContext(TraceId, SpanId, ActivityTraceFlags.None); - Assert.Equal(spanContext, b3FormatSingleHeader.Extract(headersNotSampled, Getter)); + Assert.Equal(spanContext, this.b3FormatSingleHeader.Extract(headersNotSampled, Getter)); } [Fact] @@ -227,9 +233,9 @@ namespace OpenTelemetry.Context.Propagation.Test { var headersSampled = new Dictionary { - {B3Format.XB3Combined, $"{TraceIdBase16}-{SpanIdBase16}-1"}, + { B3Format.XB3Combined, $"{TraceIdBase16}-{SpanIdBase16}-1" }, }; - Assert.Equal(new SpanContext(TraceId, SpanId, TraceOptions), b3FormatSingleHeader.Extract(headersSampled, Getter)); + Assert.Equal(new SpanContext(TraceId, SpanId, TraceOptions), this.b3FormatSingleHeader.Extract(headersSampled, Getter)); } [Fact] @@ -237,9 +243,9 @@ namespace OpenTelemetry.Context.Propagation.Test { var headersNotSampled = new Dictionary { - {B3Format.XB3Combined, $"{TraceIdBase16}-{SpanIdBase16}-0"}, + { B3Format.XB3Combined, $"{TraceIdBase16}-{SpanIdBase16}-0" }, }; - Assert.Equal(new SpanContext(TraceId, SpanId, ActivityTraceFlags.None), b3FormatSingleHeader.Extract(headersNotSampled, Getter)); + Assert.Equal(new SpanContext(TraceId, SpanId, ActivityTraceFlags.None), this.b3FormatSingleHeader.Extract(headersNotSampled, Getter)); } [Fact] @@ -247,9 +253,9 @@ namespace OpenTelemetry.Context.Propagation.Test { var headersFlagSampled = new Dictionary { - {B3Format.XB3Combined, $"{TraceIdBase16}-{SpanIdBase16}-1"}, + { B3Format.XB3Combined, $"{TraceIdBase16}-{SpanIdBase16}-1" }, }; - Assert.Equal(new SpanContext(TraceId, SpanId, TraceOptions), b3FormatSingleHeader.Extract(headersFlagSampled, Getter)); + Assert.Equal(new SpanContext(TraceId, SpanId, TraceOptions), this.b3FormatSingleHeader.Extract(headersFlagSampled, Getter)); } [Fact] @@ -257,9 +263,9 @@ namespace OpenTelemetry.Context.Propagation.Test { var headersFlagNotSampled = new Dictionary { - {B3Format.XB3Combined, $"{TraceIdBase16}-{SpanIdBase16}-0"}, + { B3Format.XB3Combined, $"{TraceIdBase16}-{SpanIdBase16}-0" }, }; - Assert.Equal(new SpanContext(TraceId, SpanId, ActivityTraceFlags.None), b3FormatSingleHeader.Extract(headersFlagNotSampled, Getter)); + Assert.Equal(new SpanContext(TraceId, SpanId, ActivityTraceFlags.None), this.b3FormatSingleHeader.Extract(headersFlagNotSampled, Getter)); } [Fact] @@ -267,9 +273,9 @@ namespace OpenTelemetry.Context.Propagation.Test { var headersEightBytes = new Dictionary { - {B3Format.XB3Combined, $"{TraceIdBase16EightBytes}-{SpanIdBase16}-1"}, + { B3Format.XB3Combined, $"{TraceIdBase16EightBytes}-{SpanIdBase16}-1" }, }; - Assert.Equal(new SpanContext(TraceIdEightBytes, SpanId, TraceOptions), b3FormatSingleHeader.Extract(headersEightBytes, Getter)); + Assert.Equal(new SpanContext(TraceIdEightBytes, SpanId, TraceOptions), this.b3FormatSingleHeader.Extract(headersEightBytes, Getter)); } [Fact] @@ -277,9 +283,9 @@ namespace OpenTelemetry.Context.Propagation.Test { var headersEightBytes = new Dictionary { - {B3Format.XB3Combined, $"{TraceIdBase16EightBytes}-{SpanIdBase16}"}, + { B3Format.XB3Combined, $"{TraceIdBase16EightBytes}-{SpanIdBase16}" }, }; - Assert.Equal(new SpanContext(TraceIdEightBytes, SpanId, ActivityTraceFlags.None), b3FormatSingleHeader.Extract(headersEightBytes, Getter)); + Assert.Equal(new SpanContext(TraceIdEightBytes, SpanId, ActivityTraceFlags.None), this.b3FormatSingleHeader.Extract(headersEightBytes, Getter)); } [Fact] @@ -287,9 +293,9 @@ namespace OpenTelemetry.Context.Propagation.Test { var invalidHeaders = new Dictionary { - {B3Format.XB3Combined, $"{InvalidId}-{SpanIdBase16}"}, + { B3Format.XB3Combined, $"{InvalidId}-{SpanIdBase16}" }, }; - Assert.Equal(SpanContext.BlankRemote, b3FormatSingleHeader.Extract(invalidHeaders, Getter)); + Assert.Equal(SpanContext.BlankRemote, this.b3FormatSingleHeader.Extract(invalidHeaders, Getter)); } [Fact] @@ -297,17 +303,17 @@ namespace OpenTelemetry.Context.Propagation.Test { var invalidHeaders = new Dictionary { - {B3Format.XB3Combined, $"{InvalidSizeId}-{SpanIdBase16}"}, + { B3Format.XB3Combined, $"{InvalidSizeId}-{SpanIdBase16}" }, }; - Assert.Equal(SpanContext.BlankRemote, b3FormatSingleHeader.Extract(invalidHeaders, Getter)); + Assert.Equal(SpanContext.BlankRemote, this.b3FormatSingleHeader.Extract(invalidHeaders, Getter)); } [Fact] public void ParseMissingTraceId_SingleHeader() { var invalidHeaders = new Dictionary { { B3Format.XB3Combined, $"-{SpanIdBase16}" } }; - Assert.Equal(SpanContext.BlankRemote, b3FormatSingleHeader.Extract(invalidHeaders, Getter)); + Assert.Equal(SpanContext.BlankRemote, this.b3FormatSingleHeader.Extract(invalidHeaders, Getter)); } [Fact] @@ -315,9 +321,9 @@ namespace OpenTelemetry.Context.Propagation.Test { var invalidHeaders = new Dictionary { - {B3Format.XB3Combined, $"{TraceIdBase16}-{InvalidId}"}, + { B3Format.XB3Combined, $"{TraceIdBase16}-{InvalidId}" }, }; - Assert.Equal(SpanContext.BlankRemote, b3FormatSingleHeader.Extract(invalidHeaders, Getter)); + Assert.Equal(SpanContext.BlankRemote, this.b3FormatSingleHeader.Extract(invalidHeaders, Getter)); } [Fact] @@ -325,22 +331,23 @@ namespace OpenTelemetry.Context.Propagation.Test { var invalidHeaders = new Dictionary { - {B3Format.XB3Combined, $"{TraceIdBase16}-{InvalidSizeId}"}, + { B3Format.XB3Combined, $"{TraceIdBase16}-{InvalidSizeId}" }, }; - Assert.Equal(SpanContext.BlankRemote, b3FormatSingleHeader.Extract(invalidHeaders, Getter)); + Assert.Equal(SpanContext.BlankRemote, this.b3FormatSingleHeader.Extract(invalidHeaders, Getter)); } [Fact] public void ParseMissingSpanId_SingleHeader() { var invalidHeaders = new Dictionary { { B3Format.XB3Combined, $"{TraceIdBase16}-" } }; - Assert.Equal(SpanContext.BlankRemote, b3FormatSingleHeader.Extract(invalidHeaders, Getter)); + Assert.Equal(SpanContext.BlankRemote, this.b3FormatSingleHeader.Extract(invalidHeaders, Getter)); } [Fact] public void Fields_list() { - ContainsExactly(b3Format.Fields, + this.ContainsExactly( + this.b3Format.Fields, new List { B3Format.XB3TraceId, B3Format.XB3SpanId, B3Format.XB3ParentSpanId, B3Format.XB3Sampled, B3Format.XB3Flags }); } @@ -357,7 +364,7 @@ namespace OpenTelemetry.Context.Propagation.Test { foreach (var d in dict) { - output.WriteLine(d.Key + "=" + d.Value); + this.output.WriteLine(d.Key + "=" + d.Value); } Assert.Equal(items.Count, dict.Count); @@ -368,4 +375,3 @@ namespace OpenTelemetry.Context.Propagation.Test } } } - diff --git a/test/OpenTelemetry.Tests/Implementation/Trace/Propagation/TraceContextTest.cs b/test/OpenTelemetry.Tests/Implementation/Trace/Propagation/TraceContextTest.cs index 4aaa4c3ad..a181d3775 100644 --- a/test/OpenTelemetry.Tests/Implementation/Trace/Propagation/TraceContextTest.cs +++ b/test/OpenTelemetry.Tests/Implementation/Trace/Propagation/TraceContextTest.cs @@ -45,8 +45,8 @@ namespace OpenTelemetry.Impl.Trace.Propagation { var headers = new Dictionary { - {TraceParent, $"00-{TraceId}-{SpanId}-01"}, - {TraceState, $"congo=lZWRzIHRoNhcm5hbCBwbGVhc3VyZS4,rojo=00-{TraceId}-00f067aa0ba902b7-01"}, + { TraceParent, $"00-{TraceId}-{SpanId}-01" }, + { TraceState, $"congo=lZWRzIHRoNhcm5hbCBwbGVhc3VyZS4,rojo=00-{TraceId}-00f067aa0ba902b7-01" }, }; var f = new TraceContextFormat(); @@ -76,7 +76,7 @@ namespace OpenTelemetry.Impl.Trace.Propagation { var headers = new Dictionary { - {TraceParent, $"00-{TraceId}-{SpanId}-00"}, + { TraceParent, $"00-{TraceId}-{SpanId}-00" }, }; var f = new TraceContextFormat(); @@ -106,7 +106,7 @@ namespace OpenTelemetry.Impl.Trace.Propagation { var headers = new Dictionary { - {TraceParent, $"00-xyz7651916cd43dd8448eb211c80319c-{SpanId}-01"}, + { TraceParent, $"00-xyz7651916cd43dd8448eb211c80319c-{SpanId}-01" }, }; var f = new TraceContextFormat(); @@ -121,7 +121,7 @@ namespace OpenTelemetry.Impl.Trace.Propagation { var headers = new Dictionary { - {TraceParent, $"00-{TraceId}-{SpanId}-01"}, + { TraceParent, $"00-{TraceId}-{SpanId}-01" }, }; var f = new TraceContextFormat(); @@ -136,8 +136,8 @@ namespace OpenTelemetry.Impl.Trace.Propagation { var headers = new Dictionary { - {TraceParent, $"00-{TraceId}-{SpanId}-01"}, - {TraceState, "k1=v1,k2=v2,k3=v3" }, + { TraceParent, $"00-{TraceId}-{SpanId}-01" }, + { TraceState, "k1=v1,k2=v2,k3=v3" }, }; var f = new TraceContextFormat(); diff --git a/test/OpenTelemetry.Tests/Implementation/Trace/Propagation/TracestateUtilsTests.cs b/test/OpenTelemetry.Tests/Implementation/Trace/Propagation/TracestateUtilsTests.cs index 93bdee1c7..ec4dc28ba 100644 --- a/test/OpenTelemetry.Tests/Implementation/Trace/Propagation/TracestateUtilsTests.cs +++ b/test/OpenTelemetry.Tests/Implementation/Trace/Propagation/TracestateUtilsTests.cs @@ -1,4 +1,4 @@ -// +// // Copyright The OpenTelemetry Authors // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -60,7 +60,8 @@ namespace OpenTelemetry.Tests.Impl.Trace.Propagation "k0=v,k1=v,k2=v,k3=v,k4=v,k5=v,k6=v,k7=v1,k8=v,k9=v,k10=v,k11=v,k12=v,k13=v,k14=v,k15=v,k16=v,k17=v,k18=v,k19=v,k20=v,k21=v,k22=v,k23=v,k24=v,k25=v,k26=v,k27=v1,k28=v,k29=v,k30=v,k31=v"; Assert.True(TracestateUtils.AppendTracestate(tracestate, tracestateEntries)); Assert.Equal(32, tracestateEntries.Count); - Assert.Equal("k0=v,k1=v,k2=v,k3=v,k4=v,k5=v,k6=v,k7=v1,k8=v,k9=v,k10=v,k11=v,k12=v,k13=v,k14=v,k15=v,k16=v,k17=v,k18=v,k19=v,k20=v,k21=v,k22=v,k23=v,k24=v,k25=v,k26=v,k27=v1,k28=v,k29=v,k30=v,k31=v", + Assert.Equal( + "k0=v,k1=v,k2=v,k3=v,k4=v,k5=v,k6=v,k7=v1,k8=v,k9=v,k10=v,k11=v,k12=v,k13=v,k14=v,k15=v,k16=v,k17=v,k18=v,k19=v,k20=v,k21=v,k22=v,k23=v,k24=v,k25=v,k26=v,k27=v1,k28=v,k29=v,k30=v,k31=v", TracestateUtils.GetString(tracestateEntries)); } diff --git a/test/OpenTelemetry.Tests/Implementation/Trace/ProxyTracerTests.cs b/test/OpenTelemetry.Tests/Implementation/Trace/ProxyTracerTests.cs index 30a6b8b32..8d061f32b 100644 --- a/test/OpenTelemetry.Tests/Implementation/Trace/ProxyTracerTests.cs +++ b/test/OpenTelemetry.Tests/Implementation/Trace/ProxyTracerTests.cs @@ -16,11 +16,10 @@ using System; using System.Diagnostics; +using System.Linq; +using OpenTelemetry.Trace; using OpenTelemetry.Trace.Configuration; using OpenTelemetry.Utils; -using System.Linq; -using OpenTelemetry.Context.Propagation; -using OpenTelemetry.Trace; using Xunit; namespace OpenTelemetry.Tests.Impl.Trace @@ -38,6 +37,7 @@ namespace OpenTelemetry.Tests.Impl.Trace { var noopScope = new ProxyTracer().WithSpan(BlankSpan.Instance); Assert.NotNull(noopScope); + // does not throw noopScope.Dispose(); } @@ -231,7 +231,9 @@ namespace OpenTelemetry.Tests.Impl.Trace using (proxyTracer.WithSpan(parentSpan)) { var startTimestamp = PreciseTimestamp.GetUtcNow(); - var linkContext = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), + var linkContext = new SpanContext( + ActivityTraceId.CreateRandom(), + ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded); var span = (SpanSdk)proxyTracer.StartSpan("child", SpanKind.Consumer, new SpanCreationOptions { @@ -255,4 +257,3 @@ namespace OpenTelemetry.Tests.Impl.Trace } } } - diff --git a/test/OpenTelemetry.Tests/Implementation/Trace/Samplers/ActivitySamplersTest.cs b/test/OpenTelemetry.Tests/Implementation/Trace/Samplers/ActivitySamplersTest.cs index 36cd26029..0b3355381 100644 --- a/test/OpenTelemetry.Tests/Implementation/Trace/Samplers/ActivitySamplersTest.cs +++ b/test/OpenTelemetry.Tests/Implementation/Trace/Samplers/ActivitySamplersTest.cs @@ -28,9 +28,9 @@ namespace OpenTelemetry.Trace.Samplers.Test public ActivitySamplersTest() { - traceId = ActivityTraceId.CreateRandom(); - spanId = ActivitySpanId.CreateRandom(); - parentSpanId = ActivitySpanId.CreateRandom(); + this.traceId = ActivityTraceId.CreateRandom(); + this.spanId = ActivitySpanId.CreateRandom(); + this.parentSpanId = ActivitySpanId.CreateRandom(); } [Theory] @@ -38,14 +38,14 @@ namespace OpenTelemetry.Trace.Samplers.Test [InlineData(ActivityTraceFlags.None)] public void AlwaysOnSampler_AlwaysReturnTrue(ActivityTraceFlags flags) { - var parentContext = new ActivityContext(traceId, parentSpanId, flags); + var parentContext = new ActivityContext(this.traceId, this.parentSpanId, flags); var link = new ActivityLink(parentContext); Assert.True( new AlwaysOnActivitySampler() .ShouldSample(new ActivitySamplingParameters( parentContext, - traceId, + this.traceId, "Another name", ActivityKindServer, null, @@ -65,14 +65,14 @@ namespace OpenTelemetry.Trace.Samplers.Test [InlineData(ActivityTraceFlags.None)] public void AlwaysOffSampler_AlwaysReturnFalse(ActivityTraceFlags flags) { - var parentContext = new ActivityContext(traceId, parentSpanId, flags); + var parentContext = new ActivityContext(this.traceId, this.parentSpanId, flags); var link = new ActivityLink(parentContext); Assert.False( new AlwaysOffActivitySampler() .ShouldSample(new ActivitySamplingParameters( parentContext, - traceId, + this.traceId, "Another name", ActivityKindServer, null, diff --git a/test/OpenTelemetry.Tests/Implementation/Trace/Samplers/ProbabilityActivitySamplerTest.cs b/test/OpenTelemetry.Tests/Implementation/Trace/Samplers/ProbabilityActivitySamplerTest.cs index 4936962d6..cf687fc8e 100644 --- a/test/OpenTelemetry.Tests/Implementation/Trace/Samplers/ProbabilityActivitySamplerTest.cs +++ b/test/OpenTelemetry.Tests/Implementation/Trace/Samplers/ProbabilityActivitySamplerTest.cs @@ -14,8 +14,8 @@ // limitations under the License. // using System; -using System.Diagnostics; using System.Collections.Generic; +using System.Diagnostics; using Xunit; namespace OpenTelemetry.Trace.Samplers.Test @@ -32,11 +32,11 @@ namespace OpenTelemetry.Trace.Samplers.Test public ProbabilityActivitySamplerTest() { - traceId = ActivityTraceId.CreateRandom(); + this.traceId = ActivityTraceId.CreateRandom(); var parentSpanId = ActivitySpanId.CreateRandom(); - sampledActivityContext = new ActivityContext(traceId, parentSpanId, ActivityTraceFlags.Recorded); - notSampledActivityContext = new ActivityContext(traceId, parentSpanId, ActivityTraceFlags.None); - sampledLink = new ActivityLink(this.sampledActivityContext); + this.sampledActivityContext = new ActivityContext(this.traceId, parentSpanId, ActivityTraceFlags.Recorded); + this.notSampledActivityContext = new ActivityContext(this.traceId, parentSpanId, ActivityTraceFlags.None); + this.sampledLink = new ActivityLink(this.sampledActivityContext); } [Fact] @@ -96,25 +96,26 @@ namespace OpenTelemetry.Trace.Samplers.Test { var neverSample = new ProbabilityActivitySampler(0.0); AssertSamplerSamplesWithProbability( - neverSample, this.notSampledActivityContext, new List() { sampledLink }, 1.0); + neverSample, this.notSampledActivityContext, new List() { this.sampledLink }, 1.0); var alwaysSample = new ProbabilityActivitySampler(1.0); AssertSamplerSamplesWithProbability( - alwaysSample, this.notSampledActivityContext, new List() { sampledLink }, 1.0); + alwaysSample, this.notSampledActivityContext, new List() { this.sampledLink }, 1.0); var fiftyPercentSample = new ProbabilityActivitySampler(0.5); AssertSamplerSamplesWithProbability( - fiftyPercentSample, this.notSampledActivityContext, new List() { sampledLink }, 1.0); + fiftyPercentSample, this.notSampledActivityContext, new List() { this.sampledLink }, 1.0); var twentyPercentSample = new ProbabilityActivitySampler(0.2); AssertSamplerSamplesWithProbability( - twentyPercentSample, this.notSampledActivityContext, new List() { sampledLink }, 1.0); + twentyPercentSample, this.notSampledActivityContext, new List() { this.sampledLink }, 1.0); var twoThirdsSample = new ProbabilityActivitySampler(2.0 / 3.0); AssertSamplerSamplesWithProbability( - twoThirdsSample, this.notSampledActivityContext, new List() { sampledLink }, 1.0); + twoThirdsSample, this.notSampledActivityContext, new List() { this.sampledLink }, 1.0); } [Fact] public void ProbabilitySampler_SampleBasedOnTraceId() { ActivitySampler defaultProbability = new ProbabilityActivitySampler(0.0001); + // This traceId will not be sampled by the ProbabilityActivitySampler because the first 8 bytes as long // is not less than probability * Long.MAX_VALUE; var notSampledtraceId = @@ -146,6 +147,7 @@ namespace OpenTelemetry.Trace.Samplers.Test ActivityKindServer, null, null)).IsSampled); + // This traceId will be sampled by the ProbabilityActivitySampler because the first 8 bytes as long // is less than probability * Long.MAX_VALUE; var sampledtraceId = @@ -204,7 +206,9 @@ namespace OpenTelemetry.Trace.Samplers.Test count++; } } + var proportionSampled = (double)count / NumSampleTries; + // Allow for a large amount of slop (+/- 10%) in number of sampled traces, to avoid flakiness. Assert.True(proportionSampled < probability + 0.1 && proportionSampled > probability - 0.1); } diff --git a/test/OpenTelemetry.Tests/Implementation/Trace/Samplers/SamplersTest.cs b/test/OpenTelemetry.Tests/Implementation/Trace/Samplers/SamplersTest.cs index fd2741b30..0cc8aac14 100644 --- a/test/OpenTelemetry.Tests/Implementation/Trace/Samplers/SamplersTest.cs +++ b/test/OpenTelemetry.Tests/Implementation/Trace/Samplers/SamplersTest.cs @@ -14,8 +14,8 @@ // limitations under the License. // using System; -using System.Diagnostics; using System.Collections.Generic; +using System.Diagnostics; using Xunit; namespace OpenTelemetry.Trace.Samplers.Test @@ -23,7 +23,7 @@ namespace OpenTelemetry.Trace.Samplers.Test public class SamplersTest { private const string SpanName = "MySpanName"; - private const int NUM_SAMPLE_TRIES = 1000; + private const int NumSampleTries = 1000; private static readonly SpanKind SpanKindServer = SpanKind.Server; private readonly ActivityTraceId traceId; private readonly SpanContext sampledSpanContext; @@ -32,11 +32,11 @@ namespace OpenTelemetry.Trace.Samplers.Test public SamplersTest() { - traceId = ActivityTraceId.CreateRandom(); + this.traceId = ActivityTraceId.CreateRandom(); var parentSpanId = ActivitySpanId.CreateRandom(); - sampledSpanContext = new SpanContext(traceId, parentSpanId, ActivityTraceFlags.Recorded); - notSampledSpanContext = new SpanContext(traceId, parentSpanId, ActivityTraceFlags.None); - sampledLink = new Link(sampledSpanContext); + this.sampledSpanContext = new SpanContext(this.traceId, parentSpanId, ActivityTraceFlags.Recorded); + this.notSampledSpanContext = new SpanContext(this.traceId, parentSpanId, ActivityTraceFlags.None); + this.sampledLink = new Link(this.sampledSpanContext); } [Fact] @@ -46,8 +46,8 @@ namespace OpenTelemetry.Trace.Samplers.Test Assert.True( new AlwaysOnSampler() .ShouldSample( - sampledSpanContext, - traceId, + this.sampledSpanContext, + this.traceId, "Another name", SpanKindServer, null, @@ -57,13 +57,12 @@ namespace OpenTelemetry.Trace.Samplers.Test Assert.True( new AlwaysOnSampler() .ShouldSample( - notSampledSpanContext, - traceId, + this.notSampledSpanContext, + this.traceId, "Yet another name", SpanKindServer, null, null).IsSampled); - } [Fact] @@ -79,18 +78,19 @@ namespace OpenTelemetry.Trace.Samplers.Test Assert.False( new AlwaysOffSampler() .ShouldSample( - sampledSpanContext, - traceId, + this.sampledSpanContext, + this.traceId, "bar", SpanKindServer, null, null).IsSampled); + // Not sampled parent. Assert.False( new AlwaysOffSampler() .ShouldSample( - notSampledSpanContext, - traceId, + this.notSampledSpanContext, + this.traceId, "quux", SpanKindServer, null, @@ -120,19 +120,19 @@ namespace OpenTelemetry.Trace.Samplers.Test { Sampler neverSample = new ProbabilitySampler(0.0); AssertSamplerSamplesWithProbability( - neverSample, notSampledSpanContext, null, 0.0); + neverSample, this.notSampledSpanContext, null, 0.0); Sampler alwaysSample = new ProbabilitySampler(1.0); AssertSamplerSamplesWithProbability( - alwaysSample, notSampledSpanContext, null, 1.0); + alwaysSample, this.notSampledSpanContext, null, 1.0); Sampler fiftyPercentSample = new ProbabilitySampler(0.5); AssertSamplerSamplesWithProbability( - fiftyPercentSample, notSampledSpanContext, null, 0.5); + fiftyPercentSample, this.notSampledSpanContext, null, 0.5); Sampler twentyPercentSample = new ProbabilitySampler(0.2); AssertSamplerSamplesWithProbability( - twentyPercentSample, notSampledSpanContext, null, 0.2); + twentyPercentSample, this.notSampledSpanContext, null, 0.2); Sampler twoThirdsSample = new ProbabilitySampler(2.0 / 3.0); AssertSamplerSamplesWithProbability( - twoThirdsSample, notSampledSpanContext, null, 2.0 / 3.0); + twoThirdsSample, this.notSampledSpanContext, null, 2.0 / 3.0); } [Fact] @@ -140,19 +140,19 @@ namespace OpenTelemetry.Trace.Samplers.Test { Sampler neverSample = new ProbabilitySampler(0.0); AssertSamplerSamplesWithProbability( - neverSample, sampledSpanContext, null, 1.0); + neverSample, this.sampledSpanContext, null, 1.0); Sampler alwaysSample = new ProbabilitySampler(1.0); AssertSamplerSamplesWithProbability( - alwaysSample, sampledSpanContext, null, 1.0); + alwaysSample, this.sampledSpanContext, null, 1.0); Sampler fiftyPercentSample = new ProbabilitySampler(0.5); AssertSamplerSamplesWithProbability( - fiftyPercentSample, sampledSpanContext, null, 1.0); + fiftyPercentSample, this.sampledSpanContext, null, 1.0); Sampler twentyPercentSample = new ProbabilitySampler(0.2); AssertSamplerSamplesWithProbability( - twentyPercentSample, sampledSpanContext, null, 1.0); + twentyPercentSample, this.sampledSpanContext, null, 1.0); Sampler twoThirdsSample = new ProbabilitySampler(2.0 / 3.0); AssertSamplerSamplesWithProbability( - twoThirdsSample, sampledSpanContext, null, 1.0); + twoThirdsSample, this.sampledSpanContext, null, 1.0); } [Fact] @@ -160,25 +160,26 @@ namespace OpenTelemetry.Trace.Samplers.Test { Sampler neverSample = new ProbabilitySampler(0.0); AssertSamplerSamplesWithProbability( - neverSample, notSampledSpanContext, new List() { sampledLink }, 1.0); + neverSample, this.notSampledSpanContext, new List() { this.sampledLink }, 1.0); Sampler alwaysSample = new ProbabilitySampler(1.0); AssertSamplerSamplesWithProbability( - alwaysSample, notSampledSpanContext, new List() { sampledLink }, 1.0); + alwaysSample, this.notSampledSpanContext, new List() { this.sampledLink }, 1.0); Sampler fiftyPercentSample = new ProbabilitySampler(0.5); AssertSamplerSamplesWithProbability( - fiftyPercentSample, notSampledSpanContext, new List() { sampledLink }, 1.0); + fiftyPercentSample, this.notSampledSpanContext, new List() { this.sampledLink }, 1.0); Sampler twentyPercentSample = new ProbabilitySampler(0.2); AssertSamplerSamplesWithProbability( - twentyPercentSample, notSampledSpanContext, new List() { sampledLink }, 1.0); + twentyPercentSample, this.notSampledSpanContext, new List() { this.sampledLink }, 1.0); Sampler twoThirdsSample = new ProbabilitySampler(2.0 / 3.0); AssertSamplerSamplesWithProbability( - twoThirdsSample, notSampledSpanContext, new List() { sampledLink }, 1.0); + twoThirdsSample, this.notSampledSpanContext, new List() { this.sampledLink }, 1.0); } [Fact] public void ProbabilitySampler_SampleBasedOnTraceId() { Sampler defaultProbability = new ProbabilitySampler(0.0001); + // This traceId will not be sampled by the ProbabilitySampler because the first 8 bytes as long // is not less than probability * Long.MAX_VALUE; var notSampledtraceId = @@ -210,6 +211,7 @@ namespace OpenTelemetry.Trace.Samplers.Test SpanKindServer, null, null).IsSampled); + // This traceId will be sampled by the ProbabilitySampler because the first 8 bytes as long // is less than probability * Long.MAX_VALUE; var sampledtraceId = @@ -255,7 +257,7 @@ namespace OpenTelemetry.Trace.Samplers.Test Sampler sampler, SpanContext parent, List links, double probability) { var count = 0; // Count of spans with sampling enabled - for (var i = 0; i < NUM_SAMPLE_TRIES; i++) + for (var i = 0; i < NumSampleTries; i++) { if (sampler.ShouldSample( parent, @@ -268,7 +270,9 @@ namespace OpenTelemetry.Trace.Samplers.Test count++; } } - var proportionSampled = (double)count / NUM_SAMPLE_TRIES; + + var proportionSampled = (double)count / NumSampleTries; + // Allow for a large amount of slop (+/- 10%) in number of sampled traces, to avoid flakiness. Assert.True(proportionSampled < probability + 0.1 && proportionSampled > probability - 0.1); } diff --git a/test/OpenTelemetry.Tests/Implementation/Trace/SpanDataTest.cs b/test/OpenTelemetry.Tests/Implementation/Trace/SpanDataTest.cs index f020ba7ea..70e03df7b 100644 --- a/test/OpenTelemetry.Tests/Implementation/Trace/SpanDataTest.cs +++ b/test/OpenTelemetry.Tests/Implementation/Trace/SpanDataTest.cs @@ -35,8 +35,12 @@ namespace OpenTelemetry.Tests.Impl.Trace var tracer = TracerFactory.Create(b => b.SetResource(resource)).GetTracer(null); var tracestate = new KeyValuePair[0]; - var parentContext = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), - ActivityTraceFlags.Recorded, true, tracestate); + var parentContext = new SpanContext( + ActivityTraceId.CreateRandom(), + ActivitySpanId.CreateRandom(), + ActivityTraceFlags.Recorded, + true, + tracestate); var attributes = new Dictionary { ["key"] = "value", }; var link = new Link(parentContext); @@ -44,7 +48,10 @@ namespace OpenTelemetry.Tests.Impl.Trace var startTime = DateTimeOffset.UtcNow.AddSeconds(-2); var endTime = DateTimeOffset.UtcNow.AddSeconds(-1); - var span = tracer.StartSpan("name", parentContext, SpanKind.Producer, + var span = tracer.StartSpan( + "name", + parentContext, + SpanKind.Producer, new SpanCreationOptions { Attributes = attributes, Links = new[] { link }, StartTimestamp = startTime, }); span.AddEvent(evnt); @@ -131,8 +138,12 @@ namespace OpenTelemetry.Tests.Impl.Trace var tracestate = new KeyValuePair[0]; var parentSpanId = ActivitySpanId.CreateRandom(); - var context = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), - ActivityTraceFlags.Recorded, true, tracestate); + var context = new SpanContext( + ActivityTraceId.CreateRandom(), + ActivitySpanId.CreateRandom(), + ActivityTraceFlags.Recorded, + true, + tracestate); var attributes = new Dictionary { ["key"] = "value", }; var links = new[] { new Link(context) }; @@ -201,10 +212,18 @@ namespace OpenTelemetry.Tests.Impl.Trace var tracestate = new KeyValuePair[0]; var parentSpanId = ActivitySpanId.CreateRandom(); - var context = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), - ActivityTraceFlags.Recorded, true, tracestate); - var otherContext = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), - ActivityTraceFlags.Recorded, true, tracestate); + var context = new SpanContext( + ActivityTraceId.CreateRandom(), + ActivitySpanId.CreateRandom(), + ActivityTraceFlags.Recorded, + true, + tracestate); + var otherContext = new SpanContext( + ActivityTraceId.CreateRandom(), + ActivitySpanId.CreateRandom(), + ActivityTraceFlags.Recorded, + true, + tracestate); var attributes = new Dictionary { ["key"] = "value", }; var otherAttributes = new Dictionary { ["key1"] = "value1", }; diff --git a/test/OpenTelemetry.Tests/Implementation/Trace/SpanTest.cs b/test/OpenTelemetry.Tests/Implementation/Trace/SpanTest.cs index 52601a976..fd719c3cc 100644 --- a/test/OpenTelemetry.Tests/Implementation/Trace/SpanTest.cs +++ b/test/OpenTelemetry.Tests/Implementation/Trace/SpanTest.cs @@ -14,7 +14,6 @@ // limitations under the License. // -using OpenTelemetry.Trace.Configuration; using System; using System.Collections.Generic; using System.Diagnostics; @@ -23,6 +22,7 @@ using System.Threading.Tasks; using Moq; using OpenTelemetry.Api.Utils; using OpenTelemetry.Tests; +using OpenTelemetry.Trace.Configuration; using OpenTelemetry.Trace.Export; using OpenTelemetry.Trace.Samplers; using Xunit; @@ -45,13 +45,13 @@ namespace OpenTelemetry.Trace.Test Activity.DefaultIdFormat = ActivityIdFormat.W3C; Activity.ForceDefaultIdFormat = true; - spanProcessor = spanProcessorMock.Object; - tracerFactory = TracerFactory.Create(b => b.AddProcessorPipeline(p => p.AddProcessor(_ => spanProcessor))); - attributes.Add("MyStringAttributeKey", "MyStringAttributeValue"); - attributes.Add("MyLongAttributeKey", 123L); - attributes.Add("MyBooleanAttributeKey", false); - attributes.Add("MyDoubleAttributeKey", 0.1d); - expectedAttributes = new List>(attributes) + this.spanProcessor = this.spanProcessorMock.Object; + this.tracerFactory = TracerFactory.Create(b => b.AddProcessorPipeline(p => p.AddProcessor(_ => this.spanProcessor))); + this.attributes.Add("MyStringAttributeKey", "MyStringAttributeValue"); + this.attributes.Add("MyLongAttributeKey", 123L); + this.attributes.Add("MyBooleanAttributeKey", false); + this.attributes.Add("MyDoubleAttributeKey", 0.1d); + this.expectedAttributes = new List>(this.attributes) { new KeyValuePair("MySingleStringAttributeKey", "MySingleStringAttributeValue"), }; @@ -60,7 +60,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartSpanFrom_Recorded_ParentSpan() { - var tracer = (TracerSdk)tracerFactory.GetTracer("foo", "semver:1.0.0"); + var tracer = (TracerSdk)this.tracerFactory.GetTracer("foo", "semver:1.0.0"); var traceState = new List> { new KeyValuePair("k1", "v1") }; var grandParentContext = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded, false, traceState); @@ -85,7 +85,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartSpanFrom_Recorded_ParentSpan_IgnoresCurrentParent() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); using (tracer.StartActiveSpan("outer", out _)) { @@ -104,7 +104,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartSpanFrom_Recorded_ParentSpan_Kind() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var parentSpan = tracer.StartRootSpan(SpanName); @@ -120,7 +120,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartSpanFrom_Recorded_ParentSpan_Kind_Timestamp() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var parentSpan = tracer.StartRootSpan(SpanName); @@ -136,7 +136,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartSpanFrom_Recorded_ParentSpan_Kind_Links_Func() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var parentSpan = tracer.StartRootSpan(SpanName); var linkContext = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded); @@ -154,7 +154,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartSpanFrom_Recorded_ParentSpan_Kind_Links_Enumerable() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var parentSpan = tracer.StartRootSpan(SpanName); var linkContext = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded); @@ -172,7 +172,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartRootSpan_IgnoresCurrentParent() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); tracer.WithSpan(tracer.StartRootSpan("outer")); { @@ -189,7 +189,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartRootSpan_IgnoresCurrentActivity() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var outerActivity = new Activity("outer").SetIdFormat(ActivityIdFormat.W3C).Start(); @@ -207,7 +207,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartRootSpan() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var startTimestamp = PreciseTimestamp.GetUtcNow(); var span = (SpanSdk)tracer.StartRootSpan(SpanName); @@ -228,7 +228,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartRootSpanFrom_Kind() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var startTimestamp = PreciseTimestamp.GetUtcNow(); var span = (SpanSdk)tracer.StartRootSpan(SpanName, SpanKind.Consumer); @@ -242,7 +242,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartRootSpanFrom_Kind_Timestamp() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var startTimestamp = DateTimeOffset.Now.AddSeconds(-1); var span = (SpanSdk)tracer.StartRootSpan(SpanName, SpanKind.Client, new SpanCreationOptions { StartTimestamp = startTimestamp }); @@ -256,7 +256,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartRootSpanFrom_Kind_Timestamp_Links() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var linkContext = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded); @@ -277,7 +277,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartSpanFrom_Recorded_ParentContext() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var traceState = new List> { new KeyValuePair("k1", "v1") }; var parentContext = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded, false, traceState); @@ -301,7 +301,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartSpanFrom_InvalidContext() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var parentContext = default(SpanContext); var span = (SpanSdk)tracer.StartSpan(SpanName, parentContext); @@ -319,11 +319,13 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartSpanFrom_Recorded_ParentContext_IgnoresCurrentParent() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); tracer.WithSpan(tracer.StartRootSpan("outer")); { - var parentContext = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), + var parentContext = new SpanContext( + ActivityTraceId.CreateRandom(), + ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded); var span = (SpanSdk)tracer.StartSpan(SpanName, parentContext); @@ -339,7 +341,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartSpanFrom_Recorded_ParentContext_Kind_Timestamp() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var parentContext = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded); @@ -355,7 +357,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartSpanFrom_Recorded_ParentContext_Kind_Links_Func() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var parentContext = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded); var linkContext = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded); @@ -373,7 +375,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartSpanFrom_Recorded_ParentContext_Kind_Links_Enumerable() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var parentContext = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded); var firstLinkContext = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded); @@ -393,7 +395,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartSpan_Recorded_FromActivity() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var activity = new Activity(SpanName).SetIdFormat(ActivityIdFormat.W3C).Start(); activity.ActivityTraceFlags |= ActivityTraceFlags.Recorded; @@ -419,7 +421,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartSpan_Recorded_FromActivity_IgnoresCurrentParent() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); tracer.WithSpan(tracer.StartRootSpan("outer")); { var activity = new Activity(SpanName).SetIdFormat(ActivityIdFormat.W3C).SetParentId(" ").Start(); @@ -437,7 +439,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartSpan_NotRecorded_FromActivity() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var activity = new Activity(SpanName).SetIdFormat(ActivityIdFormat.W3C).Start(); activity.ActivityTraceFlags = ActivityTraceFlags.None; @@ -465,7 +467,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartSpan_Recorded_FromActivity_Kind() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var activity = new Activity(SpanName).SetIdFormat(ActivityIdFormat.W3C).Start(); activity.ActivityTraceFlags |= ActivityTraceFlags.Recorded; @@ -482,7 +484,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartSpan_Recorded_FromActivity_Kind_Links_Enumerable() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var activity = new Activity(SpanName).SetIdFormat(ActivityIdFormat.W3C).Start(); activity.ActivityTraceFlags |= ActivityTraceFlags.Recorded; @@ -504,7 +506,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartSpan_Recorded_FromActivity_Null() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var startTime = DateTimeOffset.UtcNow; var span = (SpanSdk)tracer.StartSpanFromActivity(SpanName, null); @@ -522,7 +524,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartSpan_Recorded_FromActivity_Null_Kind() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var startTime = DateTimeOffset.UtcNow; var span = (SpanSdk)tracer.StartSpanFromActivity(SpanName, null, SpanKind.Producer); @@ -537,13 +539,12 @@ namespace OpenTelemetry.Trace.Test Assert.Null(span.Links); } - [Fact] public void StartSpan_Recorded_FromActivity_Null_Kind_Links() { var linkContext = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded); - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var startTime = DateTimeOffset.UtcNow; var span = (SpanSdk)tracer.StartSpanFromActivity(SpanName, null, SpanKind.Consumer, new[] { new Link(linkContext) }); @@ -563,7 +564,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartSpan_Recorded_FromActivity_HierarchicalFormat() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var activity = new Activity(SpanName).SetIdFormat(ActivityIdFormat.Hierarchical).Start(); activity.ActivityTraceFlags |= ActivityTraceFlags.Recorded; @@ -586,7 +587,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartSpan_Recorded_FromActivity_NotStarted() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var activity = new Activity(SpanName).SetIdFormat(ActivityIdFormat.W3C); activity.ActivityTraceFlags |= ActivityTraceFlags.Recorded; @@ -609,7 +610,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartSpanFrom_Recorded_ImplicitParentSpan() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var traceState = new List> { new KeyValuePair("k1", "v1") }; var grandParentContext = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded, false, traceState); using (tracer.WithSpan(tracer.StartSpan(SpanName, grandParentContext))) @@ -636,7 +637,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartSpanFrom_Recorded_ImplicitParentActivity() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var parentActivity = new Activity("foo").SetIdFormat(ActivityIdFormat.W3C).Start(); parentActivity.TraceStateString = "k1=v1,k2=v2"; @@ -665,7 +666,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartSpanFrom_Recorded_ImplicitParentSpan_Kind() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); using (tracer.WithSpan(tracer.StartRootSpan(SpanName))) { @@ -682,7 +683,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartSpanFrom_Recorded_ImplicitParentSpan_Kind_Timestamp() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); using (tracer.WithSpan(tracer.StartRootSpan(SpanName))) { @@ -699,11 +700,13 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartSpanFrom_Recorded_ImplicitParentSpan_Kind_Timestamp_Links_Func() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); using (tracer.WithSpan(tracer.StartRootSpan(SpanName))) { - var linkContext = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), + var linkContext = new SpanContext( + ActivityTraceId.CreateRandom(), + ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded); var startTimestamp = DateTimeOffset.UtcNow.AddSeconds(-10); @@ -720,11 +723,13 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartSpanFrom_Recorded_ImplicitParentSpan_Kind_Timestamp_Links_Enumerable() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); using (tracer.WithSpan(tracer.StartRootSpan(SpanName))) { - var linkContext = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), + var linkContext = new SpanContext( + ActivityTraceId.CreateRandom(), + ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded); var startTimestamp = DateTimeOffset.UtcNow.AddSeconds(-10); @@ -762,7 +767,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void EndSpan_NotAddingAttributesOrEvents() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var span = (SpanSdk)tracer.StartRootSpan(SpanName, SpanKind.Client); @@ -771,7 +776,7 @@ namespace OpenTelemetry.Trace.Test // Check that adding trace events after Span#End() does not throw any exception and are not // recorded. - foreach (var attribute in attributes) + foreach (var attribute in this.attributes) { span.SetAttribute(attribute.Key, attribute.Value); } @@ -781,7 +786,7 @@ namespace OpenTelemetry.Trace.Test "MySingleStringAttributeValue"); span.AddEvent(new Event(EventDescription)); - span.AddEvent(new Event(EventDescription, attributes)); + span.AddEvent(new Event(EventDescription, this.attributes)); Assert.NotEqual(default, span.StartTimestamp); Assert.Null(span.Attributes); @@ -794,15 +799,17 @@ namespace OpenTelemetry.Trace.Test [Fact] public async Task StartSpan_PropertiesAccessible() { - var contextLink = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), + var contextLink = new SpanContext( + ActivityTraceId.CreateRandom(), + ActivitySpanId.CreateRandom(), ActivityTraceFlags.None); var link = new Link(contextLink); - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var startTime = DateTimeOffset.UtcNow.AddSeconds(-1); var spanPassedToSpanProcessorHasSpanContext = false; - spanProcessorMock + this.spanProcessorMock .Setup(s => s.OnStart(It.IsAny())) .Callback(s => { @@ -814,7 +821,7 @@ namespace OpenTelemetry.Trace.Test span.SetAttribute( "MySingleStringAttributeKey", "MySingleStringAttributeValue"); - foreach (var attribute in attributes) + foreach (var attribute in this.attributes) { span.SetAttribute(attribute.Key, attribute.Value); } @@ -824,7 +831,7 @@ namespace OpenTelemetry.Trace.Test await Task.Delay(TimeSpan.FromMilliseconds(100)); var secondEventTime = PreciseTimestamp.GetUtcNow(); - span.AddEvent(new Event(EventDescription, attributes)); + span.AddEvent(new Event(EventDescription, this.attributes)); Assert.Equal(span.Activity.TraceId, span.Context.TraceId); Assert.Equal(span.Activity.SpanId, span.Context.SpanId); @@ -835,7 +842,7 @@ namespace OpenTelemetry.Trace.Test Assert.Equal(SpanName, span.Name); Assert.Equal(span.Activity.ParentSpanId, span.ParentSpanId); - span.Attributes.AssertAreSame(expectedAttributes); + span.Attributes.AssertAreSame(this.expectedAttributes); Assert.Equal(2, span.Events.Count()); AssertApproxSameTimestamp(span.Events.ToList()[1].Timestamp, secondEventTime); @@ -846,7 +853,7 @@ namespace OpenTelemetry.Trace.Test Assert.Empty(event0.Attributes); Assert.Equal(EventDescription, span.Events.ToList()[1].Name); - Assert.Equal(attributes, span.Events.ToList()[1].Attributes); + Assert.Equal(this.attributes, span.Events.ToList()[1].Attributes); Assert.Single(span.Links); Assert.Equal(link, span.Links.First()); @@ -856,11 +863,11 @@ namespace OpenTelemetry.Trace.Test Assert.False(span.GetStatus().IsValid); Assert.Equal(default, span.EndTimestamp); - var startEndMock = Mock.Get(spanProcessor); + var startEndMock = Mock.Get(this.spanProcessor); var spanData = new SpanData(span); Assert.True(spanData.Status.IsValid); - spanProcessorMock.Verify(s => s.OnStart(spanData), Times.Once); + this.spanProcessorMock.Verify(s => s.OnStart(spanData), Times.Once); Assert.True(spanPassedToSpanProcessorHasSpanContext); startEndMock.Verify(s => s.OnEnd(spanData), Times.Never); } @@ -868,17 +875,19 @@ namespace OpenTelemetry.Trace.Test [Fact] public async Task EndSpan_Properties() { - var contextLink = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), + var contextLink = new SpanContext( + ActivityTraceId.CreateRandom(), + ActivitySpanId.CreateRandom(), ActivityTraceFlags.None); var link = new Link(contextLink); - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var startTime = DateTimeOffset.UtcNow.AddSeconds(-1); var span = (SpanSdk)tracer.StartRootSpan(SpanName, SpanKind.Client, new SpanCreationOptions { StartTimestamp = startTime, LinksFactory = () => new[] { link } }); span.SetAttribute( "MySingleStringAttributeKey", "MySingleStringAttributeValue"); - foreach (var attribute in attributes) + foreach (var attribute in this.attributes) { span.SetAttribute(attribute.Key, attribute.Value); } @@ -889,7 +898,7 @@ namespace OpenTelemetry.Trace.Test await Task.Delay(TimeSpan.FromMilliseconds(100)); var secondEventTime = PreciseTimestamp.GetUtcNow(); - span.AddEvent(new Event(EventDescription, attributes)); + span.AddEvent(new Event(EventDescription, this.attributes)); span.Status = Status.Cancelled; @@ -904,7 +913,7 @@ namespace OpenTelemetry.Trace.Test Assert.Equal(SpanName, span.Name); Assert.Equal(span.Activity.ParentSpanId, span.ParentSpanId); - span.Attributes.AssertAreSame(expectedAttributes); + span.Attributes.AssertAreSame(this.expectedAttributes); Assert.Equal(2, span.Events.Count()); var event0 = span.Events.ToList()[0]; @@ -921,14 +930,14 @@ namespace OpenTelemetry.Trace.Test AssertApproxSameTimestamp(spanEndTime, span.EndTimestamp); var spanData = new SpanData(span); - spanProcessorMock.Verify(s => s.OnStart(spanData), Times.Once); - spanProcessorMock.Verify(s => s.OnEnd(spanData), Times.Once); + this.spanProcessorMock.Verify(s => s.OnStart(spanData), Times.Once); + this.spanProcessorMock.Verify(s => s.OnEnd(spanData), Times.Once); } [Fact] public void SetStatus() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var span = (SpanSdk)tracer.StartRootSpan(SpanName); Assert.Equal(default, span.GetStatus()); @@ -938,18 +947,18 @@ namespace OpenTelemetry.Trace.Test Assert.Equal(Status.Cancelled, span.GetStatus()); var spanData = new SpanData(span); - spanProcessorMock.Verify(s => s.OnStart(spanData), Times.Once); - spanProcessorMock.Verify(s => s.OnEnd(spanData), Times.Once); + this.spanProcessorMock.Verify(s => s.OnStart(spanData), Times.Once); + this.spanProcessorMock.Verify(s => s.OnEnd(spanData), Times.Once); } [Fact] public void BadArguments_SetInvalidStatus() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var span = (SpanSdk)tracer.StartRootSpan(SpanName); // does not throw - span.Status = new Status(); + span.Status = default(Status); Assert.Equal(default, span.GetStatus()); } @@ -957,7 +966,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void BadArguments_UpdateName_Null() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var span = (SpanSdk)tracer.StartRootSpan(SpanName); // does not throw @@ -969,7 +978,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void BadArguments_SetAttribute_NullKey() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var span = (SpanSdk)tracer.StartRootSpan(SpanName); // does not throw @@ -985,7 +994,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void SetAttribute_ValidTypes() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var span = (SpanSdk)tracer.StartRootSpan(SpanName); span.SetAttribute("string", "foo"); @@ -1032,7 +1041,7 @@ namespace OpenTelemetry.Trace.Test [InlineData(new[] { 1.1f, 2.2f, 3.3f })] public void SetAttribute_Array(object array) { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var span = (SpanSdk)tracer.StartRootSpan(SpanName); span.SetAttribute("intArray", array); @@ -1046,7 +1055,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void SetAttribute_Array_String() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var span = (SpanSdk)tracer.StartRootSpan(SpanName); var array = new[] { "1", "2", "3" }; @@ -1056,13 +1065,12 @@ namespace OpenTelemetry.Trace.Test var attribute = span.Attributes.Single(kvp => kvp.Key == "array"); Assert.Equal(array, attribute.Value); - } [Fact] public void SetAttribute_Array_Decimal() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var span = (SpanSdk)tracer.StartRootSpan(SpanName); var array = new[] { 1.1M, 2.2M, 3.3M }; @@ -1077,7 +1085,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void SetAttribute_Array_IEnumerable() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var span = (SpanSdk)tracer.StartRootSpan(SpanName); IEnumerable array = new List { 1, 2, 3 }; @@ -1092,7 +1100,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void SetAttribute_Array_Cant_Mix_Types() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var span = (SpanSdk)tracer.StartRootSpan(SpanName); var array = new object[] { 1, "2", false }; @@ -1108,7 +1116,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void SetAttribute_Array_Sets_Empty_String_For_Emtpy_Array() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var span = (SpanSdk)tracer.StartRootSpan(SpanName); var array = new object[0]; @@ -1124,7 +1132,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void BadArguments_SetAttribute_NullOrEmptyValue() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var span = (SpanSdk)tracer.StartRootSpan(SpanName); // does not throw @@ -1139,7 +1147,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void BadArguments_SetAttribute_BadTypeValue() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var span = (SpanSdk)tracer.StartRootSpan(SpanName); // does not throw @@ -1154,7 +1162,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void BadArguments_NullEvent() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var span = (SpanSdk)tracer.StartRootSpan(SpanName); span.AddEvent((string)null); @@ -1186,7 +1194,7 @@ namespace OpenTelemetry.Trace.Test parentActivity.ActivityTraceFlags = ActivityTraceFlags.Recorded; } - var tracer = tracerFactory + var tracer = this.tracerFactory .GetTracer(null); var span = (SpanSdk)tracer.StartSpan(SpanName); span.End(); @@ -1207,7 +1215,7 @@ namespace OpenTelemetry.Trace.Test activity.ActivityTraceFlags |= ActivityTraceFlags.Recorded; } - var tracer = tracerFactory + var tracer = this.tracerFactory .GetTracer(null); var span = (SpanSdk)tracer.StartSpanFromActivity(SpanName, activity); span.End(); @@ -1227,7 +1235,8 @@ namespace OpenTelemetry.Trace.Test { activity.ActivityTraceFlags |= ActivityTraceFlags.Recorded; } - var tracer = tracerFactory.GetTracer(null); + + var tracer = this.tracerFactory.GetTracer(null); SpanSdk span; if (ownsActivity) @@ -1248,7 +1257,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartActiveSpan_ParentSpan() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var parentSpan = (SpanSdk)tracer.StartSpan(SpanName); using (var scope = tracer.StartActiveSpan(SpanName, parentSpan, out var ispan)) @@ -1268,7 +1277,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartActiveSpan_ParentSpan_Kind() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var parentSpan = (SpanSdk)tracer.StartSpan(SpanName); using (var scope = tracer.StartActiveSpan(SpanName, parentSpan, SpanKind.Producer, out var ispan)) @@ -1289,11 +1298,15 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartActiveSpan_ParentSpan_Kind_Timestamp() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var startTimestamp = DateTimeOffset.Now.AddSeconds(-1); var parentSpan = (SpanSdk)tracer.StartSpan(SpanName); - using (var scope = tracer.StartActiveSpan(SpanName, parentSpan, SpanKind.Producer, new SpanCreationOptions { StartTimestamp = startTimestamp }, + using (var scope = tracer.StartActiveSpan( + SpanName, + parentSpan, + SpanKind.Producer, + new SpanCreationOptions { StartTimestamp = startTimestamp }, out var ispan)) { Assert.NotNull(scope); @@ -1313,13 +1326,17 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartActiveSpan_ParentSpan_Kind_Timestamp_Links() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var linkContext = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded); var startTimestamp = DateTimeOffset.Now.AddSeconds(-1); var parentSpan = (SpanSdk)tracer.StartSpan(SpanName); - using (var scope = tracer.StartActiveSpan(SpanName, parentSpan, SpanKind.Producer, - new SpanCreationOptions { StartTimestamp = startTimestamp, Links = new[] { new Link(linkContext) }, }, out var ispan)) + using (var scope = tracer.StartActiveSpan( + SpanName, + parentSpan, + SpanKind.Producer, + new SpanCreationOptions { StartTimestamp = startTimestamp, Links = new[] { new Link(linkContext) }, }, + out var ispan)) { Assert.NotNull(scope); @@ -1339,7 +1356,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartActiveSpan_ParentContext() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var parentContext = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded); using (var scope = tracer.StartActiveSpan(SpanName, parentContext, out var ispan)) @@ -1359,7 +1376,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartActiveSpan_ParentContext_Kind() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var parentContext = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded); using (var scope = tracer.StartActiveSpan(SpanName, parentContext, SpanKind.Producer, out var ispan)) @@ -1379,16 +1396,19 @@ namespace OpenTelemetry.Trace.Test Assert.False(tracer.CurrentSpan.Context.IsValid); } - [Fact] public void StartActiveSpan_ParentContext_Kind_Timestamp() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var startTimestamp = DateTimeOffset.Now.AddSeconds(-1); var parentContext = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded); - using (var scope = tracer.StartActiveSpan(SpanName, parentContext, SpanKind.Producer, - new SpanCreationOptions { StartTimestamp = startTimestamp }, out var ispan)) + using (var scope = tracer.StartActiveSpan( + SpanName, + parentContext, + SpanKind.Producer, + new SpanCreationOptions { StartTimestamp = startTimestamp }, + out var ispan)) { Assert.NotNull(scope); @@ -1407,13 +1427,17 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartActiveSpan_ParentContext_Kind_Timestamp_Links() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var linkContext = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded); var startTimestamp = DateTimeOffset.Now.AddSeconds(-1); var parentContext = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded); - using (var scope = tracer.StartActiveSpan(SpanName, parentContext, SpanKind.Producer, - new SpanCreationOptions { StartTimestamp = startTimestamp, Links = new[] { new Link(linkContext) }, }, out var ispan)) + using (var scope = tracer.StartActiveSpan( + SpanName, + parentContext, + SpanKind.Producer, + new SpanCreationOptions { StartTimestamp = startTimestamp, Links = new[] { new Link(linkContext) }, }, + out var ispan)) { Assert.NotNull(scope); @@ -1433,7 +1457,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartActiveSpan_ImplicitParentSpan() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); using (var parentScope = tracer.StartActiveSpan(SpanName, out var parentSpan)) { @@ -1454,7 +1478,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartActiveSpan_ImplicitParentSpan_Kind() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); using (var parentScope = tracer.StartActiveSpan(SpanName, out var parentSpan)) { @@ -1474,17 +1498,19 @@ namespace OpenTelemetry.Trace.Test Assert.False(tracer.CurrentSpan.Context.IsValid); } - [Fact] public void StartActiveSpan_ImplicitParentSpan_Kind_Timestamp() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var startTimestamp = DateTimeOffset.Now.AddSeconds(-1); using (var parentScope = tracer.StartActiveSpan(SpanName, out var parentspan)) { - using var scope = tracer.StartActiveSpan(SpanName, SpanKind.Producer, - new SpanCreationOptions { StartTimestamp = startTimestamp }, out var childSpan); + using var scope = tracer.StartActiveSpan( + SpanName, + SpanKind.Producer, + new SpanCreationOptions { StartTimestamp = startTimestamp }, + out var childSpan); Assert.NotNull(scope); var span = (SpanSdk)tracer.CurrentSpan; @@ -1503,14 +1529,17 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartActiveSpan_ImplicitParentSpan_Kind_Timestamp_Links() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var linkContext = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded); var startTimestamp = DateTimeOffset.Now.AddSeconds(-1); using (var parentScope = tracer.StartActiveSpan(SpanName, out _)) { - using var scope = tracer.StartActiveSpan(SpanName, SpanKind.Producer, - new SpanCreationOptions { StartTimestamp = startTimestamp, Links = new[] { new Link(linkContext) }, }, out var ispan); + using var scope = tracer.StartActiveSpan( + SpanName, + SpanKind.Producer, + new SpanCreationOptions { StartTimestamp = startTimestamp, Links = new[] { new Link(linkContext) }, }, + out var ispan); Assert.NotNull(scope); var span = (SpanSdk)tracer.CurrentSpan; @@ -1530,7 +1559,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartActiveSpan_FromActivity() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var activity = new Activity(SpanName).SetIdFormat(ActivityIdFormat.W3C).Start(); using (var scope = tracer.StartActiveSpanFromActivity(SpanName, activity, out var ispan)) @@ -1553,7 +1582,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartActiveSpan_FromActivity_Kind() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var activity = new Activity(SpanName).SetIdFormat(ActivityIdFormat.W3C).Start(); using (var scope = tracer.StartActiveSpanFromActivity(SpanName, activity, SpanKind.Consumer, out var ispan)) @@ -1575,7 +1604,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void StartActiveSpan_FromActivity_Kind_Links() { - var tracer = tracerFactory.GetTracer(null); + var tracer = this.tracerFactory.GetTracer(null); var linkContext = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded); var activity = new Activity(SpanName).SetIdFormat(ActivityIdFormat.W3C).Start(); @@ -1601,7 +1630,7 @@ namespace OpenTelemetry.Trace.Test var samplerMock = new Mock(); var tracer = TracerFactory.Create(b => b .SetSampler(samplerMock.Object) - .AddProcessorPipeline(p => p.AddProcessor(_ => spanProcessor))) + .AddProcessorPipeline(p => p.AddProcessor(_ => this.spanProcessor))) .GetTracer(null); samplerMock.Setup(s => s.ShouldSample( @@ -1615,7 +1644,8 @@ namespace OpenTelemetry.Trace.Test var span = (SpanSdk)tracer.StartSpan("test", SpanKind.Client, new SpanCreationOptions { Attributes = this.attributes, }); span.Attributes.AssertAreSame(this.attributes); - samplerMock.Verify(o => o.ShouldSample( + samplerMock.Verify( + o => o.ShouldSample( in It.Ref.IsAny, in It.Ref.IsAny, It.IsAny(), @@ -1630,7 +1660,7 @@ namespace OpenTelemetry.Trace.Test var samplerMock = new Mock(); var tracer = TracerFactory.Create(b => b .SetSampler(samplerMock.Object) - .AddProcessorPipeline(p => p.AddProcessor(_ => spanProcessor))) + .AddProcessorPipeline(p => p.AddProcessor(_ => this.spanProcessor))) .GetTracer(null); samplerMock.Setup(s => s.ShouldSample( @@ -1644,7 +1674,8 @@ namespace OpenTelemetry.Trace.Test var span = (SpanSdk)tracer.StartSpan("test", SpanKind.Client, new SpanCreationOptions { Attributes = this.attributes, }); Assert.Null(span.Attributes); - samplerMock.Verify(o => o.ShouldSample( + samplerMock.Verify( + o => o.ShouldSample( in It.Ref.IsAny, in It.Ref.IsAny, It.IsAny(), @@ -1653,15 +1684,15 @@ namespace OpenTelemetry.Trace.Test It.IsAny>()), Times.Once); } + public void Dispose() + { + Activity.Current = null; + } + private static void AssertApproxSameTimestamp(DateTimeOffset one, DateTimeOffset two) { var timeShift = Math.Abs((one - two).TotalMilliseconds); Assert.InRange(timeShift, 0, 40); } - - public void Dispose() - { - Activity.Current = null; - } } } diff --git a/test/OpenTelemetry.Tests/Implementation/Trace/StatusTest.cs b/test/OpenTelemetry.Tests/Implementation/Trace/StatusTest.cs index 0c78835b3..67f706c79 100644 --- a/test/OpenTelemetry.Tests/Implementation/Trace/StatusTest.cs +++ b/test/OpenTelemetry.Tests/Implementation/Trace/StatusTest.cs @@ -56,7 +56,6 @@ namespace OpenTelemetry.Trace.Test Assert.True(status1 == status2); } - [Fact] public void Not_Equality() { @@ -77,7 +76,6 @@ namespace OpenTelemetry.Trace.Test Assert.True(status1 != status2); } - [Fact] public void Not_Equality_WithDescription2() { @@ -87,6 +85,5 @@ namespace OpenTelemetry.Trace.Test Assert.NotEqual(status1, status2); Assert.True(status1 != status2); } - } } diff --git a/test/OpenTelemetry.Tests/Implementation/Trace/TestSpan.cs b/test/OpenTelemetry.Tests/Implementation/Trace/TestSpan.cs index 7f005725d..fa40494e1 100644 --- a/test/OpenTelemetry.Tests/Implementation/Trace/TestSpan.cs +++ b/test/OpenTelemetry.Tests/Implementation/Trace/TestSpan.cs @@ -1,4 +1,4 @@ -// +// // Copyright The OpenTelemetry Authors // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -20,8 +20,11 @@ namespace OpenTelemetry.Trace.Test public class TestSpan : TelemetrySpan { private Status status; + public override SpanContext Context { get; } + public override bool IsRecording { get; } + public override Status Status { set => this.status = value; } public override void UpdateName(string name) diff --git a/test/OpenTelemetry.Tests/Implementation/Trace/TracerTest.cs b/test/OpenTelemetry.Tests/Implementation/Trace/TracerTest.cs index d7cdb74a2..e749e89a7 100644 --- a/test/OpenTelemetry.Tests/Implementation/Trace/TracerTest.cs +++ b/test/OpenTelemetry.Tests/Implementation/Trace/TracerTest.cs @@ -14,20 +14,19 @@ // limitations under the License. // +using System; +using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Threading.Tasks; -using OpenTelemetry.Context.Propagation; using OpenTelemetry.Resources; -using OpenTelemetry.Tests; -using OpenTelemetry.Utils; -using Xunit; -using System; -using System.Collections.Generic; using OpenTelemetry.Testing.Export; +using OpenTelemetry.Tests; using OpenTelemetry.Trace.Configuration; using OpenTelemetry.Trace.Export; using OpenTelemetry.Trace.Samplers; +using OpenTelemetry.Utils; +using Xunit; namespace OpenTelemetry.Trace.Test { @@ -41,11 +40,11 @@ namespace OpenTelemetry.Trace.Test public TracerTest() { - spanProcessor = new SimpleSpanProcessor(new TestExporter(null)); - tracerConfiguration = new TracerConfiguration(); - tracerFactory = TracerFactory.Create(b => b - .AddProcessorPipeline(p => p.AddProcessor(_ => spanProcessor))); - this.tracerSdk = (TracerSdk)tracerFactory.GetTracer(null); + this.spanProcessor = new SimpleSpanProcessor(new TestExporter(null)); + this.tracerConfiguration = new TracerConfiguration(); + this.tracerFactory = TracerFactory.Create(b => b + .AddProcessorPipeline(p => p.AddProcessor(_ => this.spanProcessor))); + this.tracerSdk = (TracerSdk)this.tracerFactory.GetTracer(null); } [Fact] @@ -163,7 +162,7 @@ namespace OpenTelemetry.Trace.Test { var tracer = TracerFactory.Create(b => b .SetSampler(new AlwaysOffSampler()) - .AddProcessorPipeline(p => p.AddProcessor(n => spanProcessor))) + .AddProcessorPipeline(p => p.AddProcessor(n => this.spanProcessor))) .GetTracer(null); var span = tracer.StartSpan("foo"); @@ -173,7 +172,7 @@ namespace OpenTelemetry.Trace.Test [Fact] public void CreateSpan_ByTracerWithResource() { - var tracer = (TracerSdk)tracerFactory.GetTracer("foo", "semver:1.0.0"); + var tracer = (TracerSdk)this.tracerFactory.GetTracer("foo", "semver:1.0.0"); var span = (SpanSdk)tracer.StartSpan("some span"); Assert.Equal(tracer.LibraryResource, span.LibraryResource); } @@ -197,7 +196,7 @@ namespace OpenTelemetry.Trace.Test var maxNumberOfAttributes = 8; var traceConfig = new TracerConfiguration(maxNumberOfAttributes, 128, 32); var tracer = TracerFactory.Create(b => b - .AddProcessorPipeline(p => p.AddProcessor(n => spanProcessor)) + .AddProcessorPipeline(p => p.AddProcessor(n => this.spanProcessor)) .SetTracerOptions(traceConfig) .SetSampler(new AlwaysOnSampler())) .GetTracer(null); @@ -225,20 +224,22 @@ namespace OpenTelemetry.Trace.Test } Assert.Equal(maxNumberOfAttributes, span.Attributes.Count()); + // Test that we still have in the attributes map the latest maxNumberOfAttributes / 2 entries. for (long i = 0; i < maxNumberOfAttributes / 2; i++) { Assert.Equal( - i + maxNumberOfAttributes * 3 / 2, + i + (maxNumberOfAttributes * 3 / 2), span .Attributes - .GetValue("MyStringAttributeKey" + (i + maxNumberOfAttributes * 3 / 2))); + .GetValue("MyStringAttributeKey" + (i + (maxNumberOfAttributes * 3 / 2)))); } // Test that we have the newest re-added initial entries. for (long i = 0; i < maxNumberOfAttributes / 2; i++) { - Assert.Equal(i, + Assert.Equal( + i, span.Attributes.GetValue("MyStringAttributeKey" + i)); } } @@ -249,7 +250,7 @@ namespace OpenTelemetry.Trace.Test var maxNumberOfEvents = 8; var traceConfig = new TracerConfiguration(32, maxNumberOfEvents, 32); var tracer = TracerFactory.Create(b => b - .AddProcessorPipeline(p => p.AddProcessor(n => spanProcessor)) + .AddProcessorPipeline(p => p.AddProcessor(n => this.spanProcessor)) .SetTracerOptions(traceConfig) .SetSampler(new AlwaysOnSampler())) .GetTracer(null); @@ -282,13 +283,15 @@ namespace OpenTelemetry.Trace.Test [Fact] public void DroppingLinksFactory() { - var contextLink = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), + var contextLink = new SpanContext( + ActivityTraceId.CreateRandom(), + ActivitySpanId.CreateRandom(), ActivityTraceFlags.None); var maxNumberOfLinks = 8; var traceConfig = new TracerConfiguration(32, 128, maxNumberOfLinks); var tracer = TracerFactory.Create(b => b - .AddProcessorPipeline(p => p.AddProcessor(n => spanProcessor)) + .AddProcessorPipeline(p => p.AddProcessor(n => this.spanProcessor)) .SetTracerOptions(traceConfig) .SetSampler(new AlwaysOnSampler())) .GetTracer(null); @@ -320,17 +323,18 @@ namespace OpenTelemetry.Trace.Test } } - [Fact] public void DroppingLinksEnumerable() { - var contextLink = new SpanContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), + var contextLink = new SpanContext( + ActivityTraceId.CreateRandom(), + ActivitySpanId.CreateRandom(), ActivityTraceFlags.None); var maxNumberOfLinks = 8; var traceConfig = new TracerConfiguration(32, 128, maxNumberOfLinks); var tracer = TracerFactory.Create(b => b - .AddProcessorPipeline(p => p.AddProcessor(n => spanProcessor)) + .AddProcessorPipeline(p => p.AddProcessor(n => this.spanProcessor)) .SetTracerOptions(traceConfig) .SetSampler(new AlwaysOnSampler())) .GetTracer(null); diff --git a/test/OpenTelemetry.Tests/Implementation/Trace/TracingTest.cs b/test/OpenTelemetry.Tests/Implementation/Trace/TracingTest.cs index aa6cf54ad..1fd232965 100644 --- a/test/OpenTelemetry.Tests/Implementation/Trace/TracingTest.cs +++ b/test/OpenTelemetry.Tests/Implementation/Trace/TracingTest.cs @@ -32,7 +32,7 @@ namespace OpenTelemetry.Trace.Test } [Fact] - public void DefaultTraceConfig() + public void DefaultTracerConfig() { var options = new TracerConfiguration(); Assert.Equal(32, options.MaxNumberOfAttributes); diff --git a/test/TestApp.AspNetCore.3.1/CallbackMiddleware.cs b/test/TestApp.AspNetCore.3.1/CallbackMiddleware.cs index a900b8269..4a05bf82d 100644 --- a/test/TestApp.AspNetCore.3.1/CallbackMiddleware.cs +++ b/test/TestApp.AspNetCore.3.1/CallbackMiddleware.cs @@ -13,13 +13,30 @@ // See the License for the specific language governing permissions and // limitations under the License. // -using Microsoft.AspNetCore.Http; using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; namespace TestApp.AspNetCore._3._1 { public class CallbackMiddleware { + private readonly CallbackMiddlewareImpl impl; + private readonly RequestDelegate next; + + public CallbackMiddleware(RequestDelegate next, CallbackMiddlewareImpl impl) + { + this.next = next; + this.impl = impl; + } + + public async Task InvokeAsync(HttpContext context) + { + if (this.impl == null || await this.impl.ProcessAsync(context)) + { + await this.next(context); + } + } + public class CallbackMiddlewareImpl { public virtual async Task ProcessAsync(HttpContext context) @@ -27,23 +44,5 @@ namespace TestApp.AspNetCore._3._1 return await Task.FromResult(true); } } - - private readonly CallbackMiddlewareImpl _impl; - - private readonly RequestDelegate _next; - - public CallbackMiddleware(RequestDelegate next, CallbackMiddlewareImpl impl) - { - _next = next; - _impl = impl; - } - - public async Task InvokeAsync(HttpContext context) - { - if (_impl == null || await _impl.ProcessAsync(context)) - { - await _next(context); - } - } } } diff --git a/test/TestApp.AspNetCore.3.1/Controllers/ForwardController.cs b/test/TestApp.AspNetCore.3.1/Controllers/ForwardController.cs index 716ab79c1..ce7f8f018 100644 --- a/test/TestApp.AspNetCore.3.1/Controllers/ForwardController.cs +++ b/test/TestApp.AspNetCore.3.1/Controllers/ForwardController.cs @@ -43,8 +43,10 @@ namespace TestApp.AspNetCore._3._1.Controllers { var request = new HttpRequestMessage(HttpMethod.Post, argument.Url) { - Content = new StringContent(JsonConvert.SerializeObject(argument.Arguments), - Encoding.UTF8, "application/json"), + Content = new StringContent( + JsonConvert.SerializeObject(argument.Arguments), + Encoding.UTF8, + "application/json"), }; await this.httpClient.SendAsync(request); } @@ -56,15 +58,14 @@ namespace TestApp.AspNetCore._3._1.Controllers return result; } - } - public class Data - { - [JsonProperty("url")] - public string Url { get; set; } + public class Data + { + [JsonProperty("url")] + public string Url { get; set; } - [JsonProperty("arguments")] - public Data[] Arguments { get; set; } + [JsonProperty("arguments")] + public Data[] Arguments { get; set; } + } } } - diff --git a/test/TestApp.AspNetCore.3.1/Properties/AssemblyInfo.cs b/test/TestApp.AspNetCore.3.1/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..a4d9c0c7c --- /dev/null +++ b/test/TestApp.AspNetCore.3.1/Properties/AssemblyInfo.cs @@ -0,0 +1,24 @@ +// +// Copyright The OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +using System.Diagnostics.CodeAnalysis; + +[assembly: SuppressMessage( + "StyleCop.CSharp.NamingRules", + "SA1300", + Justification = "Reviewed.", + Scope = "namespaceanddescendants", + Target = "TestApp.AspNetCore._3._1")] diff --git a/test/TestApp.AspNetCore.3.1/Startup.cs b/test/TestApp.AspNetCore.3.1/Startup.cs index 7f98715df..029966963 100644 --- a/test/TestApp.AspNetCore.3.1/Startup.cs +++ b/test/TestApp.AspNetCore.3.1/Startup.cs @@ -29,7 +29,7 @@ namespace TestApp.AspNetCore._3._1 { public Startup(IConfiguration configuration) { - Configuration = configuration; + this.Configuration = configuration; } public IConfiguration Configuration { get; }