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));
        }
Exemple #2
0
        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"]);
        }