Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/dotnet/aspnetcore.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/Http/WebUtilities/test/FileBufferingReadStreamTests.cs')
-rw-r--r--src/Http/WebUtilities/test/FileBufferingReadStreamTests.cs873
1 files changed, 436 insertions, 437 deletions
diff --git a/src/Http/WebUtilities/test/FileBufferingReadStreamTests.cs b/src/Http/WebUtilities/test/FileBufferingReadStreamTests.cs
index 7d6c422292..c79bc50585 100644
--- a/src/Http/WebUtilities/test/FileBufferingReadStreamTests.cs
+++ b/src/Http/WebUtilities/test/FileBufferingReadStreamTests.cs
@@ -9,508 +9,507 @@ using System.Threading.Tasks;
using Moq;
using Xunit;
-namespace Microsoft.AspNetCore.WebUtilities
+namespace Microsoft.AspNetCore.WebUtilities;
+
+public class FileBufferingReadStreamTests
{
- public class FileBufferingReadStreamTests
+ private Stream MakeStream(int size)
{
- private Stream MakeStream(int size)
- {
- // TODO: Fill with random data? Make readonly?
- return new MemoryStream(new byte[size]);
- }
+ // TODO: Fill with random data? Make readonly?
+ return new MemoryStream(new byte[size]);
+ }
- [Fact]
- public void FileBufferingReadStream_Properties_ExpectedValues()
+ [Fact]
+ public void FileBufferingReadStream_Properties_ExpectedValues()
+ {
+ var inner = MakeStream(1024 * 2);
+ using (var stream = new FileBufferingReadStream(inner, 1024, null, Directory.GetCurrentDirectory()))
{
- var inner = MakeStream(1024 * 2);
- using (var stream = new FileBufferingReadStream(inner, 1024, null, Directory.GetCurrentDirectory()))
- {
- Assert.True(stream.CanRead);
- Assert.True(stream.CanSeek);
- Assert.False(stream.CanWrite);
- Assert.Equal(0, stream.Length); // Nothing buffered yet
- Assert.Equal(0, stream.Position);
- Assert.True(stream.InMemory);
- Assert.Null(stream.TempFileName);
- }
+ Assert.True(stream.CanRead);
+ Assert.True(stream.CanSeek);
+ Assert.False(stream.CanWrite);
+ Assert.Equal(0, stream.Length); // Nothing buffered yet
+ Assert.Equal(0, stream.Position);
+ Assert.True(stream.InMemory);
+ Assert.Null(stream.TempFileName);
}
+ }
- [Fact]
- public void FileBufferingReadStream_SyncReadUnderThreshold_DoesntCreateFile()
+ [Fact]
+ public void FileBufferingReadStream_SyncReadUnderThreshold_DoesntCreateFile()
+ {
+ var inner = MakeStream(1024 * 2);
+ using (var stream = new FileBufferingReadStream(inner, 1024 * 3, null, Directory.GetCurrentDirectory()))
{
- var inner = MakeStream(1024 * 2);
- using (var stream = new FileBufferingReadStream(inner, 1024 * 3, null, Directory.GetCurrentDirectory()))
- {
- var bytes = new byte[1000];
- var read0 = stream.Read(bytes, 0, bytes.Length);
- Assert.Equal(bytes.Length, read0);
- Assert.Equal(read0, stream.Length);
- Assert.Equal(read0, stream.Position);
- Assert.True(stream.InMemory);
- Assert.Null(stream.TempFileName);
-
- var read1 = stream.Read(bytes, 0, bytes.Length);
- Assert.Equal(bytes.Length, read1);
- Assert.Equal(read0 + read1, stream.Length);
- Assert.Equal(read0 + read1, stream.Position);
- Assert.True(stream.InMemory);
- Assert.Null(stream.TempFileName);
-
- var read2 = stream.Read(bytes, 0, bytes.Length);
- Assert.Equal(inner.Length - read0 - read1, read2);
- Assert.Equal(read0 + read1 + read2, stream.Length);
- Assert.Equal(read0 + read1 + read2, stream.Position);
- Assert.True(stream.InMemory);
- Assert.Null(stream.TempFileName);
-
- var read3 = stream.Read(bytes, 0, bytes.Length);
- Assert.Equal(0, read3);
- }
+ var bytes = new byte[1000];
+ var read0 = stream.Read(bytes, 0, bytes.Length);
+ Assert.Equal(bytes.Length, read0);
+ Assert.Equal(read0, stream.Length);
+ Assert.Equal(read0, stream.Position);
+ Assert.True(stream.InMemory);
+ Assert.Null(stream.TempFileName);
+
+ var read1 = stream.Read(bytes, 0, bytes.Length);
+ Assert.Equal(bytes.Length, read1);
+ Assert.Equal(read0 + read1, stream.Length);
+ Assert.Equal(read0 + read1, stream.Position);
+ Assert.True(stream.InMemory);
+ Assert.Null(stream.TempFileName);
+
+ var read2 = stream.Read(bytes, 0, bytes.Length);
+ Assert.Equal(inner.Length - read0 - read1, read2);
+ Assert.Equal(read0 + read1 + read2, stream.Length);
+ Assert.Equal(read0 + read1 + read2, stream.Position);
+ Assert.True(stream.InMemory);
+ Assert.Null(stream.TempFileName);
+
+ var read3 = stream.Read(bytes, 0, bytes.Length);
+ Assert.Equal(0, read3);
}
+ }
- [Fact]
- public void FileBufferingReadStream_SyncReadOverThreshold_CreatesFile()
+ [Fact]
+ public void FileBufferingReadStream_SyncReadOverThreshold_CreatesFile()
+ {
+ var inner = MakeStream(1024 * 2);
+ string tempFileName;
+ using (var stream = new FileBufferingReadStream(inner, 1024, null, GetCurrentDirectory()))
{
- var inner = MakeStream(1024 * 2);
- string tempFileName;
- using (var stream = new FileBufferingReadStream(inner, 1024, null, GetCurrentDirectory()))
- {
- var bytes = new byte[1000];
- var read0 = stream.Read(bytes, 0, bytes.Length);
- Assert.Equal(bytes.Length, read0);
- Assert.Equal(read0, stream.Length);
- Assert.Equal(read0, stream.Position);
- Assert.True(stream.InMemory);
- Assert.Null(stream.TempFileName);
-
- var read1 = stream.Read(bytes, 0, bytes.Length);
- Assert.Equal(bytes.Length, read1);
- Assert.Equal(read0 + read1, stream.Length);
- Assert.Equal(read0 + read1, stream.Position);
- Assert.False(stream.InMemory);
- Assert.NotNull(stream.TempFileName);
- tempFileName = stream.TempFileName!;
- Assert.True(File.Exists(tempFileName));
-
- var read2 = stream.Read(bytes, 0, bytes.Length);
- Assert.Equal(inner.Length - read0 - read1, read2);
- Assert.Equal(read0 + read1 + read2, stream.Length);
- Assert.Equal(read0 + read1 + read2, stream.Position);
- Assert.False(stream.InMemory);
- Assert.NotNull(stream.TempFileName);
- Assert.True(File.Exists(tempFileName));
-
- var read3 = stream.Read(bytes, 0, bytes.Length);
- Assert.Equal(0, read3);
- }
-
- Assert.False(File.Exists(tempFileName));
+ var bytes = new byte[1000];
+ var read0 = stream.Read(bytes, 0, bytes.Length);
+ Assert.Equal(bytes.Length, read0);
+ Assert.Equal(read0, stream.Length);
+ Assert.Equal(read0, stream.Position);
+ Assert.True(stream.InMemory);
+ Assert.Null(stream.TempFileName);
+
+ var read1 = stream.Read(bytes, 0, bytes.Length);
+ Assert.Equal(bytes.Length, read1);
+ Assert.Equal(read0 + read1, stream.Length);
+ Assert.Equal(read0 + read1, stream.Position);
+ Assert.False(stream.InMemory);
+ Assert.NotNull(stream.TempFileName);
+ tempFileName = stream.TempFileName!;
+ Assert.True(File.Exists(tempFileName));
+
+ var read2 = stream.Read(bytes, 0, bytes.Length);
+ Assert.Equal(inner.Length - read0 - read1, read2);
+ Assert.Equal(read0 + read1 + read2, stream.Length);
+ Assert.Equal(read0 + read1 + read2, stream.Position);
+ Assert.False(stream.InMemory);
+ Assert.NotNull(stream.TempFileName);
+ Assert.True(File.Exists(tempFileName));
+
+ var read3 = stream.Read(bytes, 0, bytes.Length);
+ Assert.Equal(0, read3);
}
- [Fact]
- public void FileBufferingReadStream_SyncReadWithInMemoryLimit_EnforcesLimit()
+ Assert.False(File.Exists(tempFileName));
+ }
+
+ [Fact]
+ public void FileBufferingReadStream_SyncReadWithInMemoryLimit_EnforcesLimit()
+ {
+ var inner = MakeStream(1024 * 2);
+ using (var stream = new FileBufferingReadStream(inner, 1024, 900, Directory.GetCurrentDirectory()))
{
- var inner = MakeStream(1024 * 2);
- using (var stream = new FileBufferingReadStream(inner, 1024, 900, Directory.GetCurrentDirectory()))
- {
- var bytes = new byte[500];
- var read0 = stream.Read(bytes, 0, bytes.Length);
- Assert.Equal(bytes.Length, read0);
- Assert.Equal(read0, stream.Length);
- Assert.Equal(read0, stream.Position);
- Assert.True(stream.InMemory);
- Assert.Null(stream.TempFileName);
-
- var exception = Assert.Throws<IOException>(() => stream.Read(bytes, 0, bytes.Length));
- Assert.Equal("Buffer limit exceeded.", exception.Message);
- Assert.True(stream.InMemory);
- Assert.Null(stream.TempFileName);
- Assert.False(File.Exists(stream.TempFileName));
- }
+ var bytes = new byte[500];
+ var read0 = stream.Read(bytes, 0, bytes.Length);
+ Assert.Equal(bytes.Length, read0);
+ Assert.Equal(read0, stream.Length);
+ Assert.Equal(read0, stream.Position);
+ Assert.True(stream.InMemory);
+ Assert.Null(stream.TempFileName);
+
+ var exception = Assert.Throws<IOException>(() => stream.Read(bytes, 0, bytes.Length));
+ Assert.Equal("Buffer limit exceeded.", exception.Message);
+ Assert.True(stream.InMemory);
+ Assert.Null(stream.TempFileName);
+ Assert.False(File.Exists(stream.TempFileName));
}
+ }
- [Fact]
- public void FileBufferingReadStream_SyncReadWithOnDiskLimit_EnforcesLimit()
+ [Fact]
+ public void FileBufferingReadStream_SyncReadWithOnDiskLimit_EnforcesLimit()
+ {
+ var inner = MakeStream(1024 * 2);
+ string tempFileName;
+ using (var stream = new FileBufferingReadStream(inner, 512, 1024, GetCurrentDirectory()))
{
- var inner = MakeStream(1024 * 2);
- string tempFileName;
- using (var stream = new FileBufferingReadStream(inner, 512, 1024, GetCurrentDirectory()))
- {
- var bytes = new byte[500];
- var read0 = stream.Read(bytes, 0, bytes.Length);
- Assert.Equal(bytes.Length, read0);
- Assert.Equal(read0, stream.Length);
- Assert.Equal(read0, stream.Position);
- Assert.True(stream.InMemory);
- Assert.Null(stream.TempFileName);
-
- var read1 = stream.Read(bytes, 0, bytes.Length);
- Assert.Equal(bytes.Length, read1);
- Assert.Equal(read0 + read1, stream.Length);
- Assert.Equal(read0 + read1, stream.Position);
- Assert.False(stream.InMemory);
- Assert.NotNull(stream.TempFileName);
- tempFileName = stream.TempFileName!;
- Assert.True(File.Exists(tempFileName));
-
- var exception = Assert.Throws<IOException>(() => stream.Read(bytes, 0, bytes.Length));
- Assert.Equal("Buffer limit exceeded.", exception.Message);
- Assert.False(stream.InMemory);
- Assert.NotNull(stream.TempFileName);
- }
-
- Assert.False(File.Exists(tempFileName));
+ var bytes = new byte[500];
+ var read0 = stream.Read(bytes, 0, bytes.Length);
+ Assert.Equal(bytes.Length, read0);
+ Assert.Equal(read0, stream.Length);
+ Assert.Equal(read0, stream.Position);
+ Assert.True(stream.InMemory);
+ Assert.Null(stream.TempFileName);
+
+ var read1 = stream.Read(bytes, 0, bytes.Length);
+ Assert.Equal(bytes.Length, read1);
+ Assert.Equal(read0 + read1, stream.Length);
+ Assert.Equal(read0 + read1, stream.Position);
+ Assert.False(stream.InMemory);
+ Assert.NotNull(stream.TempFileName);
+ tempFileName = stream.TempFileName!;
+ Assert.True(File.Exists(tempFileName));
+
+ var exception = Assert.Throws<IOException>(() => stream.Read(bytes, 0, bytes.Length));
+ Assert.Equal("Buffer limit exceeded.", exception.Message);
+ Assert.False(stream.InMemory);
+ Assert.NotNull(stream.TempFileName);
}
- ///////////////////
+ Assert.False(File.Exists(tempFileName));
+ }
+
+ ///////////////////
- [Fact]
- public async Task FileBufferingReadStream_AsyncReadUnderThreshold_DoesntCreateFile()
+ [Fact]
+ public async Task FileBufferingReadStream_AsyncReadUnderThreshold_DoesntCreateFile()
+ {
+ var inner = MakeStream(1024 * 2);
+ using (var stream = new FileBufferingReadStream(inner, 1024 * 3, null, Directory.GetCurrentDirectory()))
{
- var inner = MakeStream(1024 * 2);
- using (var stream = new FileBufferingReadStream(inner, 1024 * 3, null, Directory.GetCurrentDirectory()))
- {
- var bytes = new byte[1000];
- var read0 = await stream.ReadAsync(bytes, 0, bytes.Length);
- Assert.Equal(bytes.Length, read0);
- Assert.Equal(read0, stream.Length);
- Assert.Equal(read0, stream.Position);
- Assert.True(stream.InMemory);
- Assert.Null(stream.TempFileName);
-
- var read1 = await stream.ReadAsync(bytes, 0, bytes.Length);
- Assert.Equal(bytes.Length, read1);
- Assert.Equal(read0 + read1, stream.Length);
- Assert.Equal(read0 + read1, stream.Position);
- Assert.True(stream.InMemory);
- Assert.Null(stream.TempFileName);
-
- var read2 = await stream.ReadAsync(bytes, 0, bytes.Length);
- Assert.Equal(inner.Length - read0 - read1, read2);
- Assert.Equal(read0 + read1 + read2, stream.Length);
- Assert.Equal(read0 + read1 + read2, stream.Position);
- Assert.True(stream.InMemory);
- Assert.Null(stream.TempFileName);
-
- var read3 = await stream.ReadAsync(bytes, 0, bytes.Length);
- Assert.Equal(0, read3);
- }
+ var bytes = new byte[1000];
+ var read0 = await stream.ReadAsync(bytes, 0, bytes.Length);
+ Assert.Equal(bytes.Length, read0);
+ Assert.Equal(read0, stream.Length);
+ Assert.Equal(read0, stream.Position);
+ Assert.True(stream.InMemory);
+ Assert.Null(stream.TempFileName);
+
+ var read1 = await stream.ReadAsync(bytes, 0, bytes.Length);
+ Assert.Equal(bytes.Length, read1);
+ Assert.Equal(read0 + read1, stream.Length);
+ Assert.Equal(read0 + read1, stream.Position);
+ Assert.True(stream.InMemory);
+ Assert.Null(stream.TempFileName);
+
+ var read2 = await stream.ReadAsync(bytes, 0, bytes.Length);
+ Assert.Equal(inner.Length - read0 - read1, read2);
+ Assert.Equal(read0 + read1 + read2, stream.Length);
+ Assert.Equal(read0 + read1 + read2, stream.Position);
+ Assert.True(stream.InMemory);
+ Assert.Null(stream.TempFileName);
+
+ var read3 = await stream.ReadAsync(bytes, 0, bytes.Length);
+ Assert.Equal(0, read3);
}
+ }
- [Fact]
- public async Task FileBufferingReadStream_AsyncReadOverThreshold_CreatesFile()
+ [Fact]
+ public async Task FileBufferingReadStream_AsyncReadOverThreshold_CreatesFile()
+ {
+ var inner = MakeStream(1024 * 2);
+ string tempFileName;
+ using (var stream = new FileBufferingReadStream(inner, 1024, null, GetCurrentDirectory()))
{
- var inner = MakeStream(1024 * 2);
- string tempFileName;
- using (var stream = new FileBufferingReadStream(inner, 1024, null, GetCurrentDirectory()))
- {
- var bytes = new byte[1000];
- var read0 = await stream.ReadAsync(bytes, 0, bytes.Length);
- Assert.Equal(bytes.Length, read0);
- Assert.Equal(read0, stream.Length);
- Assert.Equal(read0, stream.Position);
- Assert.True(stream.InMemory);
- Assert.Null(stream.TempFileName);
-
- var read1 = await stream.ReadAsync(bytes, 0, bytes.Length);
- Assert.Equal(bytes.Length, read1);
- Assert.Equal(read0 + read1, stream.Length);
- Assert.Equal(read0 + read1, stream.Position);
- Assert.False(stream.InMemory);
- Assert.NotNull(stream.TempFileName);
- tempFileName = stream.TempFileName!;
- Assert.True(File.Exists(tempFileName));
-
- var read2 = await stream.ReadAsync(bytes, 0, bytes.Length);
- Assert.Equal(inner.Length - read0 - read1, read2);
- Assert.Equal(read0 + read1 + read2, stream.Length);
- Assert.Equal(read0 + read1 + read2, stream.Position);
- Assert.False(stream.InMemory);
- Assert.NotNull(stream.TempFileName);
- Assert.True(File.Exists(tempFileName));
-
- var read3 = await stream.ReadAsync(bytes, 0, bytes.Length);
- Assert.Equal(0, read3);
- }
-
- Assert.False(File.Exists(tempFileName));
+ var bytes = new byte[1000];
+ var read0 = await stream.ReadAsync(bytes, 0, bytes.Length);
+ Assert.Equal(bytes.Length, read0);
+ Assert.Equal(read0, stream.Length);
+ Assert.Equal(read0, stream.Position);
+ Assert.True(stream.InMemory);
+ Assert.Null(stream.TempFileName);
+
+ var read1 = await stream.ReadAsync(bytes, 0, bytes.Length);
+ Assert.Equal(bytes.Length, read1);
+ Assert.Equal(read0 + read1, stream.Length);
+ Assert.Equal(read0 + read1, stream.Position);
+ Assert.False(stream.InMemory);
+ Assert.NotNull(stream.TempFileName);
+ tempFileName = stream.TempFileName!;
+ Assert.True(File.Exists(tempFileName));
+
+ var read2 = await stream.ReadAsync(bytes, 0, bytes.Length);
+ Assert.Equal(inner.Length - read0 - read1, read2);
+ Assert.Equal(read0 + read1 + read2, stream.Length);
+ Assert.Equal(read0 + read1 + read2, stream.Position);
+ Assert.False(stream.InMemory);
+ Assert.NotNull(stream.TempFileName);
+ Assert.True(File.Exists(tempFileName));
+
+ var read3 = await stream.ReadAsync(bytes, 0, bytes.Length);
+ Assert.Equal(0, read3);
}
- [Fact]
- public async Task FileBufferingReadStream_AsyncReadWithInMemoryLimit_EnforcesLimit()
+ Assert.False(File.Exists(tempFileName));
+ }
+
+ [Fact]
+ public async Task FileBufferingReadStream_AsyncReadWithInMemoryLimit_EnforcesLimit()
+ {
+ var inner = MakeStream(1024 * 2);
+ using (var stream = new FileBufferingReadStream(inner, 1024, 900, Directory.GetCurrentDirectory()))
{
- var inner = MakeStream(1024 * 2);
- using (var stream = new FileBufferingReadStream(inner, 1024, 900, Directory.GetCurrentDirectory()))
- {
- var bytes = new byte[500];
- var read0 = await stream.ReadAsync(bytes, 0, bytes.Length);
- Assert.Equal(bytes.Length, read0);
- Assert.Equal(read0, stream.Length);
- Assert.Equal(read0, stream.Position);
- Assert.True(stream.InMemory);
- Assert.Null(stream.TempFileName);
-
- var exception = await Assert.ThrowsAsync<IOException>(() => stream.ReadAsync(bytes, 0, bytes.Length));
- Assert.Equal("Buffer limit exceeded.", exception.Message);
- Assert.True(stream.InMemory);
- Assert.Null(stream.TempFileName);
- Assert.False(File.Exists(stream.TempFileName));
- }
+ var bytes = new byte[500];
+ var read0 = await stream.ReadAsync(bytes, 0, bytes.Length);
+ Assert.Equal(bytes.Length, read0);
+ Assert.Equal(read0, stream.Length);
+ Assert.Equal(read0, stream.Position);
+ Assert.True(stream.InMemory);
+ Assert.Null(stream.TempFileName);
+
+ var exception = await Assert.ThrowsAsync<IOException>(() => stream.ReadAsync(bytes, 0, bytes.Length));
+ Assert.Equal("Buffer limit exceeded.", exception.Message);
+ Assert.True(stream.InMemory);
+ Assert.Null(stream.TempFileName);
+ Assert.False(File.Exists(stream.TempFileName));
}
+ }
- [Fact]
- public async Task FileBufferingReadStream_AsyncReadWithOnDiskLimit_EnforcesLimit()
+ [Fact]
+ public async Task FileBufferingReadStream_AsyncReadWithOnDiskLimit_EnforcesLimit()
+ {
+ var inner = MakeStream(1024 * 2);
+ string tempFileName;
+ using (var stream = new FileBufferingReadStream(inner, 512, 1024, GetCurrentDirectory()))
{
- var inner = MakeStream(1024 * 2);
- string tempFileName;
- using (var stream = new FileBufferingReadStream(inner, 512, 1024, GetCurrentDirectory()))
- {
- var bytes = new byte[500];
- var read0 = await stream.ReadAsync(bytes, 0, bytes.Length);
- Assert.Equal(bytes.Length, read0);
- Assert.Equal(read0, stream.Length);
- Assert.Equal(read0, stream.Position);
- Assert.True(stream.InMemory);
- Assert.Null(stream.TempFileName);
-
- var read1 = await stream.ReadAsync(bytes, 0, bytes.Length);
- Assert.Equal(bytes.Length, read1);
- Assert.Equal(read0 + read1, stream.Length);
- Assert.Equal(read0 + read1, stream.Position);
- Assert.False(stream.InMemory);
- Assert.NotNull(stream.TempFileName);
- tempFileName = stream.TempFileName!;
- Assert.True(File.Exists(tempFileName));
-
- var exception = await Assert.ThrowsAsync<IOException>(() => stream.ReadAsync(bytes, 0, bytes.Length));
- Assert.Equal("Buffer limit exceeded.", exception.Message);
- Assert.False(stream.InMemory);
- Assert.NotNull(stream.TempFileName);
- }
-
- Assert.False(File.Exists(tempFileName));
+ var bytes = new byte[500];
+ var read0 = await stream.ReadAsync(bytes, 0, bytes.Length);
+ Assert.Equal(bytes.Length, read0);
+ Assert.Equal(read0, stream.Length);
+ Assert.Equal(read0, stream.Position);
+ Assert.True(stream.InMemory);
+ Assert.Null(stream.TempFileName);
+
+ var read1 = await stream.ReadAsync(bytes, 0, bytes.Length);
+ Assert.Equal(bytes.Length, read1);
+ Assert.Equal(read0 + read1, stream.Length);
+ Assert.Equal(read0 + read1, stream.Position);
+ Assert.False(stream.InMemory);
+ Assert.NotNull(stream.TempFileName);
+ tempFileName = stream.TempFileName!;
+ Assert.True(File.Exists(tempFileName));
+
+ var exception = await Assert.ThrowsAsync<IOException>(() => stream.ReadAsync(bytes, 0, bytes.Length));
+ Assert.Equal("Buffer limit exceeded.", exception.Message);
+ Assert.False(stream.InMemory);
+ Assert.NotNull(stream.TempFileName);
}
- [Fact]
- public void FileBufferingReadStream_UsingMemoryStream_RentsAndReturnsRentedBuffer_WhenCopyingFromMemoryStreamDuringRead()
+ Assert.False(File.Exists(tempFileName));
+ }
+
+ [Fact]
+ public void FileBufferingReadStream_UsingMemoryStream_RentsAndReturnsRentedBuffer_WhenCopyingFromMemoryStreamDuringRead()
+ {
+ var inner = MakeStream(1024 * 1024 + 25);
+ string tempFileName;
+ var arrayPool = new Mock<ArrayPool<byte>>();
+ arrayPool.Setup(p => p.Rent(It.IsAny<int>()))
+ .Returns((int m) => ArrayPool<byte>.Shared.Rent(m));
+ arrayPool.Setup(p => p.Return(It.IsAny<byte[]>(), It.IsAny<bool>()))
+ .Callback((byte[] bytes, bool clear) => ArrayPool<byte>.Shared.Return(bytes, clear));
+
+ using (var stream = new FileBufferingReadStream(inner, 1024 * 1024 + 1, 2 * 1024 * 1024, GetCurrentDirectory(), arrayPool.Object))
{
- var inner = MakeStream(1024 * 1024 + 25);
- string tempFileName;
- var arrayPool = new Mock<ArrayPool<byte>>();
- arrayPool.Setup(p => p.Rent(It.IsAny<int>()))
- .Returns((int m) => ArrayPool<byte>.Shared.Rent(m));
- arrayPool.Setup(p => p.Return(It.IsAny<byte[]>(), It.IsAny<bool>()))
- .Callback((byte[] bytes, bool clear) => ArrayPool<byte>.Shared.Return(bytes, clear));
-
- using (var stream = new FileBufferingReadStream(inner, 1024 * 1024 + 1, 2 * 1024 * 1024, GetCurrentDirectory(), arrayPool.Object))
- {
- arrayPool.Verify(v => v.Rent(It.IsAny<int>()), Times.Never());
-
- stream.Read(new byte[1024 * 1024]);
- Assert.False(File.Exists(stream.TempFileName), "tempFile should not be created as yet");
-
- stream.Read(new byte[4]);
- Assert.True(File.Exists(stream.TempFileName), "tempFile should be created");
- tempFileName = stream.TempFileName!;
-
- arrayPool.Verify(v => v.Rent(It.IsAny<int>()), Times.Once());
- arrayPool.Verify(v => v.Return(It.IsAny<byte[]>(), It.IsAny<bool>()), Times.Once());
- }
-
- Assert.False(File.Exists(tempFileName));
+ arrayPool.Verify(v => v.Rent(It.IsAny<int>()), Times.Never());
+
+ stream.Read(new byte[1024 * 1024]);
+ Assert.False(File.Exists(stream.TempFileName), "tempFile should not be created as yet");
+
+ stream.Read(new byte[4]);
+ Assert.True(File.Exists(stream.TempFileName), "tempFile should be created");
+ tempFileName = stream.TempFileName!;
+
+ arrayPool.Verify(v => v.Rent(It.IsAny<int>()), Times.Once());
+ arrayPool.Verify(v => v.Return(It.IsAny<byte[]>(), It.IsAny<bool>()), Times.Once());
}
- [Fact]
- public async Task FileBufferingReadStream_UsingMemoryStream_RentsAndReturnsRentedBuffer_WhenCopyingFromMemoryStreamDuringReadAsync()
+ Assert.False(File.Exists(tempFileName));
+ }
+
+ [Fact]
+ public async Task FileBufferingReadStream_UsingMemoryStream_RentsAndReturnsRentedBuffer_WhenCopyingFromMemoryStreamDuringReadAsync()
+ {
+ var inner = MakeStream(1024 * 1024 + 25);
+ string tempFileName;
+ var arrayPool = new Mock<ArrayPool<byte>>();
+ arrayPool.Setup(p => p.Rent(It.IsAny<int>()))
+ .Returns((int m) => ArrayPool<byte>.Shared.Rent(m));
+ arrayPool.Setup(p => p.Return(It.IsAny<byte[]>(), It.IsAny<bool>()))
+ .Callback((byte[] bytes, bool clear) => ArrayPool<byte>.Shared.Return(bytes, clear));
+
+ using (var stream = new FileBufferingReadStream(inner, 1024 * 1024 + 1, 2 * 1024 * 1024, GetCurrentDirectory(), arrayPool.Object))
{
- var inner = MakeStream(1024 * 1024 + 25);
- string tempFileName;
- var arrayPool = new Mock<ArrayPool<byte>>();
- arrayPool.Setup(p => p.Rent(It.IsAny<int>()))
- .Returns((int m) => ArrayPool<byte>.Shared.Rent(m));
- arrayPool.Setup(p => p.Return(It.IsAny<byte[]>(), It.IsAny<bool>()))
- .Callback((byte[] bytes, bool clear) => ArrayPool<byte>.Shared.Return(bytes, clear));
-
- using (var stream = new FileBufferingReadStream(inner, 1024 * 1024 + 1, 2 * 1024 * 1024, GetCurrentDirectory(), arrayPool.Object))
- {
- arrayPool.Verify(v => v.Rent(It.IsAny<int>()), Times.Never());
-
- await stream.ReadAsync(new byte[1024 * 1024]);
- Assert.False(File.Exists(stream.TempFileName), "tempFile should not be created as yet");
-
- await stream.ReadAsync(new byte[4]);
- Assert.True(File.Exists(stream.TempFileName), "tempFile should be created");
- tempFileName = stream.TempFileName!;
-
- arrayPool.Verify(v => v.Rent(It.IsAny<int>()), Times.Once());
- arrayPool.Verify(v => v.Return(It.IsAny<byte[]>(), It.IsAny<bool>()), Times.Once());
- }
-
- Assert.False(File.Exists(tempFileName));
+ arrayPool.Verify(v => v.Rent(It.IsAny<int>()), Times.Never());
+
+ await stream.ReadAsync(new byte[1024 * 1024]);
+ Assert.False(File.Exists(stream.TempFileName), "tempFile should not be created as yet");
+
+ await stream.ReadAsync(new byte[4]);
+ Assert.True(File.Exists(stream.TempFileName), "tempFile should be created");
+ tempFileName = stream.TempFileName!;
+
+ arrayPool.Verify(v => v.Rent(It.IsAny<int>()), Times.Once());
+ arrayPool.Verify(v => v.Return(It.IsAny<byte[]>(), It.IsAny<bool>()), Times.Once());
}
- [Fact]
- public async Task CopyToAsyncWorks()
- {
- // 4K is the lower bound on buffer sizes
- var bufferSize = 4096;
- var mostExpectedWrites = 8;
- var data = Enumerable.Range(0, bufferSize * mostExpectedWrites).Select(b => (byte)b).ToArray();
- var inner = new MemoryStream(data);
+ Assert.False(File.Exists(tempFileName));
+ }
- using var stream = new FileBufferingReadStream(inner, 1024 * 1024, bufferLimit: null, GetCurrentDirectory());
+ [Fact]
+ public async Task CopyToAsyncWorks()
+ {
+ // 4K is the lower bound on buffer sizes
+ var bufferSize = 4096;
+ var mostExpectedWrites = 8;
+ var data = Enumerable.Range(0, bufferSize * mostExpectedWrites).Select(b => (byte)b).ToArray();
+ var inner = new MemoryStream(data);
- var withoutBufferMs = new NumberOfWritesMemoryStream();
- await stream.CopyToAsync(withoutBufferMs);
+ using var stream = new FileBufferingReadStream(inner, 1024 * 1024, bufferLimit: null, GetCurrentDirectory());
- var withBufferMs = new NumberOfWritesMemoryStream();
- stream.Position = 0;
- await stream.CopyToAsync(withBufferMs);
+ var withoutBufferMs = new NumberOfWritesMemoryStream();
+ await stream.CopyToAsync(withoutBufferMs);
- Assert.Equal(data, withoutBufferMs.ToArray());
- Assert.Equal(mostExpectedWrites, withoutBufferMs.NumberOfWrites);
- Assert.Equal(data, withBufferMs.ToArray());
- Assert.InRange(withBufferMs.NumberOfWrites, 1, mostExpectedWrites);
- }
+ var withBufferMs = new NumberOfWritesMemoryStream();
+ stream.Position = 0;
+ await stream.CopyToAsync(withBufferMs);
- [Fact]
- public async Task CopyToAsyncWorksWithFileThreshold()
- {
- // 4K is the lower bound on buffer sizes
- var bufferSize = 4096;
- var mostExpectedWrites = 8;
- var data = Enumerable.Range(0, bufferSize * mostExpectedWrites).Select(b => (byte)b).Reverse().ToArray();
- var inner = new MemoryStream(data);
+ Assert.Equal(data, withoutBufferMs.ToArray());
+ Assert.Equal(mostExpectedWrites, withoutBufferMs.NumberOfWrites);
+ Assert.Equal(data, withBufferMs.ToArray());
+ Assert.InRange(withBufferMs.NumberOfWrites, 1, mostExpectedWrites);
+ }
- using var stream = new FileBufferingReadStream(inner, 100, bufferLimit: null, GetCurrentDirectory());
+ [Fact]
+ public async Task CopyToAsyncWorksWithFileThreshold()
+ {
+ // 4K is the lower bound on buffer sizes
+ var bufferSize = 4096;
+ var mostExpectedWrites = 8;
+ var data = Enumerable.Range(0, bufferSize * mostExpectedWrites).Select(b => (byte)b).Reverse().ToArray();
+ var inner = new MemoryStream(data);
- var withoutBufferMs = new NumberOfWritesMemoryStream();
- await stream.CopyToAsync(withoutBufferMs);
+ using var stream = new FileBufferingReadStream(inner, 100, bufferLimit: null, GetCurrentDirectory());
- var withBufferMs = new NumberOfWritesMemoryStream();
- stream.Position = 0;
- await stream.CopyToAsync(withBufferMs);
+ var withoutBufferMs = new NumberOfWritesMemoryStream();
+ await stream.CopyToAsync(withoutBufferMs);
- Assert.Equal(data, withoutBufferMs.ToArray());
- Assert.Equal(mostExpectedWrites, withoutBufferMs.NumberOfWrites);
- Assert.Equal(data, withBufferMs.ToArray());
- Assert.InRange(withBufferMs.NumberOfWrites, 1, mostExpectedWrites);
- }
+ var withBufferMs = new NumberOfWritesMemoryStream();
+ stream.Position = 0;
+ await stream.CopyToAsync(withBufferMs);
- [Fact]
- public async Task ReadAsyncThenCopyToAsyncWorks()
- {
- var data = Enumerable.Range(0, 1024).Select(b => (byte)b).ToArray();
- var inner = new MemoryStream(data);
+ Assert.Equal(data, withoutBufferMs.ToArray());
+ Assert.Equal(mostExpectedWrites, withoutBufferMs.NumberOfWrites);
+ Assert.Equal(data, withBufferMs.ToArray());
+ Assert.InRange(withBufferMs.NumberOfWrites, 1, mostExpectedWrites);
+ }
- using var stream = new FileBufferingReadStream(inner, 1024 * 1024, bufferLimit: null, GetCurrentDirectory());
+ [Fact]
+ public async Task ReadAsyncThenCopyToAsyncWorks()
+ {
+ var data = Enumerable.Range(0, 1024).Select(b => (byte)b).ToArray();
+ var inner = new MemoryStream(data);
- var withoutBufferMs = new MemoryStream();
- var buffer = new byte[100];
- await stream.ReadAsync(buffer);
- await stream.CopyToAsync(withoutBufferMs);
+ using var stream = new FileBufferingReadStream(inner, 1024 * 1024, bufferLimit: null, GetCurrentDirectory());
- Assert.Equal(data.AsMemory(0, 100).ToArray(), buffer);
- Assert.Equal(data.AsMemory(100).ToArray(), withoutBufferMs.ToArray());
- }
+ var withoutBufferMs = new MemoryStream();
+ var buffer = new byte[100];
+ await stream.ReadAsync(buffer);
+ await stream.CopyToAsync(withoutBufferMs);
- [Fact]
- public async Task ReadThenCopyToAsyncWorks()
- {
- var data = Enumerable.Range(0, 1024).Select(b => (byte)b).ToArray();
- var inner = new MemoryStream(data);
+ Assert.Equal(data.AsMemory(0, 100).ToArray(), buffer);
+ Assert.Equal(data.AsMemory(100).ToArray(), withoutBufferMs.ToArray());
+ }
- using var stream = new FileBufferingReadStream(inner, 1024 * 1024, bufferLimit: null, GetCurrentDirectory());
+ [Fact]
+ public async Task ReadThenCopyToAsyncWorks()
+ {
+ var data = Enumerable.Range(0, 1024).Select(b => (byte)b).ToArray();
+ var inner = new MemoryStream(data);
- var withoutBufferMs = new MemoryStream();
- var buffer = new byte[100];
- var read = stream.Read(buffer);
- await stream.CopyToAsync(withoutBufferMs);
+ using var stream = new FileBufferingReadStream(inner, 1024 * 1024, bufferLimit: null, GetCurrentDirectory());
- Assert.Equal(100, read);
- Assert.Equal(data.AsMemory(0, read).ToArray(), buffer);
- Assert.Equal(data.AsMemory(read).ToArray(), withoutBufferMs.ToArray());
- }
+ var withoutBufferMs = new MemoryStream();
+ var buffer = new byte[100];
+ var read = stream.Read(buffer);
+ await stream.CopyToAsync(withoutBufferMs);
- [Fact]
- public async Task ReadThenSeekThenCopyToAsyncWorks()
- {
- var data = Enumerable.Range(0, 1024).Select(b => (byte)b).ToArray();
- var inner = new MemoryStream(data);
+ Assert.Equal(100, read);
+ Assert.Equal(data.AsMemory(0, read).ToArray(), buffer);
+ Assert.Equal(data.AsMemory(read).ToArray(), withoutBufferMs.ToArray());
+ }
- using var stream = new FileBufferingReadStream(inner, 1024 * 1024, bufferLimit: null, GetCurrentDirectory());
+ [Fact]
+ public async Task ReadThenSeekThenCopyToAsyncWorks()
+ {
+ var data = Enumerable.Range(0, 1024).Select(b => (byte)b).ToArray();
+ var inner = new MemoryStream(data);
- var withoutBufferMs = new MemoryStream();
- var buffer = new byte[100];
- var read = stream.Read(buffer);
- stream.Position = 0;
- await stream.CopyToAsync(withoutBufferMs);
+ using var stream = new FileBufferingReadStream(inner, 1024 * 1024, bufferLimit: null, GetCurrentDirectory());
- Assert.Equal(100, read);
- Assert.Equal(data.AsMemory(0, read).ToArray(), buffer);
- Assert.Equal(data.ToArray(), withoutBufferMs.ToArray());
- }
+ var withoutBufferMs = new MemoryStream();
+ var buffer = new byte[100];
+ var read = stream.Read(buffer);
+ stream.Position = 0;
+ await stream.CopyToAsync(withoutBufferMs);
- [Fact]
- public void PartialReadThenSeekReplaysBuffer()
- {
- var data = Enumerable.Range(0, 1024).Select(b => (byte)b).ToArray();
- var inner = new MemoryStream(data);
-
- using var stream = new FileBufferingReadStream(inner, 1024 * 1024, bufferLimit: null, GetCurrentDirectory());
-
- var withoutBufferMs = new MemoryStream();
- var buffer = new byte[100];
- var read1 = stream.Read(buffer);
- stream.Position = 0;
- var buffer2 = new byte[200];
- var read2 = stream.Read(buffer2);
- Assert.Equal(100, read1);
- Assert.Equal(100, read2);
- Assert.Equal(data.AsMemory(0, read1).ToArray(), buffer);
- Assert.Equal(data.AsMemory(0, read2).ToArray(), buffer2.AsMemory(0, read2).ToArray());
- }
+ Assert.Equal(100, read);
+ Assert.Equal(data.AsMemory(0, read).ToArray(), buffer);
+ Assert.Equal(data.ToArray(), withoutBufferMs.ToArray());
+ }
- [Fact]
- public async Task PartialReadAsyncThenSeekReplaysBuffer()
- {
- var data = Enumerable.Range(0, 1024).Select(b => (byte)b).ToArray();
- var inner = new MemoryStream(data);
-
- using var stream = new FileBufferingReadStream(inner, 1024 * 1024, bufferLimit: null, GetCurrentDirectory());
-
- var withoutBufferMs = new MemoryStream();
- var buffer = new byte[100];
- var read1 = await stream.ReadAsync(buffer);
- stream.Position = 0;
- var buffer2 = new byte[200];
- var read2 = await stream.ReadAsync(buffer2);
- Assert.Equal(100, read1);
- Assert.Equal(100, read2);
- Assert.Equal(data.AsMemory(0, read1).ToArray(), buffer);
- Assert.Equal(data.AsMemory(0, read2).ToArray(), buffer2.AsMemory(0, read2).ToArray());
- }
+ [Fact]
+ public void PartialReadThenSeekReplaysBuffer()
+ {
+ var data = Enumerable.Range(0, 1024).Select(b => (byte)b).ToArray();
+ var inner = new MemoryStream(data);
+
+ using var stream = new FileBufferingReadStream(inner, 1024 * 1024, bufferLimit: null, GetCurrentDirectory());
+
+ var withoutBufferMs = new MemoryStream();
+ var buffer = new byte[100];
+ var read1 = stream.Read(buffer);
+ stream.Position = 0;
+ var buffer2 = new byte[200];
+ var read2 = stream.Read(buffer2);
+ Assert.Equal(100, read1);
+ Assert.Equal(100, read2);
+ Assert.Equal(data.AsMemory(0, read1).ToArray(), buffer);
+ Assert.Equal(data.AsMemory(0, read2).ToArray(), buffer2.AsMemory(0, read2).ToArray());
+ }
+
+ [Fact]
+ public async Task PartialReadAsyncThenSeekReplaysBuffer()
+ {
+ var data = Enumerable.Range(0, 1024).Select(b => (byte)b).ToArray();
+ var inner = new MemoryStream(data);
+
+ using var stream = new FileBufferingReadStream(inner, 1024 * 1024, bufferLimit: null, GetCurrentDirectory());
+
+ var withoutBufferMs = new MemoryStream();
+ var buffer = new byte[100];
+ var read1 = await stream.ReadAsync(buffer);
+ stream.Position = 0;
+ var buffer2 = new byte[200];
+ var read2 = await stream.ReadAsync(buffer2);
+ Assert.Equal(100, read1);
+ Assert.Equal(100, read2);
+ Assert.Equal(data.AsMemory(0, read1).ToArray(), buffer);
+ Assert.Equal(data.AsMemory(0, read2).ToArray(), buffer2.AsMemory(0, read2).ToArray());
+ }
+
+ private static string GetCurrentDirectory()
+ {
+ return AppContext.BaseDirectory;
+ }
+
+ private class NumberOfWritesMemoryStream : MemoryStream
+ {
+ public int NumberOfWrites { get; set; }
- private static string GetCurrentDirectory()
+ public override void Write(byte[] buffer, int offset, int count)
{
- return AppContext.BaseDirectory;
+ NumberOfWrites++;
+ base.Write(buffer, offset, count);
}
- private class NumberOfWritesMemoryStream : MemoryStream
+ public override void Write(ReadOnlySpan<byte> source)
{
- public int NumberOfWrites { get; set; }
-
- public override void Write(byte[] buffer, int offset, int count)
- {
- NumberOfWrites++;
- base.Write(buffer, offset, count);
- }
-
- public override void Write(ReadOnlySpan<byte> source)
- {
- NumberOfWrites++;
- base.Write(source);
- }
+ NumberOfWrites++;
+ base.Write(source);
}
}
}