Example #1
0
    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);
    }
Example #2
0
    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);
    }
Example #3
0
    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);
    }
Example #4
0
    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
            );
    }