Exemplo n.º 1
0
        public void Parameter_Constructor()
        {
            HttpResponseMessage   response     = new HttpResponseMessage();
            OperationResponseItem responseItem = new OperationResponseItem(response);

            Assert.Same(response, responseItem.Response);
        }
Exemplo n.º 2
0
        public async Task WriteResponseAsync_AsynchronouslyWritesOperation()
        {
            // Arrange
            HttpContext context = HttpContextHelper.Create(StatusCodes.Status202Accepted);

            OperationResponseItem responseItem    = new OperationResponseItem(context);
            MemoryStream          memoryStream    = new MemoryStream();
            IODataResponseMessage responseMessage = new ODataMessageWrapper(memoryStream);
            ODataMessageWriter    writer          = new ODataMessageWriter(responseMessage);

            // Act
            ODataBatchWriter batchWriter = await writer.CreateODataBatchWriterAsync();

            await batchWriter.WriteStartBatchAsync();

            await responseItem.WriteResponseAsync(batchWriter);

            await batchWriter.WriteEndBatchAsync();

            memoryStream.Position = 0;
            string responseString = new StreamReader(memoryStream).ReadToEnd();

            // Assert
            Assert.Contains("Accepted", responseString);
        }
Exemplo n.º 3
0
        public async Task WriteResponseAsync_NullWriter_Throws()
        {
            OperationResponseItem responseItem = new OperationResponseItem(new HttpResponseMessage());

            await ExceptionAssert.ThrowsArgumentNullAsync(
                () => responseItem.WriteResponseAsync(null, CancellationToken.None),
                "writer");
        }
Exemplo n.º 4
0
        public void Dispose_DisposesHttpResponseMessage()
        {
            OperationResponseItem responseItem = new OperationResponseItem(new MockHttpResponseMessage());

            responseItem.Dispose();

            Assert.True(((MockHttpResponseMessage)responseItem.Response).IsDisposed);
        }
        public void WriteResponseAsync_NullWriter_Throws()
        {
            OperationResponseItem responseItem = new OperationResponseItem(new HttpResponseMessage());

            Assert.ThrowsArgumentNull(
                () => responseItem.WriteResponseAsync(null, CancellationToken.None).Wait(),
                "writer");
        }
Exemplo n.º 6
0
        public async Task WriteResponseAsync_NullWriter_Throws()
        {
            // Arrange & Act
            Mock <HttpContext>    context      = new Mock <HttpContext>();
            OperationResponseItem responseItem = new OperationResponseItem(context.Object);

            // Assert
            await ExceptionAssert.ThrowsArgumentNullAsync(() => responseItem.WriteResponseAsync(null), "writer");
        }
Exemplo n.º 7
0
        public void Parameter_Constructor()
        {
            // Arrange & Act
            Mock <HttpContext>    context      = new Mock <HttpContext>();
            OperationResponseItem responseItem = new OperationResponseItem(context.Object);

            // Assert
            Assert.Same(context.Object, responseItem.Context);
        }
Exemplo n.º 8
0
        public void IsResponseSucess_TestResponse()
        {
            // Arrange
            OperationResponseItem successResponseItem = new OperationResponseItem(new HttpResponseMessage(HttpStatusCode.OK));
            OperationResponseItem errorResponseItem   = new OperationResponseItem(new HttpResponseMessage(HttpStatusCode.Ambiguous));

            // Act & Assert
            Assert.True(successResponseItem.IsResponseSuccessful());
            Assert.False(errorResponseItem.IsResponseSuccessful());
        }
Exemplo n.º 9
0
        public void IsResponseSucess_TestResponse()
        {
            // Arrange
            OperationResponseItem successResponseItem = new OperationResponseItem(HttpContextHelper.Create(StatusCodes.Status200OK));
            OperationResponseItem errorResponseItem   = new OperationResponseItem(HttpContextHelper.Create(StatusCodes.Status300MultipleChoices));

            // Act & Assert
            Assert.True(successResponseItem.IsResponseSuccessful());
            Assert.False(errorResponseItem.IsResponseSuccessful());
        }
