Skip to content

Commit 543acdb

Browse files
test: added unit tests to cover simultaneous file stream opening with accesses and shares
1 parent fd3062a commit 543acdb

File tree

1 file changed

+25
-8
lines changed

1 file changed

+25
-8
lines changed

tests/TestableIO.System.IO.Abstractions.TestingHelpers.Tests/MockFileStreamTests.cs

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -392,24 +392,41 @@ async Task Act() =>
392392
}
393393

394394
[Test]
395-
public async Task MockFileStream_WhenExclusiveStreamOpen_ShouldThrowIOException()
395+
[TestCase(FileShare.None, FileAccess.Read)]
396+
[TestCase(FileShare.None, FileAccess.ReadWrite)]
397+
[TestCase(FileShare.None, FileAccess.Write)]
398+
[TestCase(FileShare.Read, FileAccess.Write)]
399+
[TestCase(FileShare.Read, FileAccess.ReadWrite)]
400+
[TestCase(FileShare.Write, FileAccess.Read)]
401+
public async Task MockFileStream_ConflictingShareOrAccess_ShouldThrowUntilHandleReleased(
402+
FileShare share,
403+
FileAccess access)
396404
{
397405
var fileSystem = new MockFileSystem();
398406
fileSystem.File.WriteAllText("foo.txt", "");
399-
using (new MockFileStream(fileSystem, "foo.txt", FileMode.Open, FileAccess.Read, FileShare.None))
407+
using (new MockFileStream(fileSystem, "foo.txt", FileMode.Open, FileAccess.Read, share))
400408
{
401-
await That(() => new MockFileStream(fileSystem, "foo.txt", FileMode.Open, FileAccess.Read)).Throws<IOException>();
409+
await That(() => new MockFileStream(fileSystem, "foo.txt", FileMode.Open, access)).Throws<IOException>();
402410
}
411+
await That(() => new MockFileStream(fileSystem, "foo.txt", FileMode.Open, access)).DoesNotThrow();
403412
}
404413

405414
[Test]
406-
public async Task MockFileStream_WhenExclusiveStreamClosed_ShouldNotThrow()
415+
[TestCase(FileShare.Read, FileAccess.Read)]
416+
[TestCase(FileShare.Read | FileShare.Write, FileAccess.Read)]
417+
[TestCase(FileShare.Read | FileShare.Write, FileAccess.ReadWrite)]
418+
[TestCase(FileShare.ReadWrite, FileAccess.Read)]
419+
[TestCase(FileShare.ReadWrite, FileAccess.ReadWrite)]
420+
[TestCase(FileShare.ReadWrite, FileAccess.Write)]
421+
public async Task MockFileStream_CompatibleShareOrAccess_ShouldNotThrow(
422+
FileShare share,
423+
FileAccess access)
407424
{
408425
var fileSystem = new MockFileSystem();
409426
fileSystem.File.WriteAllText("foo.txt", "");
410-
var stream = new MockFileStream(fileSystem, "foo.txt", FileMode.Open, FileAccess.Read, FileShare.None);
411-
stream.Dispose();
412-
413-
await That(() => new MockFileStream(fileSystem, "foo.txt", FileMode.Open, FileAccess.Read)).DoesNotThrow();
427+
using (new MockFileStream(fileSystem, "foo.txt", FileMode.Open, FileAccess.Read, share))
428+
{
429+
await That(() => new MockFileStream(fileSystem, "foo.txt", FileMode.Open, access)).DoesNotThrow();
430+
}
414431
}
415432
}

0 commit comments

Comments
 (0)