Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.

Commit 3331cda

Browse files
committed
Improve logging in FileShareOpen test
This test is still spuriously failing with sharing errors. Adding some more logging to hopefully better understand why.
1 parent 4583ca3 commit 3331cda

File tree

1 file changed

+50
-45
lines changed

1 file changed

+50
-45
lines changed

src/System.IO.FileSystem/tests/FileStream/ctor_str_fm_fa_fs.cs

Lines changed: 50 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -2,59 +2,55 @@
22
// The .NET Foundation licenses this file to you under the MIT license.
33
// See the LICENSE file in the project root for more information.
44

5-
using System;
6-
using System.IO;
75
using Xunit;
86

97
namespace System.IO.Tests
108
{
119
public partial class FileStream_ctor_str_fm_fa_fs : FileStream_ctor_str_fm_fa
1210
{
13-
protected override FileStream CreateFileStream(string path, FileMode mode, FileAccess access)
14-
{
15-
return CreateFileStream(path, mode, access, FileShare.Read);
16-
}
11+
protected override FileStream CreateFileStream(string path, FileMode mode, FileAccess access) =>
12+
CreateFileStream(path, mode, access, FileShare.Read);
1713

18-
protected virtual FileStream CreateFileStream(string path, FileMode mode, FileAccess access, FileShare share)
19-
{
20-
return new FileStream(path, mode, access, share);
21-
}
14+
protected virtual FileStream CreateFileStream(string path, FileMode mode, FileAccess access, FileShare share) =>
15+
new FileStream(path, mode, access, share);
2216

2317
[Fact]
2418
public void InvalidShareThrows()
2519
{
2620
AssertExtensions.Throws<ArgumentOutOfRangeException>("share", () => CreateFileStream(GetTestFilePath(), FileMode.Create, FileAccess.ReadWrite, ~FileShare.None));
2721
}
2822

29-
static readonly FileShare[] shares =
30-
{
31-
FileShare.None,
32-
FileShare.Inheritable,
33-
FileShare.Delete, FileShare.Delete | FileShare.Inheritable,
34-
FileShare.Read, FileShare.Read | FileShare.Inheritable, FileShare.Read | FileShare.Delete, FileShare.Read | FileShare.Delete | FileShare.Inheritable,
35-
FileShare.Write, FileShare.Write | FileShare.Inheritable, FileShare.Write | FileShare.Delete, FileShare.Write | FileShare.Delete | FileShare.Inheritable,
36-
FileShare.ReadWrite, FileShare.ReadWrite | FileShare.Inheritable, FileShare.ReadWrite | FileShare.Delete, FileShare.ReadWrite | FileShare.Delete | FileShare.Inheritable
37-
};
23+
private static readonly FileShare[] s_shares =
24+
{
25+
FileShare.None,
26+
FileShare.Inheritable,
27+
FileShare.Delete, FileShare.Delete | FileShare.Inheritable,
28+
FileShare.Read, FileShare.Read | FileShare.Inheritable, FileShare.Read | FileShare.Delete, FileShare.Read | FileShare.Delete | FileShare.Inheritable,
29+
FileShare.Write, FileShare.Write | FileShare.Inheritable, FileShare.Write | FileShare.Delete, FileShare.Write | FileShare.Delete | FileShare.Inheritable,
30+
FileShare.ReadWrite, FileShare.ReadWrite | FileShare.Inheritable, FileShare.ReadWrite | FileShare.Delete, FileShare.ReadWrite | FileShare.Delete | FileShare.Inheritable
31+
};
3832

3933
[Fact]
4034
public void FileShareOpen()
4135
{
4236
// create the file
4337
string fileName = GetTestFilePath();
44-
using (FileStream fs = CreateFileStream(fileName, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite | FileShare.Delete))
45-
{ }
38+
CreateFileStream(fileName, FileMode.CreateNew, FileAccess.ReadWrite, FileShare.ReadWrite | FileShare.Delete).Dispose();
4639

4740
// just check that the inputs are accepted, actual sharing varies by platform so we separate the behavior testing
48-
foreach(FileShare share in shares)
41+
foreach (FileAccess access in new[] { FileAccess.ReadWrite, FileAccess.Write, FileAccess.Read })
4942
{
50-
using (FileStream fs = CreateFileStream(fileName, FileMode.Open, FileAccess.ReadWrite, share))
51-
{ }
52-
53-
using (FileStream fs = CreateFileStream(fileName, FileMode.Open, FileAccess.Write, share))
54-
{ }
55-
56-
using (FileStream fs = CreateFileStream(fileName, FileMode.Open, FileAccess.Read, share))
57-
{ }
43+
foreach (FileShare share in s_shares)
44+
{
45+
try
46+
{
47+
CreateFileStream(fileName, FileMode.Open, access, share).Dispose();
48+
}
49+
catch (Exception e)
50+
{
51+
throw new Exception($"Failed with FileAccess {access} and FileShare {share}", e);
52+
}
53+
}
5854
}
5955
}
6056

@@ -63,13 +59,19 @@ public void FileShareCreate()
6359
{
6460
// just check that the inputs are accepted, actual sharing varies by platform so we separate the behavior testing
6561
int i = 0;
66-
foreach (FileShare share in shares)
62+
foreach (FileAccess access in new[] { FileAccess.ReadWrite, FileAccess.Write })
6763
{
68-
using (FileStream fs = CreateFileStream(GetTestFilePath(i++), FileMode.Create, FileAccess.ReadWrite, share))
69-
{ }
70-
71-
using (FileStream fs = CreateFileStream(GetTestFilePath(i++), FileMode.Create, FileAccess.Write, share))
72-
{ }
64+
foreach (FileShare share in s_shares)
65+
{
66+
try
67+
{
68+
CreateFileStream(GetTestFilePath(i++), FileMode.Create, access, share).Dispose();
69+
}
70+
catch (Exception e)
71+
{
72+
throw new Exception($"Failed with FileAccess {access} and FileShare {share}", e);
73+
}
74+
}
7375
}
7476
}
7577

@@ -78,16 +80,19 @@ public void FileShareOpenOrCreate()
7880
{
7981
// just check that the inputs are accepted, actual sharing varies by platform so we separate the behavior testing
8082
int i = 0;
81-
foreach (FileShare share in shares)
83+
foreach (FileAccess access in new[] { FileAccess.ReadWrite, FileAccess.Write, FileAccess.Read })
8284
{
83-
using (FileStream fs = CreateFileStream(GetTestFilePath(i++), FileMode.OpenOrCreate, FileAccess.ReadWrite, share))
84-
{ }
85-
86-
using (FileStream fs = CreateFileStream(GetTestFilePath(i++), FileMode.OpenOrCreate, FileAccess.Write, share))
87-
{ }
88-
89-
using (FileStream fs = CreateFileStream(GetTestFilePath(i++), FileMode.OpenOrCreate, FileAccess.Read, share))
90-
{ }
85+
foreach (FileShare share in s_shares)
86+
{
87+
try
88+
{
89+
CreateFileStream(GetTestFilePath(i++), FileMode.OpenOrCreate, access, share).Dispose();
90+
}
91+
catch (Exception e)
92+
{
93+
throw new Exception($"Failed with FileAccess {access} and FileShare {share}", e);
94+
}
95+
}
9196
}
9297
}
9398
}

0 commit comments

Comments
 (0)