public void GetDecompressionProvider_UnsupportedContentEncoding_ReturnsNull() { // Arrange var contentEncoding = "custom"; var httpContext = new DefaultHttpContext(); httpContext.Request.Headers.Add(HeaderNames.ContentEncoding, contentEncoding); var(logger, sink) = GetTestLogger(); var options = Options.Create(new RequestDecompressionOptions()); var provider = new DefaultRequestDecompressionProvider(logger, options); // Act var matchingProvider = provider.GetDecompressionStream(httpContext); // Assert Assert.Null(matchingProvider); var logMessages = sink.Writes.ToList(); AssertLog(logMessages.Single(), LogLevel.Debug, "No matching request decompression provider found."); var contentEncodingHeader = httpContext.Request.Headers.ContentEncoding; Assert.Equal(contentEncoding, contentEncodingHeader); }
public void GetDecompressionProvider_NoContentEncoding_ReturnsNull() { // Arrange var httpContext = new DefaultHttpContext(); var(logger, sink) = GetTestLogger(); var options = Options.Create(new RequestDecompressionOptions()); var provider = new DefaultRequestDecompressionProvider(logger, options); // Act var matchingProvider = provider.GetDecompressionStream(httpContext); // Assert Assert.Null(matchingProvider); var logMessages = sink.Writes.ToList(); AssertLog(logMessages.Single(), LogLevel.Trace, "The Content-Encoding header is empty or not specified. Skipping request decompression."); var contentEncodingHeader = httpContext.Request.Headers.ContentEncoding; Assert.Empty(contentEncodingHeader); }
public void GetDecompressionProvider_MultipleContentEncodings_ReturnsNull() { // Arrange var contentEncodings = new StringValues(new[] { "br", "gzip" }); var httpContext = new DefaultHttpContext(); httpContext.Request.Headers.Add(HeaderNames.ContentEncoding, contentEncodings); var(logger, sink) = GetTestLogger(); var options = Options.Create(new RequestDecompressionOptions()); var provider = new DefaultRequestDecompressionProvider(logger, options); // Act var matchingProvider = provider.GetDecompressionStream(httpContext); // Assert Assert.Null(matchingProvider); var logMessages = sink.Writes.ToList(); AssertLog(logMessages.Single(), LogLevel.Debug, "Request decompression is not supported for multiple Content-Encodings."); var contentEncodingHeader = httpContext.Request.Headers.ContentEncoding; Assert.Equal(contentEncodings, contentEncodingHeader); }
public void GetDecompressionProvider_SupportedContentEncoding_ReturnsProvider( string contentEncoding, Type expectedProviderType) { // Arrange var httpContext = new DefaultHttpContext(); httpContext.Request.Headers.Add(HeaderNames.ContentEncoding, contentEncoding); var(logger, sink) = GetTestLogger(); var options = Options.Create(new RequestDecompressionOptions()); var provider = new DefaultRequestDecompressionProvider(logger, options); // Act var matchingProvider = provider.GetDecompressionStream(httpContext); // Assert Assert.NotNull(matchingProvider); Assert.IsType(expectedProviderType, matchingProvider); var logMessages = sink.Writes.ToList(); AssertLog(logMessages.Single(), LogLevel.Debug, $"The request will be decompressed with '{contentEncoding.ToLowerInvariant()}'."); var contentEncodingHeader = httpContext.Request.Headers.ContentEncoding; Assert.Empty(contentEncodingHeader); }
public void GlobalSetup() { var requestDecompressionProvider = new DefaultRequestDecompressionProvider( NullLogger <DefaultRequestDecompressionProvider> .Instance, Options.Create(new RequestDecompressionOptions()) ); _middleware = new RequestDecompressionMiddleware( context => Task.CompletedTask, NullLogger <RequestDecompressionMiddleware> .Instance, requestDecompressionProvider ); }