| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | using Google.Apis.Http; |
| | using System; |
| | using System.IO; |
| | using System.IO.Compression; |
| | using System.Linq; |
| | using System.Net.Http; |
| | using System.Text; |
| | using System.Threading.Tasks; |
| | using Xunit; |
| |
|
| | namespace Google.Apis.Tests.Apis.Http |
| | { |
| | public class GzipDeflateHandlerTest |
| | { |
| | [Fact] |
| | public async Task PlainTextContentLeftAlone() |
| | { |
| | var request = new HttpRequestMessage(); |
| | var response = new HttpResponseMessage |
| | { |
| | Content = new StringContent("Text") |
| | }; |
| | await RunRequestAsync(request, response); |
| | Assert.Equal("Text", await response.Content.ReadAsStringAsync()); |
| | AssertAcceptEncodingHeaders(request); |
| | } |
| |
|
| | [Fact] |
| | public async Task DeflateContentDecompressed() |
| | { |
| | var request = new HttpRequestMessage(); |
| | var response = new HttpResponseMessage |
| | { |
| | Content = CreateContent("Text", stream => new DeflateStream(stream, CompressionMode.Compress, true), "deflate"), |
| | }; |
| | await RunRequestAsync(request, response); |
| | Assert.Equal("Text", await response.Content.ReadAsStringAsync()); |
| | AssertAcceptEncodingHeaders(request); |
| | AssertContentEncodings(response); |
| | } |
| |
|
| | [Fact] |
| | public async Task GzipContentDecompressed() |
| | { |
| | var request = new HttpRequestMessage(); |
| | var response = new HttpResponseMessage |
| | { |
| | Content = CreateContent("Text", stream => new GZipStream(stream, CompressionMode.Compress, true), "gzip"), |
| | }; |
| | await RunRequestAsync(request, response); |
| | Assert.Equal("Text", await response.Content.ReadAsStringAsync()); |
| | AssertAcceptEncodingHeaders(request); |
| | AssertContentEncodings(response); |
| | } |
| |
|
| | [Fact] |
| | public async Task OnlyLastContentEncodingRelevant() |
| | { |
| | var request = new HttpRequestMessage(); |
| | var response = new HttpResponseMessage |
| | { |
| | Content = new StringContent("Text") { Headers = { ContentEncoding = { "gzip", "identity" } } } |
| | }; |
| | await RunRequestAsync(request, response); |
| | Assert.Equal("Text", await response.Content.ReadAsStringAsync()); |
| | AssertAcceptEncodingHeaders(request); |
| | AssertContentEncodings(response, "gzip", "identity"); |
| | } |
| |
|
| | [Fact] |
| | public async Task LastContentEncodingRemoved() |
| | { |
| | var request = new HttpRequestMessage(); |
| | var response = new HttpResponseMessage |
| | { |
| | Content = CreateContent("Text", stream => new GZipStream(stream, CompressionMode.Compress, true), "foo", "bar", "gzip"), |
| | }; |
| | await RunRequestAsync(request, response); |
| | Assert.Equal("Text", await response.Content.ReadAsStringAsync()); |
| | AssertAcceptEncodingHeaders(request); |
| | AssertContentEncodings(response, "foo", "bar"); |
| | } |
| |
|
| | private StreamContent CreateContent(string text, Func<Stream, Stream> streamProvider, params string[] contentEncodings) |
| | { |
| | byte[] data = Encoding.UTF8.GetBytes(text); |
| | var memoryStream = new MemoryStream(); |
| | using (var compressor = streamProvider(memoryStream)) |
| | { |
| | compressor.Write(data, 0, data.Length); |
| | } |
| | memoryStream.Position = 0; |
| | var content = new StreamContent(memoryStream); |
| | foreach (var contentEncoding in contentEncodings) |
| | { |
| | content.Headers.ContentEncoding.Add(contentEncoding); |
| | } |
| | return content; |
| | } |
| |
|
| | private void AssertAcceptEncodingHeaders(HttpRequestMessage request) |
| | { |
| | var acceptEncodings = request.Headers.AcceptEncoding.Select(h => h.Value); |
| | Assert.Contains("gzip", acceptEncodings); |
| | Assert.Contains("deflate", acceptEncodings); |
| | } |
| |
|
| | private void AssertContentEncodings(HttpResponseMessage response, params string[] expectedEncodings) |
| | { |
| | var contentEncodings = response.Content.Headers.ContentEncoding; |
| | Assert.Equal(expectedEncodings, contentEncodings); |
| | } |
| |
|
| | private Task RunRequestAsync(HttpRequestMessage request, HttpResponseMessage response) |
| | { |
| | var handler = new GzipDeflateHandler(HandlerTestHelper.CreateHandler(response)); |
| | return HandlerTestHelper.ProcessRequestAsync(handler, request); |
| | } |
| | } |
| | } |
| |
|