public void ExecuteChangeSetAsync_ReturnsSingleErrorResponse() { MockHttpServer server = new MockHttpServer(request => { if (request.Method == HttpMethod.Post) { return(Task.FromResult(new HttpResponseMessage(HttpStatusCode.BadRequest))); } return(Task.FromResult(new HttpResponseMessage())); }); UnbufferedODataBatchHandler batchHandler = new UnbufferedODataBatchHandler(server); HttpRequestMessage batchRequest = new HttpRequestMessage(HttpMethod.Post, "http://example.com/$batch") { Content = new MultipartContent("mixed") { new MultipartContent("mixed") // ChangeSet { ODataBatchRequestHelper.CreateODataRequestContent(new HttpRequestMessage(HttpMethod.Put, "http://example.com/values")), ODataBatchRequestHelper.CreateODataRequestContent(new HttpRequestMessage(HttpMethod.Post, "http://example.com/values")), ODataBatchRequestHelper.CreateODataRequestContent(new HttpRequestMessage(HttpMethod.Delete, "http://example.com/values")), } } }; ODataMessageReader reader = batchRequest.Content.GetODataMessageReaderAsync(new ODataMessageReaderSettings { BaseUri = new Uri("http://example.com") }).Result; ODataBatchReader batchReader = reader.CreateODataBatchReader(); var response = batchHandler.ExecuteChangeSetAsync(batchReader, Guid.NewGuid(), batchRequest, CancellationToken.None).Result; var changesetResponse = Assert.IsType <ChangeSetResponseItem>(response); Assert.Equal(1, changesetResponse.Responses.Count()); Assert.Equal(HttpStatusCode.BadRequest, changesetResponse.Responses.First().StatusCode); }
public void ProcessBatchAsync_CallsRegisterForDispose() { List<IDisposable> expectedResourcesForDisposal = new List<IDisposable>(); MockHttpServer server = new MockHttpServer(request => { var tmpContent = new StringContent(String.Empty); request.RegisterForDispose(tmpContent); expectedResourcesForDisposal.Add(tmpContent); return new HttpResponseMessage { Content = new StringContent(request.RequestUri.AbsoluteUri) }; }); 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/")) } } }; var response = batchHandler.ProcessBatchAsync(batchRequest, CancellationToken.None).Result; var resourcesForDisposal = batchRequest.GetResourcesForDisposal(); foreach (var expectedResource in expectedResourcesForDisposal) { Assert.Contains(expectedResource, resourcesForDisposal); } }
public async Task ExecuteRequestMessagesAsync_DisposesResponseInCaseOfException() { List <DisposableResponseMessage> responses = new List <DisposableResponseMessage>(); MockHttpServer server = new MockHttpServer( request => { if (request.Method == HttpMethod.Put) { throw new InvalidOperationException(); } var response = new DisposableResponseMessage(); responses.Add(response); return(response); } ); DefaultHttpBatchHandler batchHandler = new DefaultHttpBatchHandler(server); HttpRequestMessage[] requests = new HttpRequestMessage[] { new HttpRequestMessage(HttpMethod.Get, "http://example.com/"), new HttpRequestMessage(HttpMethod.Post, "http://example.com/"), new HttpRequestMessage(HttpMethod.Put, "http://example.com/") }; await Assert.ThrowsAsync <InvalidOperationException>( () => batchHandler.ExecuteRequestMessagesAsync(requests, CancellationToken.None) ); Assert.Equal(2, responses.Count); foreach (var response in responses) { Assert.True(response.IsDisposed); } }
public void ProcessBatchAsync_CallsRegisterForDispose() { List <IDisposable> expectedResourcesForDisposal = new List <IDisposable>(); MockHttpServer server = new MockHttpServer(request => { var tmpContent = new StringContent(String.Empty); request.RegisterForDispose(tmpContent); expectedResourcesForDisposal.Add(tmpContent); return(new HttpResponseMessage { Content = new StringContent(request.RequestUri.AbsoluteUri) }); }); 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/")) } } }; var response = batchHandler.ProcessBatchAsync(batchRequest, CancellationToken.None).Result; var resourcesForDisposal = batchRequest.GetResourcesForDisposal(); foreach (var expectedResource in expectedResourcesForDisposal) { Assert.Contains(expectedResource, resourcesForDisposal); } }
public async Task ExecuteRequestMessagesAsync_CallsInvokerForEachRequest() { MockHttpServer server = new MockHttpServer( request => { return(new HttpResponseMessage { Content = new StringContent(request.RequestUri.AbsoluteUri) }); } ); DefaultHttpBatchHandler batchHandler = new DefaultHttpBatchHandler(server); HttpRequestMessage[] requests = new HttpRequestMessage[] { new HttpRequestMessage(HttpMethod.Get, "http://example.com/"), new HttpRequestMessage(HttpMethod.Post, "http://example.org/") }; var responses = await batchHandler.ExecuteRequestMessagesAsync( requests, CancellationToken.None ); Assert.Equal(2, responses.Count); Assert.Equal("http://example.com/", await responses[0].Content.ReadAsStringAsync()); Assert.Equal("http://example.org/", await responses[1].Content.ReadAsStringAsync()); }
public async Task ProcessBatchAsync_CallsRegisterForDispose() { List <IDisposable> expectedResourcesForDisposal = new List <IDisposable>(); MockHttpServer server = new MockHttpServer(request => { var tmpContent = new StringContent(String.Empty); request.RegisterForDispose(tmpContent); expectedResourcesForDisposal.Add(tmpContent); return(new HttpResponseMessage { Content = new StringContent(request.RequestUri.AbsoluteUri) }); }); DefaultHttpBatchHandler batchHandler = new DefaultHttpBatchHandler(server); HttpRequestMessage batchRequest = new HttpRequestMessage { Content = new MultipartContent("mixed") { new HttpMessageContent(new HttpRequestMessage(HttpMethod.Get, "http://example.com/")), new HttpMessageContent(new HttpRequestMessage(HttpMethod.Post, "http://example.org/")) } }; var response = await batchHandler.ProcessBatchAsync(batchRequest, CancellationToken.None); var resourcesForDisposal = batchRequest.GetResourcesForDisposal(); foreach (var expectedResource in expectedResourcesForDisposal) { Assert.Contains(expectedResource, resourcesForDisposal); } }
public void ExecuteRequestMessagesAsync_SequentialExecutionCallInvokerForEachRequest() { List <HttpRequestMessage> completedRequests = new List <HttpRequestMessage>(); MockHttpServer server = new MockHttpServer(async request => { if (request.Method == HttpMethod.Get) { await Task.Delay(2000); } completedRequests.Add(request); return(new HttpResponseMessage()); }); DefaultHttpBatchHandler batchHandler = new DefaultHttpBatchHandler(server) { ExecutionOrder = BatchExecutionOrder.Sequential }; HttpRequestMessage[] requests = new HttpRequestMessage[] { new HttpRequestMessage(HttpMethod.Get, "http://example.com/"), new HttpRequestMessage(HttpMethod.Post, "http://example.com/") }; batchHandler.ExecuteRequestMessagesAsync(requests, CancellationToken.None).Wait(); Assert.Equal(2, completedRequests.Count); Assert.Equal(HttpMethod.Get, completedRequests[0].Method); Assert.Equal(HttpMethod.Post, completedRequests[1].Method); }
public void ExecuteChangeSetAsync_CopiesPropertiesFromRequest_WithoutExcludedProperties() { MockHttpServer server = new MockHttpServer(request => { return(new HttpResponseMessage { RequestMessage = request }); }); UnbufferedODataBatchHandler batchHandler = new UnbufferedODataBatchHandler(server); HttpRequestMessage batchRequest = new HttpRequestMessage(HttpMethod.Post, "http://example.com/$batch") { Content = new MultipartContent("mixed") { new MultipartContent("mixed") // ChangeSet { ODataBatchRequestHelper.CreateODataRequestContent(new HttpRequestMessage(HttpMethod.Post, "http://example.com/values") { Content = new StringContent("foo") }) } } }; batchRequest.Properties.Add("foo", "bar"); batchRequest.SetRouteData(new HttpRouteData(new HttpRoute())); batchRequest.RegisterForDispose(new StringContent(String.Empty)); ODataMessageReader reader = batchRequest.Content .GetODataMessageReaderAsync(new ODataMessageReaderSettings { BaseUri = new Uri("http://example.com") }, CancellationToken.None) .Result; ODataBatchReader batchReader = reader.CreateODataBatchReader(); List <ODataBatchResponseItem> responses = new List <ODataBatchResponseItem>(); Guid batchId = Guid.NewGuid(); batchReader.Read(); var response = batchHandler.ExecuteChangeSetAsync(batchReader, Guid.NewGuid(), batchRequest, CancellationToken.None).Result; var changeSetResponses = ((ChangeSetResponseItem)response).Responses; foreach (var changeSetResponse in changeSetResponses) { var changeSetRequest = changeSetResponse.RequestMessage; Assert.Equal("bar", changeSetRequest.Properties["foo"]); Assert.Null(changeSetRequest.GetRouteData()); Assert.Same(changeSetRequest, changeSetRequest.GetUrlHelper().Request); Assert.Empty(changeSetRequest.GetResourcesForDisposal()); } }
public void ProcessBatchAsync_CallsInvokerForEachRequest() { MockHttpServer server = new MockHttpServer(request => { string responseContent = request.RequestUri.AbsoluteUri; if (request.Content != null) { string content = request.Content.ReadAsStringAsync().Result; if (!String.IsNullOrEmpty(content)) { responseContent += "," + content; } } return(new HttpResponseMessage { Content = new StringContent(responseContent) }); }); 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") { Content = new StringContent("foo") }) } } }; var response = batchHandler.ProcessBatchAsync(batchRequest, CancellationToken.None).Result; var batchContent = Assert.IsType <ODataBatchContent>(response.Content); var batchResponses = batchContent.Responses.ToArray(); Assert.Equal(2, batchResponses.Length); Assert.Equal("http://example.com/", ((OperationResponseItem)batchResponses[0]).Response.Content.ReadAsStringAsync().Result); Assert.Equal("http://example.com/values,foo", ((ChangeSetResponseItem)batchResponses[1]).Responses.First().Content.ReadAsStringAsync().Result); }
public void ExecuteRequestMessagesAsync_CallsInvokerForEachRequest() { MockHttpServer server = new MockHttpServer(request => { string responseContent = request.RequestUri.AbsoluteUri; if (request.Content != null) { string content = request.Content.ReadAsStringAsync().Result; if (!String.IsNullOrEmpty(content)) { responseContent += "," + content; } } return(new HttpResponseMessage { Content = new StringContent(responseContent) }); }); DefaultODataBatchHandler batchHandler = new DefaultODataBatchHandler(server); ODataBatchRequestItem[] requests = new ODataBatchRequestItem[] { new OperationRequestItem(new HttpRequestMessage(HttpMethod.Get, "http://example.com/")), new ChangeSetRequestItem(new HttpRequestMessage[] { new HttpRequestMessage(HttpMethod.Post, "http://example.com/values") { Content = new StringContent("foo") } }) }; var responses = batchHandler.ExecuteRequestMessagesAsync(requests, CancellationToken.None).Result; Assert.Equal(2, responses.Count); Assert.Equal("http://example.com/", ((OperationResponseItem)responses[0]).Response.Content.ReadAsStringAsync().Result); Assert.Equal("http://example.com/values,foo", ((ChangeSetResponseItem)responses[1]).Responses.First().Content.ReadAsStringAsync().Result); }
public void ProcessBatchAsync_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); }); 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")) } } }; Assert.Throws <InvalidOperationException>( () => batchHandler.ProcessBatchAsync(batchRequest, CancellationToken.None).Result); Assert.Equal(2, responses.Count); foreach (var response in responses) { Assert.True(response.IsDisposed); } }
public void ExecuteRequestMessagesAsync_SequentialExecutionCallInvokerForEachRequest() { List<HttpRequestMessage> completedRequests = new List<HttpRequestMessage>(); MockHttpServer server = new MockHttpServer(async request => { if (request.Method == HttpMethod.Get) { await Task.Delay(2000); } completedRequests.Add(request); return new HttpResponseMessage(); }); DefaultHttpBatchHandler batchHandler = new DefaultHttpBatchHandler(server) { ExecutionOrder = BatchExecutionOrder.Sequential }; HttpRequestMessage[] requests = new HttpRequestMessage[] { new HttpRequestMessage(HttpMethod.Get, "http://example.com/"), new HttpRequestMessage(HttpMethod.Post, "http://example.com/") }; batchHandler.ExecuteRequestMessagesAsync(requests, CancellationToken.None).Wait(); Assert.Equal(2, completedRequests.Count); Assert.Equal(HttpMethod.Get, completedRequests[0].Method); Assert.Equal(HttpMethod.Post, completedRequests[1].Method); }
public void ExecuteRequestMessagesAsync_DisposesResponseInCaseOfException() { List<DisposableResponseMessage> responses = new List<DisposableResponseMessage>(); MockHttpServer server = new MockHttpServer(request => { if (request.Method == HttpMethod.Put) { throw new InvalidOperationException(); } var response = new DisposableResponseMessage(); responses.Add(response); return response; }); DefaultHttpBatchHandler batchHandler = new DefaultHttpBatchHandler(server); HttpRequestMessage[] requests = new HttpRequestMessage[] { new HttpRequestMessage(HttpMethod.Get, "http://example.com/"), new HttpRequestMessage(HttpMethod.Post, "http://example.com/"), 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 ExecuteRequestMessagesAsync_CallsInvokerForEachRequest() { MockHttpServer server = new MockHttpServer(request => { return new HttpResponseMessage { Content = new StringContent(request.RequestUri.AbsoluteUri) }; }); DefaultHttpBatchHandler batchHandler = new DefaultHttpBatchHandler(server); HttpRequestMessage[] requests = new HttpRequestMessage[] { new HttpRequestMessage(HttpMethod.Get, "http://example.com/"), new HttpRequestMessage(HttpMethod.Post, "http://example.org/") }; var responses = batchHandler.ExecuteRequestMessagesAsync(requests, CancellationToken.None).Result; Assert.Equal(2, responses.Count); Assert.Equal("http://example.com/", responses[0].Content.ReadAsStringAsync().Result); Assert.Equal("http://example.org/", responses[1].Content.ReadAsStringAsync().Result); }
public void ExecuteChangeSetAsync_ReturnsSingleErrorResponse() { MockHttpServer server = new MockHttpServer(request => { if (request.Method == HttpMethod.Post) { return Task.FromResult(new HttpResponseMessage(HttpStatusCode.BadRequest)); } return Task.FromResult(new HttpResponseMessage()); }); UnbufferedODataBatchHandler batchHandler = new UnbufferedODataBatchHandler(server); HttpRequestMessage batchRequest = new HttpRequestMessage(HttpMethod.Post, "http://example.com/$batch") { Content = new MultipartContent("mixed") { new MultipartContent("mixed") // ChangeSet { ODataBatchRequestHelper.CreateODataRequestContent(new HttpRequestMessage(HttpMethod.Put, "http://example.com/values")), ODataBatchRequestHelper.CreateODataRequestContent(new HttpRequestMessage(HttpMethod.Post, "http://example.com/values")), ODataBatchRequestHelper.CreateODataRequestContent(new HttpRequestMessage(HttpMethod.Delete, "http://example.com/values")), } } }; ODataMessageReader reader = batchRequest.Content .GetODataMessageReaderAsync(new ODataMessageReaderSettings { BaseUri = new Uri("http://example.com") }, CancellationToken.None) .Result; ODataBatchReader batchReader = reader.CreateODataBatchReader(); var response = batchHandler.ExecuteChangeSetAsync(batchReader, Guid.NewGuid(), batchRequest, CancellationToken.None).Result; var changesetResponse = Assert.IsType<ChangeSetResponseItem>(response); Assert.Equal(1, changesetResponse.Responses.Count()); Assert.Equal(HttpStatusCode.BadRequest, changesetResponse.Responses.First().StatusCode); }
public void ExecuteOperationAsync_CopiesPropertiesFromRequest_WithoutExcludedProperties() { MockHttpServer server = new MockHttpServer(request => { return new HttpResponseMessage { RequestMessage = request }; }); 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/")), } }; batchRequest.Properties.Add("foo", "bar"); batchRequest.SetRouteData(new HttpRouteData(new HttpRoute())); batchRequest.RegisterForDispose(new StringContent(String.Empty)); ODataMessageReader reader = batchRequest.Content .GetODataMessageReaderAsync(new ODataMessageReaderSettings { BaseUri = new Uri("http://example.com") }, CancellationToken.None) .Result; ODataBatchReader batchReader = reader.CreateODataBatchReader(); List<ODataBatchResponseItem> responses = new List<ODataBatchResponseItem>(); Guid batchId = Guid.NewGuid(); batchReader.Read(); var response = batchHandler.ExecuteOperationAsync(batchReader, Guid.NewGuid(), batchRequest, CancellationToken.None).Result; var operationResponse = ((OperationResponseItem)response).Response; var operationRequest = operationResponse.RequestMessage; Assert.Equal("bar", operationRequest.Properties["foo"]); Assert.Null(operationRequest.GetRouteData()); Assert.Same(operationRequest, operationRequest.GetUrlHelper().Request); Assert.Empty(operationRequest.GetResourcesForDisposal()); }
public void ProcessBatchAsync_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; }); 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")) } } }; Assert.Throws<InvalidOperationException>( () => batchHandler.ProcessBatchAsync(batchRequest, CancellationToken.None).Result); Assert.Equal(2, responses.Count); foreach (var response in responses) { Assert.True(response.IsDisposed); } }
public void ProcessBatchAsync_CallsInvokerForEachRequest() { MockHttpServer server = new MockHttpServer(request => { string responseContent = request.RequestUri.AbsoluteUri; if (request.Content != null) { string content = request.Content.ReadAsStringAsync().Result; if (!String.IsNullOrEmpty(content)) { responseContent += "," + content; } } return new HttpResponseMessage { Content = new StringContent(responseContent) }; }); 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") { Content = new StringContent("foo") }) } } }; var response = batchHandler.ProcessBatchAsync(batchRequest, CancellationToken.None).Result; var batchContent = Assert.IsType<ODataBatchContent>(response.Content); var batchResponses = batchContent.Responses.ToArray(); Assert.Equal(2, batchResponses.Length); Assert.Equal("http://example.com/", ((OperationResponseItem)batchResponses[0]).Response.Content.ReadAsStringAsync().Result); Assert.Equal("http://example.com/values,foo", ((ChangeSetResponseItem)batchResponses[1]).Responses.First().Content.ReadAsStringAsync().Result); }
public void ExecuteRequestMessagesAsync_CallsInvokerForEachRequest() { MockHttpServer server = new MockHttpServer(request => { string responseContent = request.RequestUri.AbsoluteUri; if (request.Content != null) { string content = request.Content.ReadAsStringAsync().Result; if (!String.IsNullOrEmpty(content)) { responseContent += "," + content; } } return new HttpResponseMessage { Content = new StringContent(responseContent) }; }); DefaultODataBatchHandler batchHandler = new DefaultODataBatchHandler(server); ODataBatchRequestItem[] requests = new ODataBatchRequestItem[] { new OperationRequestItem(new HttpRequestMessage(HttpMethod.Get, "http://example.com/")), new ChangeSetRequestItem(new HttpRequestMessage[] { new HttpRequestMessage(HttpMethod.Post, "http://example.com/values") { Content = new StringContent("foo") } }) }; var responses = batchHandler.ExecuteRequestMessagesAsync(requests, CancellationToken.None).Result; Assert.Equal(2, responses.Count); Assert.Equal("http://example.com/", ((OperationResponseItem)responses[0]).Response.Content.ReadAsStringAsync().Result); Assert.Equal("http://example.com/values,foo", ((ChangeSetResponseItem)responses[1]).Responses.First().Content.ReadAsStringAsync().Result); }