Exemplo n.º 10
0
        public async Task ExecuteOperationAsync_CopiesPropertiesFromRequest_WithoutExcludedProperties()
        {
            // Arrange
            RequestDelegate handler = context =>
            {
                context.Features[typeof(UnbufferedODataBatchHandlerTest)] = "foo";
                return(Task.FromResult(context.Response));
            };

            UnbufferedODataBatchHandler batchHandler = new UnbufferedODataBatchHandler();
            string batchRequest = @"--75148e61-e67a-4bb7-ac0f-78fa30d0da30
Content-Type: application/http
Content-Transfer-Encoding: binary
Content-ID: 318941389

GET / HTTP/1.1
Host: example.com


--75148e61-e67a-4bb7-ac0f-78fa30d0da30--
";

            HttpRequest request     = RequestFactory.Create("Post", "http://example.com/$batch", opt => opt.AddModel(EdmCoreModel.Instance));
            HttpContext httpContext = request.HttpContext;

            byte[] requestBytes = Encoding.UTF8.GetBytes(batchRequest);
            request.Body          = new MemoryStream(requestBytes);
            request.ContentType   = "multipart/mixed;boundary=\"75148e61-e67a-4bb7-ac0f-78fa30d0da30\"";
            request.ContentLength = 431;
            httpContext.ODataFeature().PrefixName = "";
            IServiceProvider sp = request.GetSubServiceProvider();

            IODataRequestMessage oDataRequestMessage = ODataMessageWrapperHelper.Create(httpContext.Request.Body, request.Headers, sp);
            ODataMessageReader   oDataMessageReader  = new ODataMessageReader(oDataRequestMessage, new ODataMessageReaderSettings {
                BaseUri = new Uri("http://example.com")
            });

            ODataBatchReader batchReader = await oDataMessageReader.CreateODataBatchReaderAsync();

            List <ODataBatchResponseItem> responses = new List <ODataBatchResponseItem>();
            await batchReader.ReadAsync();

            // Act
            var response = await batchHandler.ExecuteOperationAsync(batchReader, Guid.NewGuid(), httpContext.Request, handler);

            // Assert
            OperationResponseItem operationResponseItem = Assert.IsType <OperationResponseItem>(response);

            Assert.Equal("foo", operationResponseItem.Context.Features[typeof(UnbufferedODataBatchHandlerTest)]);
        }
Exemplo n.º 11
0
        public void WriteResponseAsync_WritesOperation()
        {
            OperationResponseItem responseItem    = new OperationResponseItem(new HttpResponseMessage(HttpStatusCode.Accepted));
            MemoryStream          memoryStream    = new MemoryStream();
            IODataResponseMessage responseMessage = new ODataMessageWrapper(memoryStream);
            ODataMessageWriter    writer          = new ODataMessageWriter(responseMessage);
            ODataBatchWriter      batchWriter     = writer.CreateODataBatchWriter();

            batchWriter.WriteStartBatch();

            responseItem.WriteResponseAsync(batchWriter, CancellationToken.None).Wait();

            batchWriter.WriteEndBatch();
            memoryStream.Position = 0;
            string responseString = new StreamReader(memoryStream).ReadToEnd();

            Assert.Contains("Accepted", responseString);
        }
        public async Task ExecuteRequestMessagesAsync_CallsInvokerForEachRequest()
        {
            // Arrange
            RequestDelegate handler = async context =>
            {
                HttpRequest request         = context.Request;
                string      responseContent = request.GetDisplayUrl();
                string      content         = request.ReadBody();
                if (!string.IsNullOrEmpty(content))
                {
                    responseContent += "," + content;
                }

                context.Response.Body = new MemoryStream();
                await context.Response.WriteAsync(responseContent);
            };

            ODataBatchRequestItem[] requests = new ODataBatchRequestItem[]
            {
                new OperationRequestItem(HttpContextHelper.Create("Get", "http://example.com/")),
                new ChangeSetRequestItem(new HttpContext[]
                {
                    HttpContextHelper.Create("Post", "http://example.com/values", "foo", "text/plan")
                })
            };
            DefaultODataBatchHandler batchHandler = new DefaultODataBatchHandler();

            // Act
            IList <ODataBatchResponseItem> responses = await batchHandler.ExecuteRequestMessagesAsync(requests, handler);

            // Assert
            Assert.Equal(2, responses.Count);

            // #1
            OperationResponseItem response0 = Assert.IsType <OperationResponseItem>(responses[0]);

            Assert.Equal("http://example.com/", response0.Context.Response.ReadBody());

            // #2
            ChangeSetResponseItem response1  = Assert.IsType <ChangeSetResponseItem>(responses[1]);
            HttpContext           subContext = Assert.Single(response1.Contexts);

            Assert.Equal("http://example.com/values,foo", response1.Contexts.First().Response.ReadBody());
        }
