-
Notifications
You must be signed in to change notification settings - Fork 264
Open
Labels
area: testinghelpersIssues that address the testing helpersIssues that address the testing helpersstate: ready to pickIssues that are ready for being worked onIssues that are ready for being worked ontype: bugIssues that describe misbehaving functionalityIssues that describe misbehaving functionality
Description
System.IO.Abstractions/src/System.IO.Abstractions.TestingHelpers/MockFileStream.cs
Lines 93 to 107 in 05486f7
| private void InternalFlush() | |
| { | |
| if (mockFileDataAccessor.FileExists(path)) | |
| { | |
| var mockFileData = mockFileDataAccessor.GetFile(path); | |
| /* reset back to the beginning .. */ | |
| var position = Position; | |
| Seek(0, SeekOrigin.Begin); | |
| /* .. read everything out */ | |
| var data = new byte[Length]; | |
| Read(data, 0, (int)Length); | |
| /* restore to original position */ | |
| Seek(position, SeekOrigin.Begin); | |
| /* .. put it in the mock system */ | |
| mockFileData.Contents = data; |
If Thread1 invokes this method, but Thread2 deletes the same file while Thread1 is at line 96, then Thread1 will throw a NullReferenceException at line 107.
I'm not sure what the desired behavior would be, but at a minimum lines 95-97 should be folded into an atomic mockFileDataAccessor.TryGetFile(path, out var mockFileData). I imagine it would look essentially like this, but without the ternary condition:
System.IO.Abstractions/src/System.IO.Abstractions.TestingHelpers/MockFileSystem.cs
Lines 383 to 389 in 05486f7
| private MockFileData GetFileWithoutFixingPath(string path) | |
| { | |
| lock (files) | |
| { | |
| return files.TryGetValue(path, out var result) ? result.Data : null; | |
| } | |
| } |
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
area: testinghelpersIssues that address the testing helpersIssues that address the testing helpersstate: ready to pickIssues that are ready for being worked onIssues that are ready for being worked ontype: bugIssues that describe misbehaving functionalityIssues that describe misbehaving functionality