From 525fbf495b6826a386e7ff29561f86213e0ecfbc Mon Sep 17 00:00:00 2001 From: Ryan Nowak Date: Thu, 30 Aug 2018 15:29:54 -0700 Subject: [PATCH] Fix #468 - all UseHealthChecks without a path --- ...HealthCheckApplicationBuilderExtensions.cs | 34 +---------- .../HealthCheckMiddlewareTests.cs | 56 +++++++++++++++++++ 2 files changed, 58 insertions(+), 32 deletions(-) diff --git a/src/Microsoft.AspNetCore.Diagnostics.HealthChecks/Builder/HealthCheckApplicationBuilderExtensions.cs b/src/Microsoft.AspNetCore.Diagnostics.HealthChecks/Builder/HealthCheckApplicationBuilderExtensions.cs index 6c41fd5b79..6463889f43 100644 --- a/src/Microsoft.AspNetCore.Diagnostics.HealthChecks/Builder/HealthCheckApplicationBuilderExtensions.cs +++ b/src/Microsoft.AspNetCore.Diagnostics.HealthChecks/Builder/HealthCheckApplicationBuilderExtensions.cs @@ -35,11 +35,6 @@ namespace Microsoft.AspNetCore.Builder throw new ArgumentNullException(nameof(app)); } - if (!path.HasValue) - { - throw new ArgumentException("A URL path must be provided", nameof(path)); - } - UseHealthChecksCore(app, path, port: null, Array.Empty()); return app; } @@ -64,11 +59,6 @@ namespace Microsoft.AspNetCore.Builder throw new ArgumentNullException(nameof(app)); } - if (!path.HasValue) - { - throw new ArgumentException("A URL path must be provided", nameof(path)); - } - if (options == null) { throw new ArgumentNullException(nameof(options)); @@ -101,11 +91,6 @@ namespace Microsoft.AspNetCore.Builder throw new ArgumentNullException(nameof(app)); } - if (!path.HasValue) - { - throw new ArgumentException("A URL path must be provided", nameof(path)); - } - UseHealthChecksCore(app, path, port, Array.Empty()); return app; } @@ -133,11 +118,6 @@ namespace Microsoft.AspNetCore.Builder throw new ArgumentNullException(nameof(app)); } - if (!path.HasValue) - { - throw new ArgumentException("A URL path must be provided", nameof(path)); - } - if (port == null) { throw new ArgumentNullException(nameof(port)); @@ -173,11 +153,6 @@ namespace Microsoft.AspNetCore.Builder throw new ArgumentNullException(nameof(app)); } - if (!path.HasValue) - { - throw new ArgumentException("A URL path must be provided", nameof(path)); - } - if (options == null) { throw new ArgumentNullException(nameof(options)); @@ -208,11 +183,6 @@ namespace Microsoft.AspNetCore.Builder throw new ArgumentNullException(nameof(app)); } - if (!path.HasValue) - { - throw new ArgumentException("A URL path must be provided", nameof(path)); - } - if (path == null) { throw new ArgumentNullException(nameof(port)); @@ -241,8 +211,8 @@ namespace Microsoft.AspNetCore.Builder else { app.MapWhen( - c => c.Connection.LocalPort == port && c.Request.Path.StartsWithSegments(path), - b => b.UseMiddleware(args)); + c => c.Connection.LocalPort == port, + b0 => b0.Map(path, b1 => b1.UseMiddleware(args))); } } } diff --git a/test/Microsoft.AspNetCore.Diagnostics.HealthChecks.Tests/HealthCheckMiddlewareTests.cs b/test/Microsoft.AspNetCore.Diagnostics.HealthChecks.Tests/HealthCheckMiddlewareTests.cs index 1af49d8422..16fe68ac2a 100644 --- a/test/Microsoft.AspNetCore.Diagnostics.HealthChecks.Tests/HealthCheckMiddlewareTests.cs +++ b/test/Microsoft.AspNetCore.Diagnostics.HealthChecks.Tests/HealthCheckMiddlewareTests.cs @@ -323,6 +323,29 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks Assert.Equal("Healthy", await response.Content.ReadAsStringAsync()); } + [Fact] + public async Task CanListenWithoutPath_AcceptsRequest() + { + var builder = new WebHostBuilder() + .Configure(app => + { + app.UseHealthChecks(default); + }) + .ConfigureServices(services => + { + services.AddHealthChecks(); + }); + + var server = new TestServer(builder); + var client = server.CreateClient(); + + var response = await client.GetAsync("http://localhost:5001/health"); + + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + Assert.Equal("text/plain", response.Content.Headers.ContentType.ToString()); + Assert.Equal("Healthy", await response.Content.ReadAsStringAsync()); + } + [Fact] public async Task CanListenOnPort_AcceptsRequest_OnSpecifiedPort() { @@ -354,6 +377,37 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks Assert.Equal("Healthy", await response.Content.ReadAsStringAsync()); } + [Fact] + public async Task CanListenOnPortWithoutPath_AcceptsRequest_OnSpecifiedPort() + { + var builder = new WebHostBuilder() + .Configure(app => + { + app.Use(next => async (context) => + { + // Need to fake setting the connection info. TestServer doesn't + // do that, because it doesn't have a connection. + context.Connection.LocalPort = context.Request.Host.Port.Value; + await next(context); + }); + + app.UseHealthChecks(default, port: 5001); + }) + .ConfigureServices(services => + { + services.AddHealthChecks(); + }); + + var server = new TestServer(builder); + var client = server.CreateClient(); + + var response = await client.GetAsync("http://localhost:5001/health"); + + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + Assert.Equal("text/plain", response.Content.Headers.ContentType.ToString()); + Assert.Equal("Healthy", await response.Content.ReadAsStringAsync()); + } + [Fact] public async Task CanListenOnPort_RejectsRequest_OnOtherPort() { @@ -382,5 +436,7 @@ namespace Microsoft.AspNetCore.Diagnostics.HealthChecks Assert.Equal(HttpStatusCode.NotFound, response.StatusCode); } + + } }