Exemplo n.º 13
0
        public async Task WriteResponseAsync_AsynchronouslyWritesOperation()
        {
            OperationResponseItem responseItem    = new OperationResponseItem(new HttpResponseMessage(HttpStatusCode.Accepted));
            MemoryStream          memoryStream    = new MemoryStream();
            IODataResponseMessage responseMessage = new ODataMessageWrapper(memoryStream);
            ODataMessageWriter    writer          = new ODataMessageWriter(responseMessage);
            ODataBatchWriter      batchWriter     = await writer.CreateODataBatchWriterAsync();

            await batchWriter.WriteStartBatchAsync();

            await responseItem.WriteResponseAsync(batchWriter, CancellationToken.None, /*writeAsync*/ true);

            await batchWriter.WriteEndBatchAsync();

            memoryStream.Position = 0;
            string responseString = new StreamReader(memoryStream).ReadToEnd();

            Assert.Contains("Accepted", responseString);
        }
Exemplo n.º 14
0
        public async Task WriteResponseAsync_SynchronouslyWritesOperation()
        {
            OperationResponseItem responseItem    = new OperationResponseItem(new HttpResponseMessage(HttpStatusCode.Accepted));
            MemoryStream          memoryStream    = new MemoryStream();
            IODataResponseMessage responseMessage = new ODataMessageWrapper(memoryStream);
            ODataMessageWriter    writer          = new ODataMessageWriter(responseMessage);
            ODataBatchWriter      batchWriter     = writer.CreateODataBatchWriter();

            batchWriter.WriteStartBatch();

            // For backward compatibility, default is to write to use a synchronous batchWriter.
            await responseItem.WriteResponseAsync(batchWriter, CancellationToken.None);

            batchWriter.WriteEndBatch();
            memoryStream.Position = 0;
            string responseString = new StreamReader(memoryStream).ReadToEnd();

            Assert.Contains("Accepted", responseString);
        }
Exemplo n.º 15
0
        public async Task SendRequestAsync_ReturnsOperationResponse()
        {
            // Arrange
            HttpContext          context     = HttpContextHelper.Create("Get", "http://example.com");
            OperationRequestItem requestItem = new OperationRequestItem(context);

            RequestDelegate handler = context =>
            {
                context.Response.StatusCode = StatusCodes.Status304NotModified;
                return(Task.FromResult(context.Response));
            };

            // Act
            ODataBatchResponseItem response = await requestItem.SendRequestAsync(handler);

            // Assert
            OperationResponseItem operationResponse = Assert.IsType <OperationResponseItem>(response);

            Assert.Equal(StatusCodes.Status304NotModified, operationResponse.Context.Response.StatusCode);
        }
Exemplo n.º 16
0
        public void WriteResponseAsync_SynchronouslyWritesOperation_Throws()
        {
            // Arrange
            HttpContext context = HttpContextHelper.Create(StatusCodes.Status202Accepted);

            OperationResponseItem responseItem    = new OperationResponseItem(context);
            MemoryStream          memoryStream    = new MemoryStream();
            IODataResponseMessage responseMessage = new ODataMessageWrapper(memoryStream);
            ODataMessageWriter    writer          = new ODataMessageWriter(responseMessage);

            // Act
            ODataBatchWriter batchWriter = writer.CreateODataBatchWriter();

            batchWriter.WriteStartBatch();

            // Assert
            Action         test      = () => responseItem.WriteResponseAsync(batchWriter).Wait();
            ODataException exception = ExceptionAssert.Throws <ODataException>(test);

            Assert.Equal("An asynchronous operation was called on a synchronous batch writer. Calls on a batch writer instance must be either all synchronous or all asynchronous.",
                         exception.Message);
        }