From 51b3e82701aa0c098df03c641a49c5740e2dea84 Mon Sep 17 00:00:00 2001 From: Ryan Brandenburg Date: Wed, 25 Jan 2017 17:01:14 -0800 Subject: [PATCH] OnStarting throws when Response.HasStarted --- .../ResponseFeature.cs | 5 +++++ .../ResponseFeatureTests.cs | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/src/Microsoft.AspNetCore.TestHost/ResponseFeature.cs b/src/Microsoft.AspNetCore.TestHost/ResponseFeature.cs index 73a17f6d33..f736481810 100644 --- a/src/Microsoft.AspNetCore.TestHost/ResponseFeature.cs +++ b/src/Microsoft.AspNetCore.TestHost/ResponseFeature.cs @@ -36,6 +36,11 @@ namespace Microsoft.AspNetCore.TestHost public void OnStarting(Func callback, object state) { + if (HasStarted) + { + throw new InvalidOperationException(); + } + var prior = _responseStartingAsync; _responseStartingAsync = async () => { diff --git a/test/Microsoft.AspNetCore.TestHost.Tests/ResponseFeatureTests.cs b/test/Microsoft.AspNetCore.TestHost.Tests/ResponseFeatureTests.cs index 9ab936bb81..f50d68a815 100644 --- a/test/Microsoft.AspNetCore.TestHost.Tests/ResponseFeatureTests.cs +++ b/test/Microsoft.AspNetCore.TestHost.Tests/ResponseFeatureTests.cs @@ -1,6 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System; using System.Threading.Tasks; using Xunit; @@ -22,5 +23,22 @@ namespace Microsoft.AspNetCore.TestHost Assert.True(responseInformation.HasStarted); } + + [Fact] + public void OnStarting_ThrowsWhenHasStarted() + { + // Arrange + var responseInformation = new ResponseFeature(); + responseInformation.HasStarted = true; + + // Act & Assert + Assert.Throws(() => + { + responseInformation.OnStarting((status) => + { + return Task.FromResult(string.Empty); + }, state: "string"); + }); + } } } \ No newline at end of file