File: TestHelpers\ObservablePipeReader.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.Collections.Generic;
using System.IO.Pipelines;
using System.Text;
 
namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests.TestHelpers;
 
internal class ObservablePipeReader : PipeReader
{
    private readonly PipeReader _inner;
 
    public ObservablePipeReader(PipeReader reader)
    {
        _inner = reader;
    }
 
    /// <summary>
    /// Number of times <see cref="ReadAsync(CancellationToken)"/> was called.
    /// </summary>
    public int ReadAsyncCounter { get; private set; }
 
    public override void AdvanceTo(SequencePosition consumed)
        => _inner.AdvanceTo(consumed);
 
    public override void AdvanceTo(SequencePosition consumed, SequencePosition examined)
        => _inner.AdvanceTo(consumed, examined);
 
    public override void CancelPendingRead()
        => _inner.CancelPendingRead();
 
    public override void Complete(Exception exception = null)
        => _inner.Complete(exception);
 
    public override ValueTask<ReadResult> ReadAsync(CancellationToken cancellationToken = default)
    {
        ReadAsyncCounter++;
        return _inner.ReadAsync(cancellationToken);
    }
 
    public override bool TryRead(out ReadResult result)
    {
        return _inner.TryRead(out result);
    }
}