mirror of
https://github.com/adamhathcock/sharpcompress.git
synced 2026-11-15 17:02:03 +00:00
Return pooled memory stream blocks when construction fails
This commit is contained in:
@@ -8,6 +8,31 @@ namespace SharpCompress.Test.Streams;
|
||||
|
||||
public class PooledMemoryStreamTests
|
||||
{
|
||||
[Fact]
|
||||
public void FailedConstructorReturnsPreviouslyRentedBlocks()
|
||||
{
|
||||
var pool = new FailingArrayPool();
|
||||
Assert.Throws<IOException>(() => new PooledMemoryStream(16, 8, pool));
|
||||
Assert.Equal(1, pool.ReturnCount);
|
||||
}
|
||||
|
||||
private sealed class FailingArrayPool : ArrayPool<byte>
|
||||
{
|
||||
private int rentCount;
|
||||
public int ReturnCount { get; private set; }
|
||||
|
||||
public override byte[] Rent(int minimumLength)
|
||||
{
|
||||
if (++rentCount == 2)
|
||||
{
|
||||
throw new IOException("Injected rental failure");
|
||||
}
|
||||
return new byte[minimumLength];
|
||||
}
|
||||
|
||||
public override void Return(byte[] array, bool clearArray = false) => ReturnCount++;
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GrowsUsingFixedSizeBlocks()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user