public void WriteStreamedErrorResponseAsync_Aborts_When_Formatter_Write_Faults() { // Arrange TaskCompletionSource <object> tcs = new TaskCompletionSource <object>(); tcs.TrySetException(new NotSupportedException("Expected error")); Mock <JsonMediaTypeFormatter> formatterMock = new Mock <JsonMediaTypeFormatter>() { CallBase = true }; formatterMock.Setup(m => m.WriteToStreamAsync(It.IsAny <Type>(), It.IsAny <object>(), It.IsAny <Stream>(), It.IsAny <HttpContent>(), It.IsAny <TransportContext>())).Returns(tcs.Task); MemoryStream memoryStream = new MemoryStream(); Mock <HttpResponseBase> responseBaseMock = CreateMockHttpResponseBaseForResponse(memoryStream); responseBaseMock.Setup(m => m.Close()).Verifiable(); HttpResponseBase responseBase = responseBaseMock.Object; Mock <HttpContextBase> contextMock = new Mock <HttpContextBase>() { DefaultValue = DefaultValue.Mock }; contextMock.SetupGet(m => m.Response).Returns(responseBase); HttpRequestMessage request = new HttpRequestMessage(); request.Properties.Add(HttpPropertyKeys.IsLocalKey, new Lazy <bool>(() => true)); HttpResponseMessage response = new HttpResponseMessage() { RequestMessage = request }; response.Content = new ObjectContent <string>("hello", formatterMock.Object); // Act Task task = HttpControllerHandler.WriteStreamedResponseContentAsync(responseBase, response.Content); task.Wait(); // Assert responseBaseMock.Verify(); }
public void WriteStreamedErrorResponseAsync_Aborts_When_Formatter_Write_Throws_Immediately() { // Arrange Mock <JsonMediaTypeFormatter> formatterMock = new Mock <JsonMediaTypeFormatter>() { CallBase = true }; formatterMock.Setup(m => m.WriteToStreamAsync(It.IsAny <Type>(), It.IsAny <object>(), It.IsAny <Stream>(), It.IsAny <HttpContent>(), It.IsAny <TransportContext>())).Throws(new NotSupportedException("Expected error")); MemoryStream memoryStream = new MemoryStream(); Mock <HttpRequestBase> requestBaseMock = new Mock <HttpRequestBase>(); requestBaseMock.Setup(m => m.Abort()).Verifiable(); HttpRequestBase requestBase = requestBaseMock.Object; HttpResponseBase responseBase = CreateMockHttpResponseBaseForResponse(memoryStream).Object; Mock <HttpContextBase> contextMock = new Mock <HttpContextBase>() { DefaultValue = DefaultValue.Mock }; contextMock.SetupGet(m => m.Response).Returns(responseBase); HttpContextBase contextBase = CreateStubContext(requestBase, responseBase); HttpRequestMessage request = new HttpRequestMessage(); request.SetIsLocal(new Lazy <bool>(() => true)); HttpResponseMessage response = new HttpResponseMessage() { RequestMessage = request }; response.Content = new ObjectContent <string>("hello", formatterMock.Object); // Act Task task = HttpControllerHandler.WriteStreamedResponseContentAsync(contextBase, response.Content); task.Wait(); // Assert requestBaseMock.Verify(); }