File: HttpRequestPipeReaderTests.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 System.Threading.Tasks;
using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http;
using Xunit;
 
namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests;
 
public class HttpRequestPipeReaderTests
{
    [Fact]
    public async Task StopAcceptingReadsCausesReadToThrowObjectDisposedException()
    {
        var pipeReader = new HttpRequestPipeReader();
        pipeReader.StartAcceptingReads(null);
        pipeReader.StopAcceptingReads();
 
        // Validation for ReadAsync occurs in an async method in ReadOnlyPipeStream.
        await Assert.ThrowsAsync<ObjectDisposedException>(async () => { await pipeReader.ReadAsync(); });
    }
    [Fact]
    public async Task AbortCausesReadToCancel()
    {
        var pipeReader = new HttpRequestPipeReader();
 
        pipeReader.StartAcceptingReads(null);
        pipeReader.Abort();
        await Assert.ThrowsAsync<TaskCanceledException>(() => pipeReader.ReadAsync().AsTask());
    }
 
    [Fact]
    public async Task AbortWithErrorCausesReadToCancel()
    {
        var pipeReader = new HttpRequestPipeReader();
 
        pipeReader.StartAcceptingReads(null);
        var error = new Exception();
        pipeReader.Abort(error);
        var exception = await Assert.ThrowsAsync<Exception>(() => pipeReader.ReadAsync().AsTask());
        Assert.Same(error, exception);
    }
}