public void ExecuteRequestMessagesAsync_DisposesResponseInCaseOfException() { List <MockHttpResponseMessage> responses = new List <MockHttpResponseMessage>(); MockHttpServer server = new MockHttpServer(request => { if (request.Method == HttpMethod.Put) { throw new InvalidOperationException(); } var response = new MockHttpResponseMessage(); responses.Add(response); return(response); }); DefaultODataBatchHandler batchHandler = new DefaultODataBatchHandler(server); ODataBatchRequestItem[] requests = new ODataBatchRequestItem[] { new OperationRequestItem(new HttpRequestMessage(HttpMethod.Get, "http://example.com/")), new OperationRequestItem(new HttpRequestMessage(HttpMethod.Post, "http://example.com/")), new OperationRequestItem(new HttpRequestMessage(HttpMethod.Put, "http://example.com/")), }; Assert.Throws <InvalidOperationException>( () => batchHandler.ExecuteRequestMessagesAsync(requests, CancellationToken.None).Result); Assert.Equal(2, responses.Count); foreach (var response in responses) { Assert.True(response.IsDisposed); } }
public void SendRequestAsync_DisposesResponseInCaseOfException() { List <MockHttpResponseMessage> responses = new List <MockHttpResponseMessage>(); ChangeSetRequestItem requestItem = new ChangeSetRequestItem(new HttpRequestMessage[] { new HttpRequestMessage(HttpMethod.Get, "http://example.com"), new HttpRequestMessage(HttpMethod.Post, "http://example.com"), new HttpRequestMessage(HttpMethod.Put, "http://example.com") }); Mock <HttpMessageInvoker> invoker = new Mock <HttpMessageInvoker>(new HttpServer()); invoker.Setup(i => i.SendAsync(It.IsAny <HttpRequestMessage>(), CancellationToken.None)) .Returns <HttpRequestMessage, CancellationToken>((req, cancel) => { if (req.Method == HttpMethod.Put) { throw new InvalidOperationException(); } var response = new MockHttpResponseMessage(); responses.Add(response); return(Task.FromResult <HttpResponseMessage>(response)); }); Assert.Throws <InvalidOperationException>( () => requestItem.SendRequestAsync(invoker.Object, CancellationToken.None).Result); Assert.Equal(2, responses.Count); foreach (var response in responses) { Assert.True(response.IsDisposed); } }
public void Dispose_DisposesODataBatchResponseItems() { MockHttpResponseMessage[] responses = new MockHttpResponseMessage[] { new MockHttpResponseMessage(), new MockHttpResponseMessage(), new MockHttpResponseMessage() }; ODataBatchContent batchContent = new ODataBatchContent(new ODataBatchResponseItem[] { new OperationResponseItem(responses[0]), new ChangeSetResponseItem(new HttpResponseMessage[] { responses[1], responses[2] }) }); HttpResponseMessage batchResponse = new HttpResponseMessage { Content = batchContent }; batchResponse.Dispose(); foreach (var response in responses) { Assert.True(response.IsDisposed); } }
public void ProcessBatchAsync_DisposesResponseInCaseOfException() { // Arrange List <MockHttpResponseMessage> responses = new List <MockHttpResponseMessage>(); MockHttpServer server = new MockHttpServer(request => { if (request.Method == HttpMethod.Put) { throw new InvalidOperationException(); } var response = new MockHttpResponseMessage(); responses.Add(response); return(response); }); UnbufferedODataBatchHandler batchHandler = new UnbufferedODataBatchHandler(server); HttpRequestMessage batchRequest = new HttpRequestMessage(HttpMethod.Post, "http://example.com/$batch") { Content = new MultipartContent("mixed") { ODataBatchRequestHelper.CreateODataRequestContent(new HttpRequestMessage(HttpMethod.Get, "http://example.com/")), new MultipartContent("mixed") // ChangeSet { ODataBatchRequestHelper.CreateODataRequestContent(new HttpRequestMessage(HttpMethod.Post, "http://example.com/values")), ODataBatchRequestHelper.CreateODataRequestContent(new HttpRequestMessage(HttpMethod.Put, "http://example.com/values")) } } }; batchRequest.SetConfiguration(new HttpConfiguration()); // Act & Assert Assert.Throws <InvalidOperationException>( () => batchHandler.ProcessBatchAsync(batchRequest, CancellationToken.None).Result); Assert.Equal(2, responses.Count); foreach (var response in responses) { Assert.True(response.IsDisposed); } }