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

View File

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

View File

@ -449,32 +449,6 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
Assert.Equal(uri.OriginalString, result.Location); 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] [Fact]
public void CreatedAtAction_WithParameterActionName_SetsResultActionName() public void CreatedAtAction_WithParameterActionName_SetsResultActionName()
{ {
@ -535,31 +509,6 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
Assert.Equal(expected, result.RouteValues); 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] [Fact]
public void CreatedAtRoute_WithParameterRouteName_SetsResultSameRouteName() public void CreatedAtRoute_WithParameterRouteName_SetsResultSameRouteName()
{ {
@ -617,31 +566,6 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
Assert.Equal(expected, result.RouteValues); 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] [Fact]
public void File_WithContents() public void File_WithContents()
{ {
@ -737,7 +661,6 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
{ {
// Arrange // Arrange
var mockHttpContext = new Mock<HttpContext>(); var mockHttpContext = new Mock<HttpContext>();
mockHttpContext.Setup(x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()));
var controller = new TestableController(); var controller = new TestableController();
controller.ControllerContext.HttpContext = mockHttpContext.Object; controller.ControllerContext.HttpContext = mockHttpContext.Object;
@ -752,9 +675,6 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
Assert.Same(fileStream, result.FileStream); Assert.Same(fileStream, result.FileStream);
Assert.Equal("application/pdf", result.ContentType.ToString()); Assert.Equal("application/pdf", result.ContentType.ToString());
Assert.Equal("someDownloadName", result.FileDownloadName); Assert.Equal("someDownloadName", result.FileDownloadName);
mockHttpContext.Verify(
x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()),
Times.Once());
} }
[Fact] [Fact]
@ -800,30 +720,6 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
Assert.Equal("Test Content", result.Value); 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] [Fact]
public void Ok_SetsStatusCode() public void Ok_SetsStatusCode()
{ {
@ -838,30 +734,6 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
Assert.Equal(StatusCodes.Status200OK, result.StatusCode); 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] [Fact]
public void BadRequest_SetsStatusCode() public void BadRequest_SetsStatusCode()
{ {
@ -892,30 +764,6 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
Assert.Equal(obj, result.Value); 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] [Fact]
public void BadRequest_SetsStatusCodeAndValue_ModelState() public void BadRequest_SetsStatusCodeAndValue_ModelState()
{ {

View File

@ -183,53 +183,6 @@ namespace Microsoft.AspNetCore.Mvc.Test
Assert.Same(data, actualJsonResult.Value); 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 // These tests share code with the ActionFilterAttribute tests because the various filter
// implementations need to behave the same way. // implementations need to behave the same way.
[Fact] [Fact]