[Fixes 4509] Stop registering disposable objects in our controller helper methods

This commit is contained in:
jacalvar 2016-04-20 16:58:59 -07:00
parent d87d8283d0
commit d9aacd0f87
4 changed files with 0 additions and 258 deletions

View File

@ -347,12 +347,6 @@ namespace Microsoft.AspNetCore.Mvc
[NonAction]
public virtual OkObjectResult Ok(object value)
{
var disposableValue = value as IDisposable;
if (disposableValue != null)
{
Response.RegisterForDispose(disposableValue);
}
return new OkObjectResult(value);
}
@ -674,11 +668,6 @@ namespace Microsoft.AspNetCore.Mvc
[NonAction]
public virtual FileStreamResult File(Stream fileStream, string contentType, string fileDownloadName)
{
if (fileStream != null)
{
Response.RegisterForDispose(fileStream);
}
return new FileStreamResult(fileStream, contentType) { FileDownloadName = fileDownloadName };
}
@ -768,12 +757,6 @@ namespace Microsoft.AspNetCore.Mvc
[NonAction]
public virtual NotFoundObjectResult NotFound(object value)
{
var disposableValue = value as IDisposable;
if (disposableValue != null)
{
Response.RegisterForDispose(disposableValue);
}
return new NotFoundObjectResult(value);
}
@ -794,12 +777,6 @@ namespace Microsoft.AspNetCore.Mvc
[NonAction]
public virtual BadRequestObjectResult BadRequest(object error)
{
var disposableValue = error as IDisposable;
if (disposableValue != null)
{
Response.RegisterForDispose(disposableValue);
}
return new BadRequestObjectResult(error);
}
@ -832,12 +809,6 @@ namespace Microsoft.AspNetCore.Mvc
throw new ArgumentNullException(nameof(uri));
}
var disposableValue = value as IDisposable;
if (disposableValue != null)
{
Response.RegisterForDispose(disposableValue);
}
return new CreatedResult(uri, value);
}
@ -855,12 +826,6 @@ namespace Microsoft.AspNetCore.Mvc
throw new ArgumentNullException(nameof(uri));
}
var disposableValue = value as IDisposable;
if (disposableValue != null)
{
Response.RegisterForDispose(disposableValue);
}
return new CreatedResult(uri, value);
}
@ -904,12 +869,6 @@ namespace Microsoft.AspNetCore.Mvc
object routeValues,
object value)
{
var disposableValue = value as IDisposable;
if (disposableValue != null)
{
Response.RegisterForDispose(disposableValue);
}
return new CreatedAtActionResult(actionName, controllerName, routeValues, value);
}
@ -947,12 +906,6 @@ namespace Microsoft.AspNetCore.Mvc
[NonAction]
public virtual CreatedAtRouteResult CreatedAtRoute(string routeName, object routeValues, object value)
{
var disposableValue = value as IDisposable;
if (disposableValue != null)
{
Response.RegisterForDispose(disposableValue);
}
return new CreatedAtRouteResult(routeName, routeValues, value);
}

View File

@ -293,12 +293,6 @@ namespace Microsoft.AspNetCore.Mvc
[NonAction]
public virtual JsonResult Json(object data)
{
var disposableValue = data as IDisposable;
if (disposableValue != null)
{
Response.RegisterForDispose(disposableValue);
}
return new JsonResult(data);
}
@ -321,12 +315,6 @@ namespace Microsoft.AspNetCore.Mvc
throw new ArgumentNullException(nameof(serializerSettings));
}
var disposableValue = data as IDisposable;
if (disposableValue != null)
{
Response.RegisterForDispose(disposableValue);
}
return new JsonResult(data, serializerSettings);
}

View File

