Skip to content

Commit 956e891

Browse files
bart-vmwareTimHess
andauthored
Fix actuators when used with UsePathBase (#1618)
* Dispose CapturingLoggerProvider in tests * Remove redundant typeof(...).FullName in string interpolations * Log warning on configureMiddleware false with custom middleware * Add support for UsePathBase in actuators * Apply suggestions from code review Co-authored-by: Tim Hess <[email protected]> --------- Co-authored-by: Tim Hess <[email protected]>
1 parent ac04a11 commit 956e891

22 files changed

+232
-65
lines changed

src/Common/test/Hosting.Test/HostBuilderWrapperTest.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public async Task WebApplicationBuilder_Wraps()
2222
["foo"] = "bar"
2323
};
2424

25-
var capturingLoggerProvider = new CapturingLoggerProvider(category => category.StartsWith("Test", StringComparison.Ordinal));
25+
using var capturingLoggerProvider = new CapturingLoggerProvider(category => category.StartsWith("Test", StringComparison.Ordinal));
2626

2727
WebApplicationBuilder builder = TestWebApplicationBuilderFactory.Create();
2828

@@ -57,7 +57,7 @@ public void HostApplicationBuilder_Wraps()
5757
["foo"] = "bar"
5858
};
5959

60-
var capturingLoggerProvider = new CapturingLoggerProvider(category => category.StartsWith("Test", StringComparison.Ordinal));
60+
using var capturingLoggerProvider = new CapturingLoggerProvider(category => category.StartsWith("Test", StringComparison.Ordinal));
6161

6262
HostApplicationBuilder builder = TestHostApplicationBuilderFactory.Create();
6363

@@ -91,7 +91,7 @@ public void WebHostBuilder_Wraps()
9191
["foo"] = "bar"
9292
};
9393

94-
var capturingLoggerProvider = new CapturingLoggerProvider(category => category.StartsWith("Test", StringComparison.Ordinal));
94+
using var capturingLoggerProvider = new CapturingLoggerProvider(category => category.StartsWith("Test", StringComparison.Ordinal));
9595

9696
WebHostBuilder builder = TestWebHostBuilderFactory.Create();
9797

@@ -128,7 +128,7 @@ public void GenericHostBuilder_Wraps()
128128
["foo"] = "bar"
129129
};
130130

131-
var capturingLoggerProvider = new CapturingLoggerProvider(category => category.StartsWith("Test", StringComparison.Ordinal));
131+
using var capturingLoggerProvider = new CapturingLoggerProvider(category => category.StartsWith("Test", StringComparison.Ordinal));
132132

133133
HostBuilder builder = TestHostBuilderFactory.CreateWeb();
134134

