File: Http2\Http2HttpProtocolFeatureCollectionTests.cs
Web Access
Project: src\src\Servers\Kestrel\Core\test\Microsoft.AspNetCore.Server.Kestrel.Core.Tests.csproj (Microsoft.AspNetCore.Server.Kestrel.Core.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System;
using Microsoft.AspNetCore.Http.Features;
using Microsoft.AspNetCore.Server.Kestrel.Core.Features;
using Microsoft.AspNetCore.Server.Kestrel.Core.Internal;
using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http;
using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2;
using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure;
using Microsoft.AspNetCore.InternalTesting;
using Moq;
using Xunit;
 
namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests;
 
public class Http2HttpProtocolFeatureCollectionTests
{
    private readonly IFeatureCollection _http2Collection;
 
    public Http2HttpProtocolFeatureCollectionTests()
    {
        var context = TestContextFactory.CreateHttp2StreamContext(
            serviceContext: new TestServiceContext(),
            timeoutControl: Mock.Of<ITimeoutControl>());
 
        var http2Stream = new TestHttp2Stream(context);
        http2Stream.Reset();
        _http2Collection = http2Stream;
    }
 
    [Fact]
    public void Http2StreamFeatureCollectionDoesNotIncludeIHttpMinResponseDataRateFeature()
    {
        Assert.Null(_http2Collection.Get<IHttpMinResponseDataRateFeature>());
    }
 
    [Fact]
    public void Http2StreamFeatureCollectionDoesIncludeUpgradeFeature()
    {
        var upgradeFeature = _http2Collection.Get<IHttpUpgradeFeature>();
 
        Assert.NotNull(upgradeFeature);
        Assert.False(upgradeFeature.IsUpgradableRequest);
    }
 
    [Fact]
    public void Http2StreamFeatureCollectionDoesIncludeIHttpMinRequestBodyDataRateFeature()
    {
        var minRateFeature = _http2Collection.Get<IHttpMinRequestBodyDataRateFeature>();
 
        Assert.NotNull(minRateFeature);
 
        Assert.Throws<NotSupportedException>(() => minRateFeature.MinDataRate);
        Assert.Throws<NotSupportedException>(() => minRateFeature.MinDataRate = new MinDataRate(1, TimeSpan.FromSeconds(2)));
 
        // You can set the MinDataRate to null though.
        minRateFeature.MinDataRate = null;
 
        // But you still cannot read the property;
        Assert.Throws<NotSupportedException>(() => minRateFeature.MinDataRate);
    }
 
    private class TestHttp2Stream : Http2Stream
    {
        public TestHttp2Stream(Http2StreamContext context)
        {
            Initialize(context);
        }
 
        public override void Execute()
        {
        }
    }
}