public async Task HandledErrorsWriteToDiagnosticWhenUsingExceptionHandler() { // Arrange DiagnosticListener diagnosticListener = null; var builder = new WebHostBuilder() .Configure(app => { diagnosticListener = app.ApplicationServices.GetRequiredService <DiagnosticListener>(); app.UseExceptionHandler("/handle-errors"); app.Map("/handle-errors", (innerAppBuilder) => { innerAppBuilder.Run(async(httpContext) => { await httpContext.Response.WriteAsync("Handled error in a custom way."); }); }); app.Run(context => { throw new Exception("Test exception"); }); }); var server = new TestServer(builder); var listener = new TestDiagnosticListener(); diagnosticListener.SubscribeWithAdapter(listener); // Act await server.CreateClient().GetAsync(string.Empty); // This ensures that all diagnostics are completely written to the diagnostic listener Thread.Sleep(1000); // Assert Assert.NotNull(listener.EndRequest?.HttpContext); Assert.Null(listener.HostingUnhandledException?.HttpContext); Assert.Null(listener.HostingUnhandledException?.Exception); Assert.Null(listener.DiagnosticUnhandledException?.HttpContext); Assert.Null(listener.DiagnosticUnhandledException?.Exception); Assert.NotNull(listener.DiagnosticHandledException?.HttpContext); Assert.NotNull(listener.DiagnosticHandledException?.Exception); }
public async Task NullInfoInCompilationException_ShouldNotThrowExceptionGeneratingExceptionPage( List <CompilationFailure> failures) { // Arrange DiagnosticListener diagnosticListener = null; using var host = new HostBuilder() .ConfigureWebHost(webHostBuilder => { webHostBuilder .UseTestServer() .Configure(app => { diagnosticListener = app.ApplicationServices.GetRequiredService <DiagnosticListener>(); app.UseDeveloperExceptionPage(); app.Run(context => { throw new CustomCompilationException(failures); }); }); }).Build(); await host.StartAsync(); var server = host.GetTestServer(); var listener = new TestDiagnosticListener(); diagnosticListener.SubscribeWithAdapter(listener); // Act await server.CreateClient().GetAsync("/path"); // Assert Assert.NotNull(listener.DiagnosticUnhandledException?.HttpContext); Assert.NotNull(listener.DiagnosticUnhandledException?.Exception); Assert.Null(listener.DiagnosticHandledException?.HttpContext); Assert.Null(listener.DiagnosticHandledException?.Exception); }
public async Task UnhandledErrorsWriteToDiagnosticWhenUsingExceptionPage() { // Arrange DiagnosticListener diagnosticListener = null; using var host = new HostBuilder() .ConfigureWebHost(webHostBuilder => { webHostBuilder .UseTestServer() .Configure(app => { diagnosticListener = app.ApplicationServices.GetRequiredService <DiagnosticListener>(); app.UseDeveloperExceptionPage(); app.Run(context => { throw new Exception("Test exception"); }); }); }).Build(); await host.StartAsync(); var server = host.GetTestServer(); var listener = new TestDiagnosticListener(); diagnosticListener.SubscribeWithAdapter(listener); // Act await server.CreateClient().GetAsync("/path"); // Assert Assert.NotNull(listener.DiagnosticUnhandledException?.HttpContext); Assert.NotNull(listener.DiagnosticUnhandledException?.Exception); Assert.Null(listener.DiagnosticHandledException?.HttpContext); Assert.Null(listener.DiagnosticHandledException?.Exception); }