From c747ce630d03388714137b918c490e16198a9323 Mon Sep 17 00:00:00 2001 From: John Luo Date: Wed, 13 Jan 2016 10:59:29 -0800 Subject: [PATCH] TestServer should not capture startup errors by default --- .../IWebApplicationBuilder.cs | 3 ++ .../WebApplicationBuilder.cs | 11 ++++++-- src/Microsoft.AspNet.TestHost/TestServer.cs | 5 ++++ .../TestServerTests.cs | 28 +++++++++++++++++++ 4 files changed, 45 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.AspNet.Hosting.Abstractions/IWebApplicationBuilder.cs b/src/Microsoft.AspNet.Hosting.Abstractions/IWebApplicationBuilder.cs index e92288a572..d4953e3af4 100644 --- a/src/Microsoft.AspNet.Hosting.Abstractions/IWebApplicationBuilder.cs +++ b/src/Microsoft.AspNet.Hosting.Abstractions/IWebApplicationBuilder.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Collections.Generic; using Microsoft.AspNet.Builder; using Microsoft.AspNet.Hosting.Server; using Microsoft.Extensions.Configuration; @@ -13,6 +14,8 @@ namespace Microsoft.AspNet.Hosting { IWebApplication Build(); + IDictionary Settings { get; } + IWebApplicationBuilder UseConfiguration(IConfiguration configuration); IWebApplicationBuilder UseServer(IServerFactory factory); diff --git a/src/Microsoft.AspNet.Hosting/WebApplicationBuilder.cs b/src/Microsoft.AspNet.Hosting/WebApplicationBuilder.cs index 236b5c8392..4ec45e9c61 100644 --- a/src/Microsoft.AspNet.Hosting/WebApplicationBuilder.cs +++ b/src/Microsoft.AspNet.Hosting/WebApplicationBuilder.cs @@ -17,7 +17,6 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Logging; using Microsoft.Extensions.PlatformAbstractions; -using Microsoft.Extensions.Primitives; namespace Microsoft.AspNet.Hosting { @@ -38,7 +37,7 @@ namespace Microsoft.AspNet.Hosting // Only one of these should be set private IServerFactory _serverFactory; - private Dictionary _settings = new Dictionary(StringComparer.OrdinalIgnoreCase); + private IDictionary _settings = new Dictionary(StringComparer.OrdinalIgnoreCase); public WebApplicationBuilder() { @@ -46,6 +45,14 @@ namespace Microsoft.AspNet.Hosting _loggerFactory = new LoggerFactory(); } + public IDictionary Settings + { + get + { + return _settings; + } + } + public IWebApplicationBuilder UseSetting(string key, string value) { _settings[key] = value; diff --git a/src/Microsoft.AspNet.TestHost/TestServer.cs b/src/Microsoft.AspNet.TestHost/TestServer.cs index 6d6d4ef4c9..57a1cefd7c 100644 --- a/src/Microsoft.AspNet.TestHost/TestServer.cs +++ b/src/Microsoft.AspNet.TestHost/TestServer.cs @@ -22,6 +22,11 @@ namespace Microsoft.AspNet.TestHost public TestServer(IWebApplicationBuilder builder) { + if (!builder.Settings.ContainsKey(WebApplicationDefaults.CaptureStartupErrorsKey)) + { + builder.UseCaptureStartupErrors(false); + } + var application = builder.UseServer(this).Build(); application.Start(); _appInstance = application; diff --git a/test/Microsoft.AspNet.TestHost.Tests/TestServerTests.cs b/test/Microsoft.AspNet.TestHost.Tests/TestServerTests.cs index 8d55816777..2919f940ba 100644 --- a/test/Microsoft.AspNet.TestHost.Tests/TestServerTests.cs +++ b/test/Microsoft.AspNet.TestHost.Tests/TestServerTests.cs @@ -30,6 +30,34 @@ namespace Microsoft.AspNet.TestHost new TestServer(new WebApplicationBuilder().Configure(app => { })); } + + [Fact] + public void DoesNotCaptureStartupErrorsByDefault() + { + var builder = new WebApplicationBuilder() + .Configure(app => + { + throw new InvalidOperationException(); + }); + + Assert.Throws(() => new TestServer(builder)); + } + + + [Fact] + public void CaptureStartupErrorsSettingPreserved() + { + var builder = new WebApplicationBuilder() + .UseCaptureStartupErrors(true) + .Configure(app => + { + throw new InvalidOperationException(); + }); + + // Does not throw + new TestServer(builder); + } + [Fact] public void ApplicationServicesAvailableFromTestServer() {