Exemple #1
0
    public async Task InvokeCodingRelaxed(string encodingIn, string messageIn, string encodingOut, string messageOut, long?contentLength, int statusCode)
    {
        Task NextRequestDelegate(HttpContext httpContext)
        {
            Assert.AreEqual(encodingOut, httpContext.Request.Headers.ContentEncoding.ToString());
            Assert.AreEqual(contentLength, httpContext.Request.Headers.ContentLength);
            Assert.AreEqual(messageOut, AsString(httpContext.Request.Body));
            Assert.AreEqual(statusCode, httpContext.Response.StatusCode);

            return(Task.CompletedTask);
        }

        var options     = new RequestDecompressionOptions();
        var logger      = NullLogger <RequestDecompressionMiddleware> .Instance;
        var httpContext = new DefaultHttpContext();

        options.Providers.Add <TestDecompressionProviderA>();
        options.AllowUnsupportedEncodings = true;

        httpContext.Request.Headers.ContentEncoding = new(encodingIn.Split('+', StringSplitOptions.RemoveEmptyEntries));
        httpContext.Request.Headers.ContentLength   = 1L;
        httpContext.Request.Body = new MemoryStream(Encoding.UTF8.GetBytes(messageIn));

        var middleware = new RequestDecompressionMiddleware(Options.Create(options), logger);

        await middleware.InvokeAsync(httpContext, NextRequestDelegate);

        Assert.AreEqual("", httpContext.Response.Headers.AcceptEncoding.ToString());
    }
Exemple #2
0
        public async Task InvokeAsyncWhenRequestHasContentRangeHeader()
        {
            var options = new RequestDecompressionOptions();

            options.Providers.Add <TestDecompressionProvider10>();

            var serviceProviderMock = new Mock <IServiceProvider>(MockBehavior.Strict);
            var optionsMock         = new Mock <IOptions <RequestDecompressionOptions> >(MockBehavior.Strict);

            optionsMock
            .Setup(o => o.Value)
            .Returns(options);

            var loggerMock = new Mock <ILogger <RequestDecompressionMiddleware> >(MockBehavior.Loose);

            loggerMock
            .Setup(o => o.IsEnabled(It.IsAny <LogLevel>()))
            .Returns(true);

            var middleware   = new RequestDecompressionMiddleware(serviceProviderMock.Object, optionsMock.Object, loggerMock.Object);
            var content      = "Hello World!";
            var contentBytes = Encoding.UTF8.GetBytes(content);
            var httpContext  = new DefaultHttpContext();

            httpContext.Request.Method = HttpMethods.Post;
            httpContext.Request.Headers.Add(HeaderNames.ContentEncoding, "encoding");
            httpContext.Request.Headers.Add(HeaderNames.ContentRange, "0-*/*");
            httpContext.Request.Body = new TestRequestStream(contentBytes);

            await middleware.InvokeAsync(httpContext, c => Task.CompletedTask);

            Assert.AreEqual(0, httpContext.Response.Body.Length);
        }
    public void GlobalSetup()
    {
        var requestDecompressionProvider = new DefaultRequestDecompressionProvider(
            NullLogger <DefaultRequestDecompressionProvider> .Instance,
            Options.Create(new RequestDecompressionOptions())
            );

        _middleware = new RequestDecompressionMiddleware(
            context => Task.CompletedTask,
            NullLogger <RequestDecompressionMiddleware> .Instance,
            requestDecompressionProvider
            );
    }
Exemple #4
0
        public async Task InvokeAsync(string encoding1, string encoding2, bool skipUnsupportedEncodings, int statusCode)
        {
            var options = new RequestDecompressionOptions();

            options.Providers.Add <DeflateDecompressionProvider>();
            options.Providers.Add <GzipDecompressionProvider>();
            options.Providers.Add <BrotliDecompressionProvider>();
            options.SkipUnsupportedEncodings = skipUnsupportedEncodings;

            var loggerMock = new Mock <ILogger <RequestDecompressionMiddleware> >(MockBehavior.Loose);

            loggerMock
            .Setup(o => o.IsEnabled(It.IsAny <LogLevel>()))
            .Returns(true);

            var serviceProviderMock = new Mock <IServiceProvider>(MockBehavior.Strict);
            var optionsMock         = new Mock <IOptions <RequestDecompressionOptions> >(MockBehavior.Strict);

            optionsMock
            .Setup(o => o.Value)
            .Returns(options);

            var middleware = new RequestDecompressionMiddleware(serviceProviderMock.Object, optionsMock.Object, loggerMock.Object);
            var content    = "Hello World!";

            var contentBytes1 = Encoding.UTF8.GetBytes(content);
            var contentBytes2 = default(byte[]);

            var encoding1Values = new StringValues(encoding1.Split(' ', StringSplitOptions.RemoveEmptyEntries));
            var encoding2Values = new StringValues(encoding2.Split(' ', StringSplitOptions.RemoveEmptyEntries));

            foreach (var encoding in encoding1Values)
            {
                contentBytes1 = CompressionEncoder.Encode(contentBytes1, encoding);
            }

            var httpContext = new DefaultHttpContext();

            httpContext.Request.Method = HttpMethods.Post;
            httpContext.Request.Headers.Add(HeaderNames.ContentEncoding, encoding1Values);
            httpContext.Request.Body = new TestRequestStream(contentBytes1);

            await middleware.InvokeAsync(httpContext, c => Task.CompletedTask);

            if (statusCode == StatusCodes.Status200OK)
            {
                Assert.AreEqual(encoding2Values, httpContext.Request.Headers[HeaderNames.ContentEncoding]);

                if (encoding2 == "")
                {
                    if (httpContext.Request.Body is TestRequestStream)
                    {
                        contentBytes2 = ((TestRequestStream)httpContext.Request.Body).ToArray();
                    }
                    else
                    {
                        contentBytes2 = ((MemoryStream)httpContext.Request.Body).ToArray();
                    }


                    Assert.AreEqual(content, Encoding.UTF8.GetString(contentBytes2));
                }
            }

            Assert.AreEqual(statusCode, httpContext.Response.StatusCode);
        }