src/Common/test/Logging.Test/BootstrapperLoggerFactoryTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public sealed class BootstrapperLoggerFactoryTest
1515
[Fact]
1616
public async Task Upgrades_existing_loggers()
1717
{
18-
var capturingLoggerProvider = new CapturingLoggerProvider(categoryName => categoryName.StartsWith("Test", StringComparison.Ordinal));
18+
using var capturingLoggerProvider = new CapturingLoggerProvider(categoryName => categoryName.StartsWith("Test", StringComparison.Ordinal));
1919

2020
var bootstrapLoggerFactory = BootstrapLoggerFactory.CreateEmpty(loggingBuilder =>
2121
{

src/Discovery/test/Eureka.Test/Transport/EurekaClientTest.cs

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ public sealed class EurekaClientTest
131131
[Fact]
132132
public async Task RegisterAsync_ThrowsOnUnreachableServer()
133133
{
134-
var capturingLoggerProvider = new CapturingLoggerProvider(category => category.StartsWith("Steeltoe.", StringComparison.Ordinal));
134+
using var capturingLoggerProvider = new CapturingLoggerProvider(category => category.StartsWith("Steeltoe.", StringComparison.Ordinal));
135135

136136
var services = new ServiceCollection();
137137
services.AddLogging(options => options.SetMinimumLevel(LogLevel.Trace).AddProvider(capturingLoggerProvider));
@@ -161,15 +161,15 @@ public async Task RegisterAsync_ThrowsOnUnreachableServer()
161161
IList<string> logMessages = capturingLoggerProvider.GetAll();
162162

163163
logMessages.Should().BeEquivalentTo(
164-
$"DBUG {typeof(EurekaClient).FullName}: Sending POST request to 'http://host-that-does-not-exist.net:9999/apps/FOOBAR' with body: " +
164+
$"DBUG {typeof(EurekaClient)}: Sending POST request to 'http://host-that-does-not-exist.net:9999/apps/FOOBAR' with body: " +
165165
"""{"instance":{"instanceId":"some","app":"FOOBAR","ipAddr":"127.0.0.1","port":{"@enabled":"true","$":8080},"securePort":{"@enabled":"false","$":9090},"dataCenterInfo":{"@class":"com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo","name":"MyOwn"},"hostName":"localhost","overriddenstatus":"UNKNOWN","metadata":{"@class":"java.util.Collections$EmptyMap"},"lastUpdatedTimestamp":"1708427732823","lastDirtyTimestamp":"1708427732823"}}.""",
166-
$"WARN {typeof(EurekaClient).FullName}: Failed to execute HTTP POST request to 'http://host-that-does-not-exist.net:9999/apps/FOOBAR' in attempt 1.");
166+
$"WARN {typeof(EurekaClient)}: Failed to execute HTTP POST request to 'http://host-that-does-not-exist.net:9999/apps/FOOBAR' in attempt 1.");
167167
}
168168

169169
[Fact]
170170
public async Task RegisterAsync_ThrowsOnErrorResponse()
171171
{
172-
var capturingLoggerProvider = new CapturingLoggerProvider(category => category.StartsWith("Steeltoe.", StringComparison.Ordinal));
172+
using var capturingLoggerProvider = new CapturingLoggerProvider(category => category.StartsWith("Steeltoe.", StringComparison.Ordinal));
173173

174174
var services = new ServiceCollection();
175175
services.AddLogging(options => options.SetMinimumLevel(LogLevel.Trace).AddProvider(capturingLoggerProvider));
@@ -208,17 +208,17 @@ public async Task RegisterAsync_ThrowsOnErrorResponse()
208208

209209
logMessages.Should().BeEquivalentTo(
210210
[
211-
$"DBUG {typeof(EurekaClient).FullName}: Sending POST request to 'http://localhost:8761/eureka/apps/FOOBAR' with body: " +
211+
$"DBUG {typeof(EurekaClient)}: Sending POST request to 'http://localhost:8761/eureka/apps/FOOBAR' with body: " +
212212
"""{"instance":{"instanceId":"some","app":"FOOBAR","ipAddr":"127.0.0.1","port":{"@enabled":"true","$":8080},"securePort":{"@enabled":"false","$":9090},"dataCenterInfo":{"@class":"com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo","name":"MyOwn"},"hostName":"localhost","overriddenstatus":"UNKNOWN","metadata":{"@class":"java.util.Collections$EmptyMap"},"lastUpdatedTimestamp":"1708427732823","lastDirtyTimestamp":"1708427732823"}}.""",
213-
$"DBUG {typeof(EurekaClient).FullName}: HTTP POST request to 'http://localhost:8761/eureka/apps/FOOBAR' returned status 404 in attempt 1.",
214-
$"INFO {typeof(EurekaClient).FullName}: HTTP POST request to 'http://localhost:8761/eureka/apps/FOOBAR' failed with status 404: Sorry!"
213+
$"DBUG {typeof(EurekaClient)}: HTTP POST request to 'http://localhost:8761/eureka/apps/FOOBAR' returned status 404 in attempt 1.",
214+
$"INFO {typeof(EurekaClient)}: HTTP POST request to 'http://localhost:8761/eureka/apps/FOOBAR' failed with status 404: Sorry!"
215215
], options => options.WithStrictOrdering());
216216
}
217217

218218
[Fact]
219219
public async Task RegisterAsync_ThrowsOnRetryLimitReached()
220220
{
221-
var capturingLoggerProvider = new CapturingLoggerProvider(category => category.StartsWith("Steeltoe.", StringComparison.Ordinal));
221+
using var capturingLoggerProvider = new CapturingLoggerProvider(category => category.StartsWith("Steeltoe.", StringComparison.Ordinal));
222222

223223
var services = new ServiceCollection();
224224
services.AddLogging(options => options.SetMinimumLevel(LogLevel.Trace).AddProvider(capturingLoggerProvider));
@@ -254,10 +254,10 @@ public async Task RegisterAsync_ThrowsOnRetryLimitReached()
254254

255255
logMessages.Should().BeEquivalentTo(
256256
[
257-
$"DBUG {typeof(EurekaClient).FullName}: Sending POST request to 'http://localhost:8761/eureka/apps/FOOBAR' with body: " +
257+
$"DBUG {typeof(EurekaClient)}: Sending POST request to 'http://localhost:8761/eureka/apps/FOOBAR' with body: " +
258258
"""{"instance":{"instanceId":"some","app":"FOOBAR","ipAddr":"127.0.0.1","port":{"@enabled":"true","$":8080},"securePort":{"@enabled":"false","$":9090},"dataCenterInfo":{"@class":"com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo","name":"MyOwn"},"hostName":"localhost","overriddenstatus":"UNKNOWN","metadata":{"@class":"java.util.Collections$EmptyMap"},"lastUpdatedTimestamp":"1708427732823","lastDirtyTimestamp":"1708427732823"}}.""",
259-
$"DBUG {typeof(EurekaClient).FullName}: HTTP POST request to 'http://localhost:8761/eureka/apps/FOOBAR' returned status 404 in attempt 1.",
260-
$"INFO {typeof(EurekaClient).FullName}: HTTP POST request to 'http://localhost:8761/eureka/apps/FOOBAR' failed with status 404: "
259+
$"DBUG {typeof(EurekaClient)}: HTTP POST request to 'http://localhost:8761/eureka/apps/FOOBAR' returned status 404 in attempt 1.",
260+
$"INFO {typeof(EurekaClient)}: HTTP POST request to 'http://localhost:8761/eureka/apps/FOOBAR' failed with status 404: "
261261
], options => options.WithStrictOrdering());
262262
}
263263

@@ -266,7 +266,7 @@ public async Task RegisterAsync_LogsWarningOnCloudWithLocalhost()
266266
{
267267
using var scope = new EnvironmentVariableScope("VCAP_APPLICATION", "{}");
268268

269-
var capturingLoggerProvider = new CapturingLoggerProvider(category => category.StartsWith("Steeltoe.", StringComparison.Ordinal));
269+
using var capturingLoggerProvider = new CapturingLoggerProvider(category => category.StartsWith("Steeltoe.", StringComparison.Ordinal));
270270

271271
var services = new ServiceCollection();
272272
services.AddLogging(options => options.SetMinimumLevel(LogLevel.Trace).AddProvider(capturingLoggerProvider));
@@ -293,13 +293,13 @@ public async Task RegisterAsync_LogsWarningOnCloudWithLocalhost()
293293
IList<string> logMessages = capturingLoggerProvider.GetAll();
294294

295295
logMessages.Should().Contain(
296-
$"WARN {typeof(EurekaClient).FullName}: Registering with hostname 'localhost' in containerized or cloud environments may not be valid. Please configure Eureka:Instance:HostName with a non-localhost address.");
296+
$"WARN {typeof(EurekaClient)}: Registering with hostname 'localhost' in containerized or cloud environments may not be valid. Please configure Eureka:Instance:HostName with a non-localhost address.");
297297
}
298298

299299
[Fact]
300300
public async Task RegisterAsync_SendsRequestToServer()
301301
{
302-
var capturingLoggerProvider = new CapturingLoggerProvider(category => category.StartsWith("Steeltoe.", StringComparison.Ordinal));
302+
using var capturingLoggerProvider = new CapturingLoggerProvider(category => category.StartsWith("Steeltoe.", StringComparison.Ordinal));
303303

304304
using JsonDocument requestDocument = JsonDocument.Parse("""
305305
{
@@ -364,16 +364,16 @@ public async Task RegisterAsync_SendsRequestToServer()
364364

365365
logMessages.Should().BeEquivalentTo(
366366
[
367-
$"DBUG {typeof(EurekaClient).FullName}: Sending POST request to 'http://localhost:8761/eureka/apps/FOOBAR' with body: " +
367+
$"DBUG {typeof(EurekaClient)}: Sending POST request to 'http://localhost:8761/eureka/apps/FOOBAR' with body: " +
368368
"""{"instance":{"instanceId":"some","app":"FOOBAR","ipAddr":"127.0.0.1","port":{"@enabled":"true","$":8080},"securePort":{"@enabled":"false","$":9090},"dataCenterInfo":{"@class":"com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo","name":"MyOwn"},"hostName":"localhost","overriddenstatus":"UNKNOWN","metadata":{"@class":"java.util.Collections$EmptyMap"},"lastUpdatedTimestamp":"1708427732823","lastDirtyTimestamp":"1708427732823"}}.""",
369-
$"DBUG {typeof(EurekaClient).FullName}: HTTP POST request to 'http://localhost:8761/eureka/apps/FOOBAR' returned status 204 in attempt 1."
369+
$"DBUG {typeof(EurekaClient)}: HTTP POST request to 'http://localhost:8761/eureka/apps/FOOBAR' returned status 204 in attempt 1."
370370
], options => options.WithStrictOrdering());
371371
}
372372

373373
[Fact]
374374
public async Task RegisterAsync_TriesSecondServerIfFirstOneFails()
375375
{
376-
var capturingLoggerProvider = new CapturingLoggerProvider(category => category.StartsWith("Steeltoe.", StringComparison.Ordinal));
376+
using var capturingLoggerProvider = new CapturingLoggerProvider(category => category.StartsWith("Steeltoe.", StringComparison.Ordinal));
377377

378378
var services = new ServiceCollection();
379379
services.AddLogging(options => options.SetMinimumLevel(LogLevel.Trace).AddProvider(capturingLoggerProvider));
@@ -408,13 +408,13 @@ public async Task RegisterAsync_TriesSecondServerIfFirstOneFails()
408408

409409
logMessages.Should().BeEquivalentTo(
410410
[
411-
$"DBUG {typeof(EurekaClient).FullName}: Sending POST request to 'http://server1:8761/apps/FOOBAR' with body: " +
411+
$"DBUG {typeof(EurekaClient)}: Sending POST request to 'http://server1:8761/apps/FOOBAR' with body: " +
412412
"""{"instance":{"instanceId":"some","app":"FOOBAR","ipAddr":"127.0.0.1","port":{"@enabled":"true","$":8080},"securePort":{"@enabled":"false","$":9090},"dataCenterInfo":{"@class":"com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo","name":"MyOwn"},"hostName":"localhost","overriddenstatus":"UNKNOWN","metadata":{"@class":"java.util.Collections$EmptyMap"},"lastUpdatedTimestamp":"1708427732823","lastDirtyTimestamp":"1708427732823"}}.""",
413-
$"DBUG {typeof(EurekaClient).FullName}: HTTP POST request to 'http://server1:8761/apps/FOOBAR' returned status 404 in attempt 1.",
414-
$"INFO {typeof(EurekaClient).FullName}: HTTP POST request to 'http://server1:8761/apps/FOOBAR' failed with status 404: ",
415-
$"DBUG {typeof(EurekaClient).FullName}: Sending POST request to 'http://server2:8761/apps/FOOBAR' with body: " +
413+
$"DBUG {typeof(EurekaClient)}: HTTP POST request to 'http://server1:8761/apps/FOOBAR' returned status 404 in attempt 1.",
414+
$"INFO {typeof(EurekaClient)}: HTTP POST request to 'http://server1:8761/apps/FOOBAR' failed with status 404: ",
415+
$"DBUG {typeof(EurekaClient)}: Sending POST request to 'http://server2:8761/apps/FOOBAR' with body: " +
416416
"""{"instance":{"instanceId":"some","app":"FOOBAR","ipAddr":"127.0.0.1","port":{"@enabled":"true","$":8080},"securePort":{"@enabled":"false","$":9090},"dataCenterInfo":{"@class":"com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo","name":"MyOwn"},"hostName":"localhost","overriddenstatus":"UNKNOWN","metadata":{"@class":"java.util.Collections$EmptyMap"},"lastUpdatedTimestamp":"1708427732823","lastDirtyTimestamp":"1708427732823"}}.""",
417-
$"DBUG {typeof(EurekaClient).FullName}: HTTP POST request to 'http://server2:8761/apps/FOOBAR' returned status 204 in attempt 2."
417+
$"DBUG {typeof(EurekaClient)}: HTTP POST request to 'http://server2:8761/apps/FOOBAR' returned status 204 in attempt 2."
418418
], options => options.WithStrictOrdering());
419419
}
420420

@@ -606,7 +606,7 @@ public async Task GetApplicationsAsync_ThrowsOnBrokenJsonResponse()
606606
{
607607
const string jsonResponse = """{"applications": {""";
608608

609-
var capturingLoggerProvider = new CapturingLoggerProvider(category => category.StartsWith("Steeltoe.", StringComparison.Ordinal));
609+
using var capturingLoggerProvider = new CapturingLoggerProvider(category => category.StartsWith("Steeltoe.", StringComparison.Ordinal));
610610

611611
var services = new ServiceCollection();
612612
services.AddLogging(options => options.SetMinimumLevel(LogLevel.Trace).AddProvider(capturingLoggerProvider));
@@ -630,11 +630,10 @@ public async Task GetApplicationsAsync_ThrowsOnBrokenJsonResponse()
630630

631631
IList<string> logMessages = capturingLoggerProvider.GetAll();
632632

633-
logMessages.Should().BeEquivalentTo(
634-
[
635-
$"DBUG {typeof(EurekaClient).FullName}: Sending GET request to 'http://localhost:8761/eureka/apps' without request body.",
636-
$"DBUG {typeof(EurekaClient).FullName}: HTTP GET request to 'http://localhost:8761/eureka/apps' returned status 200 in attempt 1.",
637-
$"DBUG {typeof(EurekaClient).FullName}: Failed to deserialize HTTP response from GET 'http://localhost:8761/eureka/apps'."
633+
logMessages.Should().BeEquivalentTo([
634+
$"DBUG {typeof(EurekaClient)}: Sending GET request to 'http://localhost:8761/eureka/apps' without request body.",
635+
$"DBUG {typeof(EurekaClient)}: HTTP GET request to 'http://localhost:8761/eureka/apps' returned status 200 in attempt 1.",
636+
$"DBUG {typeof(EurekaClient)}: Failed to deserialize HTTP response from GET 'http://localhost:8761/eureka/apps'."
638637
], options => options.WithStrictOrdering());
639638
}
640639

@@ -713,7 +712,8 @@ public async Task GetByVipAsync_SendsRequestToServer()
713712
[Fact]
714713
public async Task Redacts_HTTP_headers()
715714
{
716-
var capturingLoggerProvider = new CapturingLoggerProvider(category => category.StartsWith("System.Net.Http.HttpClient", StringComparison.Ordinal));
715+
using var capturingLoggerProvider =
716+
new CapturingLoggerProvider(category => category.StartsWith("System.Net.Http.HttpClient", StringComparison.Ordinal));
717717

718718
var services = new ServiceCollection();
719719
services.AddLogging(options => options.SetMinimumLevel(LogLevel.Trace).AddProvider(capturingLoggerProvider));

src/Discovery/test/HttpClients.Test/RegisterMultipleDiscoveryClientsTest.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -424,7 +424,7 @@ public void MultipleEurekaVCAPs_LogsWarning()
424424
using var appScope = new EnvironmentVariableScope("VCAP_APPLICATION", env1);
425425
using var servicesScope = new EnvironmentVariableScope("VCAP_SERVICES", env2);
426426

427-
var capturingLoggerProvider = new CapturingLoggerProvider(category => category.StartsWith("Steeltoe.", StringComparison.Ordinal));
427+
using var capturingLoggerProvider = new CapturingLoggerProvider(category => category.StartsWith("Steeltoe.", StringComparison.Ordinal));
428428
using var loggerFactory = new LoggerFactory([capturingLoggerProvider]);
429429

430430
var configurationBuilder = new ConfigurationBuilder();
@@ -434,7 +434,7 @@ public void MultipleEurekaVCAPs_LogsWarning()
434434
IList<string> logMessages = capturingLoggerProvider.GetAll();
435435

436436
logMessages.Should().BeEquivalentTo(
437-
$"WARN {typeof(EurekaCloudFoundryPostProcessor).FullName}: Multiple Eureka service bindings found, which is not supported. Using the first binding from VCAP_SERVICES.");
437+
$"WARN {typeof(EurekaCloudFoundryPostProcessor)}: Multiple Eureka service bindings found, which is not supported. Using the first binding from VCAP_SERVICES.");
438438
}
439439

440440
[Fact]

src/Logging/test/DynamicSerilog.Test/HostBuilderTest.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,12 +92,12 @@ public async Task CanPreserveDefaultConsoleLoggerProvider()
9292
logOutput.Should().Contain("SERILOG [ERR] TestError");
9393

9494
logOutput.Should().Contain($"""
95-
info: {typeof(HostBuilderTest).FullName}[0]
95+
info: {typeof(HostBuilderTest)}[0]
9696
TestInfo
9797
""");
9898

9999
logOutput.Should().Contain($"""
100-
fail: {typeof(HostBuilderTest).FullName}[0]
100+
fail: {typeof(HostBuilderTest)}[0]
101101
TestError
102102
""");
103103
}
@@ -376,7 +376,7 @@ public async Task DynamicLevelChangeDoesNotAffectUsageOfNativeSerilogApi()
376376
Log.Logger = new LoggerConfiguration().WriteTo.Console().CreateLogger();
377377
Log.Logger.Information("TestInfoBefore");
378378

379-
var loggerProvider = host.Services.GetRequiredService<IDynamicLoggerProvider>();
379+
using var loggerProvider = host.Services.GetRequiredService<IDynamicLoggerProvider>();
380380
loggerProvider.SetLogLevel(string.Empty, LogLevel.Critical);
381381

382382
Log.Logger.Information("TestInfoAfter");

0 commit comments

Comments
 (0)