From 40a51b69bcbfa0de1ebc1e2aa8ccb921f1490ec4 Mon Sep 17 00:00:00 2001 From: Liudmila Molkova Date: Thu, 19 Dec 2019 13:46:57 -0800 Subject: [PATCH] Move test infra to .NET Core 3.0 (#403) * Add W3C TraceContext validation test app * fix linux build * some fixes * Use ASP.NET Core test app as W3C test suite example * broken solution * remove new project * move tests to 3.0 * update minver * fix http tests to force 2.0 * minver is in common props, remove from projects * move lightstep tests to 3.1 --- .vsts/ci-build.yml | 2 +- .vsts/ci-myget-update.yml | 2 +- CONTRIBUTING.md | 6 +-- OpenTelemetry.proj | 2 +- OpenTelemetry.sln | 4 +- benchmarks/Benchmarks.csproj | 2 +- build/Common.prod.props | 2 +- samples/Exporters/Exporters.csproj | 3 +- .../OpenTelemetry.Api.csproj | 1 + .../AspNetCoreCollector.cs | 2 +- .../AspNetCoreCollectorOptions.cs | 6 ++- .../Implementation/HttpInListener.cs | 11 ++++- .../OpenTelemetry.Collector.AspNetCore.csproj | 7 +++ ...penTelemetry.Collector.Dependencies.csproj | 1 + ...emetry.Collector.StackExchangeRedis.csproj | 1 + ...emetry.Exporter.ApplicationInsights.csproj | 1 + ...etry.Exporter.OpenTelemetryProtocol.csproj | 1 + .../OpenTelemetry.Exporter.Prometheus.csproj | 1 + .../OpenTelemetry.Exporter.Stackdriver.csproj | 1 + .../OpenTelemetry.Exporter.Zipkin.csproj | 1 + .../OpenTelemetry.Hosting.csproj | 1 + .../OpenTelemetry.Shims.OpenTracing.csproj | 1 + .../Collector/CollectorEventSource.cs | 8 +++- .../Collector/ListenerHandler.cs | 3 -- .../BasicTests.cs | 35 +++----------- ...stsCollectionsIsAccordingToTheSpecTests.cs | 4 +- ...elemetry.Collector.AspNetCore.Tests.csproj | 7 ++- .../HttpClientTests.cs | 1 + ...emetry.Collector.Dependencies.Tests.csproj | 2 +- ....Collector.StackExchangeRedis.Tests.csproj | 2 +- ....Exporter.ApplicationInsights.Tests.csproj | 2 +- ...OpenTelemetry.Exporter.Jaeger.Tests.csproj | 4 +- ...nTelemetry.Exporter.LightStep.Tests.csproj | 2 +- ...Telemetry.Exporter.Prometheus.Tests.csproj | 2 +- ...elemetry.Exporter.Stackdriver.Tests.csproj | 2 +- .../OpenTelemetry.Hosting.Tests.csproj | 2 +- ...enTelemetry.Shims.OpenTracing.Tests.csproj | 2 +- .../OpenTelemetry.Tests.csproj | 2 +- .../CallbackMiddleware.cs | 2 +- .../Controllers/ForwardController.cs | 48 +++++++------------ .../Controllers/ValuesController.cs | 2 +- .../Program.cs | 2 +- test/TestApp.AspNetCore.3.0/README.md | 8 ++++ .../Startup.cs | 19 ++++++-- .../TestApp.AspNetCore.3.0.csproj} | 12 ++--- .../appsettings.Development.json | 0 .../appsettings.json | 0 47 files changed, 121 insertions(+), 111 deletions(-) rename test/{TestApp.AspNetCore.2.0 => TestApp.AspNetCore.3.0}/CallbackMiddleware.cs (97%) rename test/{TestApp.AspNetCore.2.0 => TestApp.AspNetCore.3.0}/Controllers/ForwardController.cs (52%) rename test/{TestApp.AspNetCore.2.0 => TestApp.AspNetCore.3.0}/Controllers/ValuesController.cs (96%) rename test/{TestApp.AspNetCore.2.0 => TestApp.AspNetCore.3.0}/Program.cs (96%) create mode 100644 test/TestApp.AspNetCore.3.0/README.md rename test/{TestApp.AspNetCore.2.0 => TestApp.AspNetCore.3.0}/Startup.cs (76%) rename test/{TestApp.AspNetCore.2.0/TestApp.AspNetCore.2.0.csproj => TestApp.AspNetCore.3.0/TestApp.AspNetCore.3.0.csproj} (66%) rename test/{TestApp.AspNetCore.2.0 => TestApp.AspNetCore.3.0}/appsettings.Development.json (100%) rename test/{TestApp.AspNetCore.2.0 => TestApp.AspNetCore.3.0}/appsettings.json (100%) diff --git a/.vsts/ci-build.yml b/.vsts/ci-build.yml index da41cd560..c64e4d936 100644 --- a/.vsts/ci-build.yml +++ b/.vsts/ci-build.yml @@ -1,7 +1,7 @@ # CI build. No publioshing of artifacts variables: - DotNetVersion: "2.2.101" + DotNetVersion: "3.1.100" # A pipeline with no CI trigger trigger: none diff --git a/.vsts/ci-myget-update.yml b/.vsts/ci-myget-update.yml index af84cf803..6fc36d780 100644 --- a/.vsts/ci-myget-update.yml +++ b/.vsts/ci-myget-update.yml @@ -1,7 +1,7 @@ # CI build with the upload to MyGet variables: - DotNetVersion: "2.2.101" + DotNetVersion: "3.1.100" trigger: branches: diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index fa40149b3..641b05c1c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -49,7 +49,7 @@ You can contribute to this project from a Windows, macOS or Linux machine. Requi In all platforms, the requirements are: * Git client and command line tools. You may use Visual Studio to clone the repo, but we use [SourceLink](https://github.com/dotnet/sourcelink) to build and it needs git. -* .NET Core 2.1+ +* .NET Core 3.1+ #### Windows @@ -67,7 +67,7 @@ This is because unit tests targeting .NET Framework (i.e: `net46`) are disabled Open `OpenTelemetry.sln` in your IDE of choice and follow normal development process. -To build from the command line you need `dotnet` version `2.1+`. +To build from the command line you need `dotnet` version `3.1+`. ``` sh dotnet build OpenTelemetry.sln @@ -79,7 +79,7 @@ You can use any of the IDEs mentioned above to test your contribution. Open root folder or `OpenTelemetry.sln` in your editor and follow normal development process. -To test from command line you need `dotnet` version `2.0+`. +To test from command line you need `dotnet` version `3.1+`. ``` sh dotnet test OpenTelemetry.sln diff --git a/OpenTelemetry.proj b/OpenTelemetry.proj index acb97f30b..db609573f 100644 --- a/OpenTelemetry.proj +++ b/OpenTelemetry.proj @@ -1,5 +1,5 @@ - + diff --git a/OpenTelemetry.sln b/OpenTelemetry.sln index bfd65b6ee..04bb5132b 100644 --- a/OpenTelemetry.sln +++ b/OpenTelemetry.sln @@ -54,7 +54,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenTelemetry.Collector.Asp EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testdata", "testdata", "{77C7929A-2EED-4AA6-8705-B5C443C8AA0F}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestApp.AspNetCore.2.0", "test\TestApp.AspNetCore.2.0\TestApp.AspNetCore.2.0.csproj", "{F2F81E76-6A0E-466B-B673-EBBF1A9ED075}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestApp.AspNetCore.3.0", "test\TestApp.AspNetCore.3.0\TestApp.AspNetCore.3.0.csproj", "{F2F81E76-6A0E-466B-B673-EBBF1A9ED075}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenTelemetry.Exporter.Stackdriver.Tests", "test\OpenTelemetry.Exporter.Stackdriver.Tests\OpenTelemetry.Exporter.Stackdriver.Tests.csproj", "{6875032B-DFDC-4CDE-A283-37CA7F99926A}" EndProject @@ -105,7 +105,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenTelemetry.Hosting.Tests EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenTelemetry.Exporter.OpenTelemetryProtocol", "src\OpenTelemetry.Exporter.OpenTelemetryProtocol\OpenTelemetry.Exporter.OpenTelemetryProtocol.csproj", "{A38AC295-2745-4B85-8B6B-DCA864CEDD5B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenTelemetry.Exporter.Prometheus.Tests", "test\OpenTelemetry.Exporter.Prometheus.Tests\OpenTelemetry.Exporter.Prometheus.Tests.csproj", "{393128EC-454D-45E8-A204-EC54904E5B3F}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenTelemetry.Exporter.Prometheus.Tests", "test\OpenTelemetry.Exporter.Prometheus.Tests\OpenTelemetry.Exporter.Prometheus.Tests.csproj", "{393128EC-454D-45E8-A204-EC54904E5B3F}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/benchmarks/Benchmarks.csproj b/benchmarks/Benchmarks.csproj index cd5cff410..742a3170e 100644 --- a/benchmarks/Benchmarks.csproj +++ b/benchmarks/Benchmarks.csproj @@ -2,7 +2,7 @@ Exe - netcoreapp2.2;net462 + netcoreapp3.1;net462 false diff --git a/build/Common.prod.props b/build/Common.prod.props index ba4d13cf7..d3bf6d613 100644 --- a/build/Common.prod.props +++ b/build/Common.prod.props @@ -2,7 +2,7 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/samples/Exporters/Exporters.csproj b/samples/Exporters/Exporters.csproj index 717bcc0b2..f1d5316df 100644 --- a/samples/Exporters/Exporters.csproj +++ b/samples/Exporters/Exporters.csproj @@ -3,7 +3,7 @@ Exe - netcoreapp2.1 + netcoreapp3.0 false @@ -27,5 +27,4 @@ - diff --git a/src/OpenTelemetry.Api/OpenTelemetry.Api.csproj b/src/OpenTelemetry.Api/OpenTelemetry.Api.csproj index 37d1a08db..60e396a09 100644 --- a/src/OpenTelemetry.Api/OpenTelemetry.Api.csproj +++ b/src/OpenTelemetry.Api/OpenTelemetry.Api.csproj @@ -21,4 +21,5 @@ + \ No newline at end of file diff --git a/src/OpenTelemetry.Collector.AspNetCore/AspNetCoreCollector.cs b/src/OpenTelemetry.Collector.AspNetCore/AspNetCoreCollector.cs index a291e3f76..73fdd5c90 100644 --- a/src/OpenTelemetry.Collector.AspNetCore/AspNetCoreCollector.cs +++ b/src/OpenTelemetry.Collector.AspNetCore/AspNetCoreCollector.cs @@ -42,7 +42,7 @@ namespace OpenTelemetry.Collector.AspNetCore /// Configuration options for dependencies collector. public AspNetCoreCollector(Tracer tracer, AspNetCoreCollectorOptions options) { - this.diagnosticSourceSubscriber = new DiagnosticSourceSubscriber(new HttpInListener("Microsoft.AspNetCore", tracer), options.EventFilter); + this.diagnosticSourceSubscriber = new DiagnosticSourceSubscriber(new HttpInListener("Microsoft.AspNetCore", tracer, options.RequestFilter), null); this.diagnosticSourceSubscriber.Subscribe(); } diff --git a/src/OpenTelemetry.Collector.AspNetCore/AspNetCoreCollectorOptions.cs b/src/OpenTelemetry.Collector.AspNetCore/AspNetCoreCollectorOptions.cs index ae4a3feae..c1e420b5c 100644 --- a/src/OpenTelemetry.Collector.AspNetCore/AspNetCoreCollectorOptions.cs +++ b/src/OpenTelemetry.Collector.AspNetCore/AspNetCoreCollectorOptions.cs @@ -13,7 +13,9 @@ // See the License for the specific language governing permissions and // limitations under the License. // + using System; +using Microsoft.AspNetCore.Http; namespace OpenTelemetry.Collector.AspNetCore { @@ -25,9 +27,9 @@ namespace OpenTelemetry.Collector.AspNetCore /// /// Gets or sets a hook to exclude calls based on domain or other per-request criterion. /// - internal Func EventFilter { get; set; } = DefaultFilter; + internal Predicate RequestFilter { get; set; } = DefaultFilter; - private static bool DefaultFilter(string activityName, object arg1, object unused) + private static bool DefaultFilter(HttpContext httpContext) { return true; } diff --git a/src/OpenTelemetry.Collector.AspNetCore/Implementation/HttpInListener.cs b/src/OpenTelemetry.Collector.AspNetCore/Implementation/HttpInListener.cs index 97e390a12..7e427f1cd 100644 --- a/src/OpenTelemetry.Collector.AspNetCore/Implementation/HttpInListener.cs +++ b/src/OpenTelemetry.Collector.AspNetCore/Implementation/HttpInListener.cs @@ -14,6 +14,7 @@ // limitations under the License. // +using System; using System.Diagnostics; using System.Linq; using System.Text; @@ -32,11 +33,13 @@ namespace OpenTelemetry.Collector.AspNetCore.Implementation private readonly PropertyFetcher beforeActionAttributeRouteInfoFetcher = new PropertyFetcher("AttributeRouteInfo"); private readonly PropertyFetcher beforeActionTemplateFetcher = new PropertyFetcher("Template"); private readonly bool hostingSupportsW3C = false; + private readonly Predicate requestFilter; - public HttpInListener(string name, Tracer tracer) + public HttpInListener(string name, Tracer tracer, Predicate requestFilter) : base(name, tracer) { this.hostingSupportsW3C = typeof(HttpRequest).Assembly.GetName().Version.Major >= 3; + this.requestFilter = requestFilter; } public override void OnStartActivity(Activity activity, object payload) @@ -50,6 +53,12 @@ namespace OpenTelemetry.Collector.AspNetCore.Implementation return; } + if (this.requestFilter != null && !this.requestFilter(context)) + { + CollectorEventSource.Log.RequestIsFilteredOut(activity.OperationName); + return; + } + var request = context.Request; // see the spec https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/data-semantic-conventions.md diff --git a/src/OpenTelemetry.Collector.AspNetCore/OpenTelemetry.Collector.AspNetCore.csproj b/src/OpenTelemetry.Collector.AspNetCore/OpenTelemetry.Collector.AspNetCore.csproj index 4d32f6594..63eaf9a1f 100644 --- a/src/OpenTelemetry.Collector.AspNetCore/OpenTelemetry.Collector.AspNetCore.csproj +++ b/src/OpenTelemetry.Collector.AspNetCore/OpenTelemetry.Collector.AspNetCore.csproj @@ -10,4 +10,11 @@ + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + diff --git a/src/OpenTelemetry.Collector.Dependencies/OpenTelemetry.Collector.Dependencies.csproj b/src/OpenTelemetry.Collector.Dependencies/OpenTelemetry.Collector.Dependencies.csproj index d3d643b88..73f88fd35 100644 --- a/src/OpenTelemetry.Collector.Dependencies/OpenTelemetry.Collector.Dependencies.csproj +++ b/src/OpenTelemetry.Collector.Dependencies/OpenTelemetry.Collector.Dependencies.csproj @@ -12,4 +12,5 @@ + diff --git a/src/OpenTelemetry.Collector.StackExchangeRedis/OpenTelemetry.Collector.StackExchangeRedis.csproj b/src/OpenTelemetry.Collector.StackExchangeRedis/OpenTelemetry.Collector.StackExchangeRedis.csproj index 054a5bf87..47999325c 100644 --- a/src/OpenTelemetry.Collector.StackExchangeRedis/OpenTelemetry.Collector.StackExchangeRedis.csproj +++ b/src/OpenTelemetry.Collector.StackExchangeRedis/OpenTelemetry.Collector.StackExchangeRedis.csproj @@ -9,4 +9,5 @@ + diff --git a/src/OpenTelemetry.Exporter.ApplicationInsights/OpenTelemetry.Exporter.ApplicationInsights.csproj b/src/OpenTelemetry.Exporter.ApplicationInsights/OpenTelemetry.Exporter.ApplicationInsights.csproj index 8e2c64a1e..a090ab0fe 100644 --- a/src/OpenTelemetry.Exporter.ApplicationInsights/OpenTelemetry.Exporter.ApplicationInsights.csproj +++ b/src/OpenTelemetry.Exporter.ApplicationInsights/OpenTelemetry.Exporter.ApplicationInsights.csproj @@ -13,4 +13,5 @@ + diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OpenTelemetry.Exporter.OpenTelemetryProtocol.csproj b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OpenTelemetry.Exporter.OpenTelemetryProtocol.csproj index 6c8242185..5a684171e 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OpenTelemetry.Exporter.OpenTelemetryProtocol.csproj +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OpenTelemetry.Exporter.OpenTelemetryProtocol.csproj @@ -17,4 +17,5 @@ Implementation + diff --git a/src/OpenTelemetry.Exporter.Prometheus/OpenTelemetry.Exporter.Prometheus.csproj b/src/OpenTelemetry.Exporter.Prometheus/OpenTelemetry.Exporter.Prometheus.csproj index 46c1e64fb..bc28c0bff 100644 --- a/src/OpenTelemetry.Exporter.Prometheus/OpenTelemetry.Exporter.Prometheus.csproj +++ b/src/OpenTelemetry.Exporter.Prometheus/OpenTelemetry.Exporter.Prometheus.csproj @@ -8,4 +8,5 @@ + diff --git a/src/OpenTelemetry.Exporter.Stackdriver/OpenTelemetry.Exporter.Stackdriver.csproj b/src/OpenTelemetry.Exporter.Stackdriver/OpenTelemetry.Exporter.Stackdriver.csproj index c9d7cf978..72641de1f 100644 --- a/src/OpenTelemetry.Exporter.Stackdriver/OpenTelemetry.Exporter.Stackdriver.csproj +++ b/src/OpenTelemetry.Exporter.Stackdriver/OpenTelemetry.Exporter.Stackdriver.csproj @@ -18,4 +18,5 @@ + diff --git a/src/OpenTelemetry.Exporter.Zipkin/OpenTelemetry.Exporter.Zipkin.csproj b/src/OpenTelemetry.Exporter.Zipkin/OpenTelemetry.Exporter.Zipkin.csproj index 906ca8be2..e53935a68 100644 --- a/src/OpenTelemetry.Exporter.Zipkin/OpenTelemetry.Exporter.Zipkin.csproj +++ b/src/OpenTelemetry.Exporter.Zipkin/OpenTelemetry.Exporter.Zipkin.csproj @@ -13,4 +13,5 @@ + diff --git a/src/OpenTelemetry.Hosting/OpenTelemetry.Hosting.csproj b/src/OpenTelemetry.Hosting/OpenTelemetry.Hosting.csproj index c9117876c..c2243c1b1 100644 --- a/src/OpenTelemetry.Hosting/OpenTelemetry.Hosting.csproj +++ b/src/OpenTelemetry.Hosting/OpenTelemetry.Hosting.csproj @@ -9,4 +9,5 @@ + \ No newline at end of file diff --git a/src/OpenTelemetry.Shims.OpenTracing/OpenTelemetry.Shims.OpenTracing.csproj b/src/OpenTelemetry.Shims.OpenTracing/OpenTelemetry.Shims.OpenTracing.csproj index 9085a6600..949bc805e 100644 --- a/src/OpenTelemetry.Shims.OpenTracing/OpenTelemetry.Shims.OpenTracing.csproj +++ b/src/OpenTelemetry.Shims.OpenTracing/OpenTelemetry.Shims.OpenTracing.csproj @@ -20,4 +20,5 @@ + diff --git a/src/OpenTelemetry/Collector/CollectorEventSource.cs b/src/OpenTelemetry/Collector/CollectorEventSource.cs index f97e3fceb..0b4f688c2 100644 --- a/src/OpenTelemetry/Collector/CollectorEventSource.cs +++ b/src/OpenTelemetry/Collector/CollectorEventSource.cs @@ -1,4 +1,4 @@ -// +// // Copyright 2018, OpenTelemetry Authors // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -79,6 +79,12 @@ namespace OpenTelemetry.Collector this.WriteEvent(5, eventName); } + [Event(6, Message = "Request is filtered out.", Level = EventLevel.Verbose)] + public void RequestIsFilteredOut(string eventName) + { + this.WriteEvent(6, eventName); + } + /// /// Returns a culture-independent string representation of the given object, /// appropriate for diagnostics tracing. diff --git a/src/OpenTelemetry/Collector/ListenerHandler.cs b/src/OpenTelemetry/Collector/ListenerHandler.cs index 47e04ce81..88ba199e7 100644 --- a/src/OpenTelemetry/Collector/ListenerHandler.cs +++ b/src/OpenTelemetry/Collector/ListenerHandler.cs @@ -50,9 +50,6 @@ namespace OpenTelemetry.Collector public virtual void OnException(Activity activity, object payload) { - var span = this.Tracer.CurrentSpan; - - // TODO: gather exception information } public virtual void OnCustom(string name, Activity activity, object payload) diff --git a/test/OpenTelemetry.Collector.AspNetCore.Tests/BasicTests.cs b/test/OpenTelemetry.Collector.AspNetCore.Tests/BasicTests.cs index bdb87282a..d42df0f86 100644 --- a/test/OpenTelemetry.Collector.AspNetCore.Tests/BasicTests.cs +++ b/test/OpenTelemetry.Collector.AspNetCore.Tests/BasicTests.cs @@ -17,7 +17,6 @@ using OpenTelemetry.Trace.Configuration; using Xunit; using Microsoft.AspNetCore.Mvc.Testing; -using TestApp.AspNetCore._2._0; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using OpenTelemetry.Trace; @@ -26,11 +25,10 @@ using Moq; using Microsoft.AspNetCore.TestHost; using System; using System.Threading; -using OpenTelemetry.Context.Propagation; -using Microsoft.AspNetCore.Http; -using System.Collections.Generic; using System.Diagnostics; +using System.Net.Http; using OpenTelemetry.Trace.Samplers; +using TestApp.AspNetCore._3._0; namespace OpenTelemetry.Collector.AspNetCore.Tests { @@ -98,13 +96,6 @@ namespace OpenTelemetry.Collector.AspNetCore.Tests var expectedTraceId = ActivityTraceId.CreateRandom(); var expectedSpanId = ActivitySpanId.CreateRandom(); - var tf = new Mock(); - tf.Setup(m => m.Extract(It.IsAny(), It.IsAny>>())).Returns(new SpanContext( - expectedTraceId, - expectedSpanId, - ActivityTraceFlags.Recorded, - true)); - // Arrange using (var testFactory = this.factory .WithWebHostBuilder(builder => @@ -112,15 +103,16 @@ namespace OpenTelemetry.Collector.AspNetCore.Tests { services.AddSingleton(_ => TracerFactory.Create(b => b - .SetSampler(new AlwaysSampleSampler()) - .SetTextFormat(tf.Object) .AddProcessorPipeline(p => p.AddProcessor(n => spanProcessor.Object)) .AddRequestCollector())); }))) using (var client = testFactory.CreateClient()) { + var request = new HttpRequestMessage(HttpMethod.Get, "/api/values/2"); + request.Headers.Add("traceparent", $"00-{expectedTraceId}-{expectedSpanId}-01"); + // Act - var response = await client.GetAsync("/api/values/2"); + var response = await client.SendAsync(request); // Assert response.EnsureSuccessStatusCode(); // Status Code 200-299 @@ -142,27 +134,14 @@ namespace OpenTelemetry.Collector.AspNetCore.Tests [Fact] public async Task FilterOutRequest() { - bool Filter(string eventName, object arg1, object _) - { - if (eventName == "Microsoft.AspNetCore.Hosting.HttpRequestIn" && - arg1 is HttpContext context && - context.Request.Path == "/api/values/2") - { - return false; - } - - return true; - } - var spanProcessor = new Mock(); void ConfigureTestServices(IServiceCollection services) { services.AddSingleton(_ => TracerFactory.Create(b => b - .SetSampler(new AlwaysSampleSampler()) .AddProcessorPipeline(p => p.AddProcessor(n => spanProcessor.Object)) - .AddRequestCollector(o => o.EventFilter = Filter))); + .AddRequestCollector(o => o.RequestFilter = (httpContext) => httpContext.Request.Path != "/api/values/2"))); } // Arrange diff --git a/test/OpenTelemetry.Collector.AspNetCore.Tests/IncomingRequestsCollectionsIsAccordingToTheSpecTests.cs b/test/OpenTelemetry.Collector.AspNetCore.Tests/IncomingRequestsCollectionsIsAccordingToTheSpecTests.cs index fbcacf4ec..dbbd85e5f 100644 --- a/test/OpenTelemetry.Collector.AspNetCore.Tests/IncomingRequestsCollectionsIsAccordingToTheSpecTests.cs +++ b/test/OpenTelemetry.Collector.AspNetCore.Tests/IncomingRequestsCollectionsIsAccordingToTheSpecTests.cs @@ -17,7 +17,6 @@ using OpenTelemetry.Trace.Configuration; using Xunit; using Microsoft.AspNetCore.Mvc.Testing; -using TestApp.AspNetCore._2._0; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using OpenTelemetry.Trace; @@ -26,7 +25,7 @@ using Moq; using Microsoft.AspNetCore.TestHost; using System; using Microsoft.AspNetCore.Http; -using OpenTelemetry.Trace.Samplers; +using TestApp.AspNetCore._3._0; namespace OpenTelemetry.Collector.AspNetCore.Tests { @@ -65,7 +64,6 @@ namespace OpenTelemetry.Collector.AspNetCore.Tests services.AddSingleton(new TestCallbackMiddlewareImpl()); services.AddSingleton(_ => TracerFactory.Create(b => b - .SetSampler(new AlwaysSampleSampler()) .AddProcessorPipeline(p => p.AddProcessor(e => spanProcessor.Object)) .AddRequestCollector())); })) diff --git a/test/OpenTelemetry.Collector.AspNetCore.Tests/OpenTelemetry.Collector.AspNetCore.Tests.csproj b/test/OpenTelemetry.Collector.AspNetCore.Tests/OpenTelemetry.Collector.AspNetCore.Tests.csproj index ac64a261c..4a29a710f 100644 --- a/test/OpenTelemetry.Collector.AspNetCore.Tests/OpenTelemetry.Collector.AspNetCore.Tests.csproj +++ b/test/OpenTelemetry.Collector.AspNetCore.Tests/OpenTelemetry.Collector.AspNetCore.Tests.csproj @@ -1,7 +1,7 @@  Unit test project for OpenTelemetry - netcoreapp2.1 + netcoreapp3.0 @@ -28,9 +28,8 @@ - - - + + diff --git a/test/OpenTelemetry.Collector.Dependencies.Tests/HttpClientTests.cs b/test/OpenTelemetry.Collector.Dependencies.Tests/HttpClientTests.cs index aeaa8fa9c..52700076c 100644 --- a/test/OpenTelemetry.Collector.Dependencies.Tests/HttpClientTests.cs +++ b/test/OpenTelemetry.Collector.Dependencies.Tests/HttpClientTests.cs @@ -110,6 +110,7 @@ namespace OpenTelemetry.Collector.Dependencies.Tests { RequestUri = new Uri(tc.Url), Method = new HttpMethod(tc.Method), + Version = new Version(2, 0), }; if (tc.Headers != null) diff --git a/test/OpenTelemetry.Collector.Dependencies.Tests/OpenTelemetry.Collector.Dependencies.Tests.csproj b/test/OpenTelemetry.Collector.Dependencies.Tests/OpenTelemetry.Collector.Dependencies.Tests.csproj index 8430ce654..444b7e068 100644 --- a/test/OpenTelemetry.Collector.Dependencies.Tests/OpenTelemetry.Collector.Dependencies.Tests.csproj +++ b/test/OpenTelemetry.Collector.Dependencies.Tests/OpenTelemetry.Collector.Dependencies.Tests.csproj @@ -1,7 +1,7 @@  Unit test project for OpenTelemetry - netcoreapp2.1 + netcoreapp3.1 diff --git a/test/OpenTelemetry.Collector.StackExchangeRedis.Tests/OpenTelemetry.Collector.StackExchangeRedis.Tests.csproj b/test/OpenTelemetry.Collector.StackExchangeRedis.Tests/OpenTelemetry.Collector.StackExchangeRedis.Tests.csproj index 3ac713a51..ddbc1e8b9 100644 --- a/test/OpenTelemetry.Collector.StackExchangeRedis.Tests/OpenTelemetry.Collector.StackExchangeRedis.Tests.csproj +++ b/test/OpenTelemetry.Collector.StackExchangeRedis.Tests/OpenTelemetry.Collector.StackExchangeRedis.Tests.csproj @@ -1,7 +1,7 @@  Unit test project for ApplicationInsights Exporter for OpenTelemetry - netcoreapp2.1 + netcoreapp3.1 $(TargetFrameworks);net461 diff --git a/test/OpenTelemetry.Exporter.ApplicationInsights.Tests/OpenTelemetry.Exporter.ApplicationInsights.Tests.csproj b/test/OpenTelemetry.Exporter.ApplicationInsights.Tests/OpenTelemetry.Exporter.ApplicationInsights.Tests.csproj index f833c61ba..79f4623e2 100644 --- a/test/OpenTelemetry.Exporter.ApplicationInsights.Tests/OpenTelemetry.Exporter.ApplicationInsights.Tests.csproj +++ b/test/OpenTelemetry.Exporter.ApplicationInsights.Tests/OpenTelemetry.Exporter.ApplicationInsights.Tests.csproj @@ -1,7 +1,7 @@  Unit test project for ApplicationInsights Exporter for OpenTelemetry - netcoreapp2.1 + netcoreapp3.1 $(TargetFrameworks);net46 diff --git a/test/OpenTelemetry.Exporter.Jaeger.Tests/OpenTelemetry.Exporter.Jaeger.Tests.csproj b/test/OpenTelemetry.Exporter.Jaeger.Tests/OpenTelemetry.Exporter.Jaeger.Tests.csproj index 4b35b6e2c..2e02ef8c8 100644 --- a/test/OpenTelemetry.Exporter.Jaeger.Tests/OpenTelemetry.Exporter.Jaeger.Tests.csproj +++ b/test/OpenTelemetry.Exporter.Jaeger.Tests/OpenTelemetry.Exporter.Jaeger.Tests.csproj @@ -1,7 +1,7 @@ - + Unit test project for Jaeger Exporter for OpenTelemetry - netcoreapp2.1 + netcoreapp3.1 $(TargetFrameworks);net46 false diff --git a/test/OpenTelemetry.Exporter.LightStep.Tests/OpenTelemetry.Exporter.LightStep.Tests.csproj b/test/OpenTelemetry.Exporter.LightStep.Tests/OpenTelemetry.Exporter.LightStep.Tests.csproj index 4906b2b35..6071bda36 100644 --- a/test/OpenTelemetry.Exporter.LightStep.Tests/OpenTelemetry.Exporter.LightStep.Tests.csproj +++ b/test/OpenTelemetry.Exporter.LightStep.Tests/OpenTelemetry.Exporter.LightStep.Tests.csproj @@ -1,7 +1,7 @@  - netcoreapp2.2 + netcoreapp3.1 false diff --git a/test/OpenTelemetry.Exporter.Prometheus.Tests/OpenTelemetry.Exporter.Prometheus.Tests.csproj b/test/OpenTelemetry.Exporter.Prometheus.Tests/OpenTelemetry.Exporter.Prometheus.Tests.csproj index 91e05a84c..7e63d5477 100644 --- a/test/OpenTelemetry.Exporter.Prometheus.Tests/OpenTelemetry.Exporter.Prometheus.Tests.csproj +++ b/test/OpenTelemetry.Exporter.Prometheus.Tests/OpenTelemetry.Exporter.Prometheus.Tests.csproj @@ -1,7 +1,7 @@  - netcoreapp2.1 + netcoreapp3.1 false diff --git a/test/OpenTelemetry.Exporter.Stackdriver.Tests/OpenTelemetry.Exporter.Stackdriver.Tests.csproj b/test/OpenTelemetry.Exporter.Stackdriver.Tests/OpenTelemetry.Exporter.Stackdriver.Tests.csproj index 619ceb3fe..4fbe6181b 100644 --- a/test/OpenTelemetry.Exporter.Stackdriver.Tests/OpenTelemetry.Exporter.Stackdriver.Tests.csproj +++ b/test/OpenTelemetry.Exporter.Stackdriver.Tests/OpenTelemetry.Exporter.Stackdriver.Tests.csproj @@ -1,7 +1,7 @@  Unit test project for Stackdriver Exporter for OpenTelemetry - netcoreapp2.1 + netcoreapp3.1 $(TargetFrameworks);net46 diff --git a/test/OpenTelemetry.Hosting.Tests/OpenTelemetry.Hosting.Tests.csproj b/test/OpenTelemetry.Hosting.Tests/OpenTelemetry.Hosting.Tests.csproj index 853d286fe..aaeb6c389 100644 --- a/test/OpenTelemetry.Hosting.Tests/OpenTelemetry.Hosting.Tests.csproj +++ b/test/OpenTelemetry.Hosting.Tests/OpenTelemetry.Hosting.Tests.csproj @@ -1,7 +1,7 @@  Unit test project for ApplicationInsights Exporter for OpenTelemetry - netcoreapp2.1 + netcoreapp3.1 $(TargetFrameworks);net461 diff --git a/test/OpenTelemetry.Shims.OpenTracing.Tests/OpenTelemetry.Shims.OpenTracing.Tests.csproj b/test/OpenTelemetry.Shims.OpenTracing.Tests/OpenTelemetry.Shims.OpenTracing.Tests.csproj index e587f577d..9c5b8dd9b 100644 --- a/test/OpenTelemetry.Shims.OpenTracing.Tests/OpenTelemetry.Shims.OpenTracing.Tests.csproj +++ b/test/OpenTelemetry.Shims.OpenTracing.Tests/OpenTelemetry.Shims.OpenTracing.Tests.csproj @@ -1,7 +1,7 @@  Unit test project for OpenTelemetry.Shims.OpenTracing - netcoreapp2.1 + netcoreapp3.1 diff --git a/test/OpenTelemetry.Tests/OpenTelemetry.Tests.csproj b/test/OpenTelemetry.Tests/OpenTelemetry.Tests.csproj index 11bcb90f2..aab05a60e 100644 --- a/test/OpenTelemetry.Tests/OpenTelemetry.Tests.csproj +++ b/test/OpenTelemetry.Tests/OpenTelemetry.Tests.csproj @@ -1,7 +1,7 @@  Unit test project for OpenTelemetry - netcoreapp2.1 + netcoreapp3.1 $(TargetFrameworks);net46 diff --git a/test/TestApp.AspNetCore.2.0/CallbackMiddleware.cs b/test/TestApp.AspNetCore.3.0/CallbackMiddleware.cs similarity index 97% rename from test/TestApp.AspNetCore.2.0/CallbackMiddleware.cs rename to test/TestApp.AspNetCore.3.0/CallbackMiddleware.cs index 97a4c248e..5d63a7247 100644 --- a/test/TestApp.AspNetCore.2.0/CallbackMiddleware.cs +++ b/test/TestApp.AspNetCore.3.0/CallbackMiddleware.cs @@ -16,7 +16,7 @@ using Microsoft.AspNetCore.Http; using System.Threading.Tasks; -namespace TestApp.AspNetCore._2._0 +namespace TestApp.AspNetCore._3._0 { public class CallbackMiddleware { diff --git a/test/TestApp.AspNetCore.2.0/Controllers/ForwardController.cs b/test/TestApp.AspNetCore.3.0/Controllers/ForwardController.cs similarity index 52% rename from test/TestApp.AspNetCore.2.0/Controllers/ForwardController.cs rename to test/TestApp.AspNetCore.3.0/Controllers/ForwardController.cs index 7a090b312..913945f4b 100644 --- a/test/TestApp.AspNetCore.2.0/Controllers/ForwardController.cs +++ b/test/TestApp.AspNetCore.3.0/Controllers/ForwardController.cs @@ -19,35 +19,21 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; -namespace TestApp.AspNetCore._2._0.Controllers +namespace TestApp.AspNetCore._3._0.Controllers { [Route("api/[controller]")] public class ForwardController : Controller { private readonly HttpClient httpClient; - public ForwardController(HttpClient httpclient) + + public ForwardController(HttpClient httpClient) { - this.httpClient = httpclient; + this.httpClient = httpClient; } - private async Task CallNextAsync(string url, Data[] arguments) - { - if (url != null) - { - var request = new HttpRequestMessage(HttpMethod.Post, url) - { - Content = new StringContent(JsonConvert.SerializeObject(arguments), Encoding.UTF8, "application/json"), - }; - var response = await httpClient.SendAsync(request); - return await response.Content.ReadAsStringAsync(); - } - - return "all done"; - } - - // POST api/values + // POST api/test [HttpPost] - public async Task Post([FromBody]Data[] data) + public async Task Post([FromBody] Data[] data) { var result = string.Empty; @@ -55,13 +41,12 @@ namespace TestApp.AspNetCore._2._0.Controllers { foreach (var argument in data) { - if (argument.sleep != null) + var request = new HttpRequestMessage(HttpMethod.Post, argument.Url) { - result = "slept for " + argument.sleep.Value + " ms"; - await Task.Delay(argument.sleep.Value); - } - - result += await CallNextAsync(argument.url, argument.arguments); + Content = new StringContent(JsonConvert.SerializeObject(argument.Arguments), + Encoding.UTF8, "application/json"), + }; + await this.httpClient.SendAsync(request); } } else @@ -75,8 +60,11 @@ namespace TestApp.AspNetCore._2._0.Controllers public class Data { - public int? sleep { get; set; } - public string url { get; set; } - public Data[] arguments { get; set; } + [JsonProperty("url")] + public string Url { get; set; } + + [JsonProperty("arguments")] + public Data[] Arguments { get; set; } } -} \ No newline at end of file +} + diff --git a/test/TestApp.AspNetCore.2.0/Controllers/ValuesController.cs b/test/TestApp.AspNetCore.3.0/Controllers/ValuesController.cs similarity index 96% rename from test/TestApp.AspNetCore.2.0/Controllers/ValuesController.cs rename to test/TestApp.AspNetCore.3.0/Controllers/ValuesController.cs index 0200c3d7b..fd233ea24 100644 --- a/test/TestApp.AspNetCore.2.0/Controllers/ValuesController.cs +++ b/test/TestApp.AspNetCore.3.0/Controllers/ValuesController.cs @@ -16,7 +16,7 @@ using System.Collections.Generic; using Microsoft.AspNetCore.Mvc; -namespace TestApp.AspNetCore._2._0.Controllers +namespace TestApp.AspNetCore._3._0.Controllers { [Route("api/[controller]")] public class ValuesController : Controller diff --git a/test/TestApp.AspNetCore.2.0/Program.cs b/test/TestApp.AspNetCore.3.0/Program.cs similarity index 96% rename from test/TestApp.AspNetCore.2.0/Program.cs rename to test/TestApp.AspNetCore.3.0/Program.cs index d4f76f9a3..2c471d0a3 100644 --- a/test/TestApp.AspNetCore.2.0/Program.cs +++ b/test/TestApp.AspNetCore.3.0/Program.cs @@ -17,7 +17,7 @@ using Microsoft.AspNetCore; using Microsoft.AspNetCore.Hosting; -namespace TestApp.AspNetCore._2._0 +namespace TestApp.AspNetCore._3._0 { public class Program { diff --git a/test/TestApp.AspNetCore.3.0/README.md b/test/TestApp.AspNetCore.3.0/README.md new file mode 100644 index 000000000..c4c7b9feb --- /dev/null +++ b/test/TestApp.AspNetCore.3.0/README.md @@ -0,0 +1,8 @@ +This test app is used for ASP.NET Core integration testing by unit tests. You could also manually run W3C test suite. + +# Run W3C test suite +The detailed instruction for the test tool available [here](https://github.com/w3c/trace-context/tree/master/test). + +* Follow it to install prerequisites and get the test code +* Start this test app with Visual Studio (or `dotnet run`) +* Run test per instruction using `http://localhost:63741/api/forward` endpoint diff --git a/test/TestApp.AspNetCore.2.0/Startup.cs b/test/TestApp.AspNetCore.3.0/Startup.cs similarity index 76% rename from test/TestApp.AspNetCore.2.0/Startup.cs rename to test/TestApp.AspNetCore.3.0/Startup.cs index b006d2cee..6299b13ef 100644 --- a/test/TestApp.AspNetCore.2.0/Startup.cs +++ b/test/TestApp.AspNetCore.3.0/Startup.cs @@ -19,9 +19,11 @@ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; +using Microsoft.Extensions.Hosting; using OpenTelemetry.Trace.Configuration; -namespace TestApp.AspNetCore._2._0 +namespace TestApp.AspNetCore._3._0 { public class Startup { @@ -39,10 +41,14 @@ namespace TestApp.AspNetCore._2._0 services.AddSingleton(); services.AddSingleton( new CallbackMiddleware.CallbackMiddlewareImpl()); + + services.TryAddSingleton(_ => TracerFactory.Create(b => b + .AddRequestCollector() + .AddDependencyCollector())); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. - public void Configure(IApplicationBuilder app, IHostingEnvironment env, TracerFactory factory) + public void Configure(IApplicationBuilder app, IWebHostEnvironment env, TracerFactory factory) { if (env.IsDevelopment()) { @@ -50,7 +56,14 @@ namespace TestApp.AspNetCore._2._0 } app.UseMiddleware(); - app.UseMvc(); + app.UseRouting(); + + app.UseAuthorization(); + + app.UseEndpoints(endpoints => + { + endpoints.MapControllers(); + }); } } } diff --git a/test/TestApp.AspNetCore.2.0/TestApp.AspNetCore.2.0.csproj b/test/TestApp.AspNetCore.3.0/TestApp.AspNetCore.3.0.csproj similarity index 66% rename from test/TestApp.AspNetCore.2.0/TestApp.AspNetCore.2.0.csproj rename to test/TestApp.AspNetCore.3.0/TestApp.AspNetCore.3.0.csproj index e26f3082c..bb4ddd48f 100644 --- a/test/TestApp.AspNetCore.2.0/TestApp.AspNetCore.2.0.csproj +++ b/test/TestApp.AspNetCore.3.0/TestApp.AspNetCore.3.0.csproj @@ -1,6 +1,6 @@  - netcoreapp2.1 + netcoreapp3.0 @@ -11,14 +11,7 @@ - - all - true - - - - - + @@ -26,6 +19,7 @@ + diff --git a/test/TestApp.AspNetCore.2.0/appsettings.Development.json b/test/TestApp.AspNetCore.3.0/appsettings.Development.json similarity index 100% rename from test/TestApp.AspNetCore.2.0/appsettings.Development.json rename to test/TestApp.AspNetCore.3.0/appsettings.Development.json diff --git a/test/TestApp.AspNetCore.2.0/appsettings.json b/test/TestApp.AspNetCore.3.0/appsettings.json similarity index 100% rename from test/TestApp.AspNetCore.2.0/appsettings.json rename to test/TestApp.AspNetCore.3.0/appsettings.json