@ -449,32 +449,6 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
Assert.Equal(uri.OriginalString, result.Location);
}
[Fact]
public void Created_IDisposableObject_RegistersForDispose()
{
// Arrange
var mockHttpContext = new Mock<HttpContext>();
mockHttpContext.Setup(x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()));
var uri = new Uri("/test/url", UriKind.Relative);
var controller = new TestableController();
controller.ControllerContext.HttpContext = mockHttpContext.Object;
var input = new DisposableObject();
// Act
var result = controller.Created(uri, input);
// Assert
Assert.IsType<CreatedResult>(result);
Assert.Equal(StatusCodes.Status201Created, result.StatusCode);
Assert.Equal(uri.OriginalString, result.Location);
Assert.Same(input, result.Value);
mockHttpContext.Verify(
x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()),
Times.Once());
}
[Fact]
public void CreatedAtAction_WithParameterActionName_SetsResultActionName()
{
@ -535,31 +509,6 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
Assert.Equal(expected, result.RouteValues);
}
[Fact]
public void CreatedAtAction_IDisposableObject_RegistersForDispose()
{
// Arrange
var mockHttpContext = new Mock<HttpContext>();
mockHttpContext.Setup(x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()));
var controller = new TestableController();
controller.ControllerContext.HttpContext = mockHttpContext.Object;
var input = new DisposableObject();
// Act
var result = controller.CreatedAtAction("SampleAction", input);
// Assert
Assert.IsType<CreatedAtActionResult>(result);
Assert.Equal(StatusCodes.Status201Created, result.StatusCode);
Assert.Equal("SampleAction", result.ActionName);
Assert.Same(input, result.Value);
mockHttpContext.Verify(
x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()),
Times.Once());
}
[Fact]
public void CreatedAtRoute_WithParameterRouteName_SetsResultSameRouteName()
{
@ -617,31 +566,6 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
Assert.Equal(expected, result.RouteValues);
}
[Fact]
public void CreatedAtRoute_IDisposableObject_RegistersForDispose()
{
// Arrange
var mockHttpContext = new Mock<HttpContext>();
mockHttpContext.Setup(x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()));
var controller = new TestableController();
controller.ControllerContext.HttpContext = mockHttpContext.Object;
var input = new DisposableObject();
// Act
var result = controller.CreatedAtRoute("SampleRoute", input);
// Assert
Assert.IsType<CreatedAtRouteResult>(result);
Assert.Equal(StatusCodes.Status201Created, result.StatusCode);
Assert.Equal("SampleRoute", result.RouteName);
Assert.Same(input, result.Value);
mockHttpContext.Verify(
x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()),
Times.Once());
}
[Fact]
public void File_WithContents()
{
@ -737,7 +661,6 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
{
// Arrange
var mockHttpContext = new Mock<HttpContext>();
mockHttpContext.Setup(x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()));
var controller = new TestableController();
controller.ControllerContext.HttpContext = mockHttpContext.Object;
@ -752,9 +675,6 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
Assert.Same(fileStream, result.FileStream);
Assert.Equal("application/pdf", result.ContentType.ToString());
Assert.Equal("someDownloadName", result.FileDownloadName);
mockHttpContext.Verify(
x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()),
Times.Once());
}
[Fact]
@ -800,30 +720,6 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
Assert.Equal("Test Content", result.Value);
}
[Fact]
public void HttpNotFound_IDisposableObject_RegistersForDispose()
{
// Arrange
var mockHttpContext = new Mock<HttpContext>();
mockHttpContext.Setup(x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()));
var controller = new TestableController();
controller.ControllerContext.HttpContext = mockHttpContext.Object;
var input = new DisposableObject();
// Act
var result = controller.NotFound(input);
// Assert
Assert.IsType<NotFoundObjectResult>(result);
Assert.Equal(StatusCodes.Status404NotFound, result.StatusCode);
Assert.Same(input, result.Value);
mockHttpContext.Verify(
x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()),
Times.Once());
}
[Fact]
public void Ok_SetsStatusCode()
{
@ -838,30 +734,6 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
Assert.Equal(StatusCodes.Status200OK, result.StatusCode);
}
[Fact]
public void Ok_WithIDisposableObject_RegistersForDispose()
{
// Arrange
var mockHttpContext = new Mock<HttpContext>();
mockHttpContext.Setup(x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()));
var controller = new TestableController();
controller.ControllerContext.HttpContext = mockHttpContext.Object;
var input = new DisposableObject();
// Act
var result = controller.Ok(input);
// Assert
Assert.IsType<OkObjectResult>(result);
Assert.Equal(StatusCodes.Status200OK, result.StatusCode);
Assert.Same(input, result.Value);
mockHttpContext.Verify(
x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()),
Times.Once());
}
[Fact]
public void BadRequest_SetsStatusCode()
{
@ -892,30 +764,6 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
Assert.Equal(obj, result.Value);
}
[Fact]
public void BadRequest_IDisposableObject_RegistersForDispose()
{
// Arrange
var mockHttpContext = new Mock<HttpContext>();
mockHttpContext.Setup(x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()));
var controller = new TestableController();
controller.ControllerContext.HttpContext = mockHttpContext.Object;
var input = new DisposableObject();
// Act
var result = controller.BadRequest(input);
// Assert
Assert.IsType<BadRequestObjectResult>(result);
Assert.Equal(StatusCodes.Status400BadRequest, result.StatusCode);
Assert.Same(input, result.Value);
mockHttpContext.Verify(
x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()),
Times.Once());
}
[Fact]
public void BadRequest_SetsStatusCodeAndValue_ModelState()
{

View File

@ -183,53 +183,6 @@ namespace Microsoft.AspNetCore.Mvc.Test
Assert.Same(data, actualJsonResult.Value);
}
[Fact]
public void Controller_Json_IDisposableObject_RegistersForDispose()
{
// Arrange
var mockHttpContext = new Mock<HttpContext>();
mockHttpContext.Setup(x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()));
var controller = new TestableController();
controller.ControllerContext.HttpContext = mockHttpContext.Object;
var input = new DisposableObject();
// Act
var result = controller.Json(input);
// Assert
Assert.IsType<JsonResult>(result);
Assert.Same(input, result.Value);
mockHttpContext.Verify(
x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()),
Times.Once());
}
[Fact]
public void Controller_JsonWithParameterValueAndSerializerSettings_IDisposableObject_RegistersForDispose()
{
// Arrange
var mockHttpContext = new Mock<HttpContext>();
mockHttpContext.Setup(x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()));
var controller = new TestableController();
controller.ControllerContext.HttpContext = mockHttpContext.Object;
var input = new DisposableObject();
var serializerSettings = new JsonSerializerSettings();
// Act
var result = controller.Json(input, serializerSettings);
// Assert
Assert.IsType<JsonResult>(result);
Assert.Same(input, result.Value);
mockHttpContext.Verify(
x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()),
Times.Once());
}
// These tests share code with the ActionFilterAttribute tests because the various filter
// implementations need to behave the same way.
[Fact]