public async Task CanDecodeEncodedData( int testDataSize, int appendBufferSize) { // Mockup var httpSettings = HttpSettings.Default; httpSettings.MaxBodyChunkSize = 1024; var targetStream = new MemoryStream(); var testData = MockData.Bytes(testDataSize, 7); var encoder = new HttpChunkedResponseEncoder( targetStream, TcpSettings.Default, httpSettings ); await encoder.AppendAsync(testData, appendBufferSize); await encoder.CompleteAsync(); // Check targetStream.Position = 0; var decoder = new HttpChunkedRequestBody( new RollbackableStream(targetStream, TcpSettings.Default), new HttpRequestHeader(), TcpSettings.Default ); var result = new MemoryStream(); await decoder.CopyToAsync(result); Assert.True(result.ToArray().SequenceEqual(testData)); }
static async Task VerifyReceivedChunkedMessage( MemoryStream senderData, MemoryStream receiverData) { receiverData.Position = 0; var chunkedDecoder = new HttpChunkedRequestBody( new RollbackableStream(receiverData, TcpSettings.Default), new HttpRequestHeader(), TcpSettings.Default ); var receiverDecodedData = new MemoryStream(); await chunkedDecoder.CopyToAsync(receiverDecodedData); Xunit.Assert.True(senderData.ToArray().SequenceEqual(receiverDecodedData.ToArray())); }
static async Task DecodeTestWith(int[] chunkLengths) { MockHttpChunkedMessageBody.Generate( chunkLengths, out List <MemoryStream> chunks, out byte[] httpBody ); var bodyStream = new MemoryStream(httpBody); var inst = new HttpChunkedRequestBody( new RollbackableStream(bodyStream, TcpSettings.Default), new HttpRequestHeader(), TcpSettings.Default ); var result = new MemoryStream(); await inst.CopyToAsync(result); Assert.True( result.ToArray().SequenceEqual(chunks.SelectMany(m => m.ToArray())) ); }
public async Task CanHaveTrailer() { MockHttpChunkedMessageBody.Generate( new int[] { 400, 4000 }, new Dictionary <string, string> { { @"Content-Type", "application/json" } }, out List <MemoryStream> chunks, out byte[] httpBody ); var header = new HttpRequestHeader(); var inst = new HttpChunkedRequestBody( new RollbackableStream(new MemoryStream(httpBody), TcpSettings.Default), header, TcpSettings.Default ); await inst.CopyToAsync(new MemoryStream()); Assert.True(header.ContainsKey("Content-Type")); Assert.Equal("application/json", header["Content-Type"]); }