From afac17ce0eb38ebaa28901160164d3d7faae61c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Valentin=20Breu=C3=9F?= Date: Tue, 7 Mar 2023 08:21:27 +0100 Subject: [PATCH 1/8] Replace `Task.Factory.StartNew` with `Task.Run` --- .../FileSystem/FileSystemWatcherMock.cs | 6 ++---- Source/Testably.Abstractions.Testing/Notification.cs | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/Source/Testably.Abstractions.Testing/FileSystem/FileSystemWatcherMock.cs b/Source/Testably.Abstractions.Testing/FileSystem/FileSystemWatcherMock.cs index 39162e04..4e1dba2e 100644 --- a/Source/Testably.Abstractions.Testing/FileSystem/FileSystemWatcherMock.cs +++ b/Source/Testably.Abstractions.Testing/FileSystem/FileSystemWatcherMock.cs @@ -305,7 +305,7 @@ private void Start() } }); CancellationToken token = cancellationTokenSource.Token; - Task.Factory.StartNew(() => + Task.Run(() => { try { @@ -324,9 +324,7 @@ private void Start() //Ignore any exception } }, - token, - TaskCreationOptions.LongRunning, - TaskScheduler.Default) + token) .ContinueWith(_ => { cancellationTokenSource.Dispose(); diff --git a/Source/Testably.Abstractions.Testing/Notification.cs b/Source/Testably.Abstractions.Testing/Notification.cs index 7927f413..145f0693 100644 --- a/Source/Testably.Abstractions.Testing/Notification.cs +++ b/Source/Testably.Abstractions.Testing/Notification.cs @@ -107,7 +107,7 @@ public void Wait(Func? filter = null, Task? task = null; if (executeWhenWaiting != null) { - task = Task.Factory.StartNew(executeWhenWaiting.Invoke); + task = Task.Run(executeWhenWaiting.Invoke); } if (!_reset.Wait(timeout) || From b35402f3539798cce82384e755b3e7cddf9833a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Valentin=20Breu=C3=9F?= Date: Tue, 14 Mar 2023 13:07:38 +0100 Subject: [PATCH 2/8] Update tests and use Thread.Yield --- .../TimeSystem/ThreadMock.cs | 2 +- .../DirectoryAclExtensionsTests.cs | 5 +- .../DirectoryInfoAclExtensionsTests.cs | 5 +- .../MockTimeSystemTests.cs | 4 +- .../NotificationTests.cs | 55 ++++++++++--------- 5 files changed, 37 insertions(+), 34 deletions(-) diff --git a/Source/Testably.Abstractions.Testing/TimeSystem/ThreadMock.cs b/Source/Testably.Abstractions.Testing/TimeSystem/ThreadMock.cs index 3f4a826a..c60fe5eb 100644 --- a/Source/Testably.Abstractions.Testing/TimeSystem/ThreadMock.cs +++ b/Source/Testably.Abstractions.Testing/TimeSystem/ThreadMock.cs @@ -34,7 +34,7 @@ public void Sleep(TimeSpan timeout) } _mockTimeSystem.TimeProvider.AdvanceBy(timeout); - Thread.Sleep(0); + Thread.Yield(); _callbackHandler.InvokeThreadSleepCallbacks(timeout); } diff --git a/Tests/Testably.Abstractions.AccessControl.Tests/DirectoryAclExtensionsTests.cs b/Tests/Testably.Abstractions.AccessControl.Tests/DirectoryAclExtensionsTests.cs index 667d91b5..0b90743e 100644 --- a/Tests/Testably.Abstractions.AccessControl.Tests/DirectoryAclExtensionsTests.cs +++ b/Tests/Testably.Abstractions.AccessControl.Tests/DirectoryAclExtensionsTests.cs @@ -1,4 +1,5 @@ using System.Security.AccessControl; +using System.Threading.Tasks; using Testably.Abstractions.AccessControl.Tests.TestHelpers; namespace Testably.Abstractions.AccessControl.Tests; @@ -96,14 +97,14 @@ public void SetAccessControl_ShouldChangeAccessControl() } [SkippableFact] - public void SetAccessControl_ShouldNotUpdateTimes() + public async Task SetAccessControl_ShouldNotUpdateTimes() { Skip.IfNot(Test.RunsOnWindows); Test.SkipIfLongRunningTestsShouldBeSkipped(FileSystem); FileSystem.File.WriteAllText("foo.txt", "abc"); - TimeSystem.Thread.Sleep(3000); + await TimeSystem.Task.Delay(3000); DateTime previousCreationTimeUtc = FileSystem.File.GetCreationTimeUtc("foo.txt"); DateTime previousLastAccessTimeUtc = FileSystem.File.GetLastAccessTimeUtc("foo.txt"); DateTime previousLastWriteTimeUtc = FileSystem.File.GetLastWriteTimeUtc("foo.txt"); diff --git a/Tests/Testably.Abstractions.AccessControl.Tests/DirectoryInfoAclExtensionsTests.cs b/Tests/Testably.Abstractions.AccessControl.Tests/DirectoryInfoAclExtensionsTests.cs index 57a19d56..4245135e 100644 --- a/Tests/Testably.Abstractions.AccessControl.Tests/DirectoryInfoAclExtensionsTests.cs +++ b/Tests/Testably.Abstractions.AccessControl.Tests/DirectoryInfoAclExtensionsTests.cs @@ -1,5 +1,6 @@ using AutoFixture.Xunit2; using System.Security.AccessControl; +using System.Threading.Tasks; using Testably.Abstractions.AccessControl.Tests.TestHelpers; namespace Testably.Abstractions.AccessControl.Tests; @@ -98,14 +99,14 @@ public void SetAccessControl_ShouldChangeAccessControl() [SkippableTheory] [AutoData] - public void SetAccessControl_ShouldNotUpdateTimes(string path) + public async Task SetAccessControl_ShouldNotUpdateTimes(string path) { Skip.IfNot(Test.RunsOnWindows); Test.SkipIfLongRunningTestsShouldBeSkipped(FileSystem); FileSystem.Directory.CreateDirectory(path); - TimeSystem.Thread.Sleep(3000); + await TimeSystem.Task.Delay(3000); DateTime previousCreationTimeUtc = FileSystem.File.GetCreationTimeUtc(path); DateTime previousLastAccessTimeUtc = FileSystem.File.GetLastAccessTimeUtc(path); DateTime previousLastWriteTimeUtc = FileSystem.File.GetLastWriteTimeUtc(path); diff --git a/Tests/Testably.Abstractions.Testing.Tests/MockTimeSystemTests.cs b/Tests/Testably.Abstractions.Testing.Tests/MockTimeSystemTests.cs index b704291c..36ff5f92 100644 --- a/Tests/Testably.Abstractions.Testing.Tests/MockTimeSystemTests.cs +++ b/Tests/Testably.Abstractions.Testing.Tests/MockTimeSystemTests.cs @@ -70,7 +70,7 @@ public void Sleep_InfiniteTimeSpan_ShouldNotThrowException() } [Fact] - public void Sleep_LessThanInfinite_ShouldNotThrowException() + public void Sleep_LessThanInfinite_ShouldThrowArgumentOutOfRangeException() { MockTimeSystem timeSystem = new(); Exception? exception = @@ -80,7 +80,7 @@ public void Sleep_LessThanInfinite_ShouldNotThrowException() } [Fact] - public void Sleep_LessThanInfiniteTimeSpan_ShouldNotThrowException() + public void Sleep_LessThanInfiniteTimeSpan_ShouldThrowArgumentOutOfRangeException() { MockTimeSystem timeSystem = new(); Exception? exception = diff --git a/Tests/Testably.Abstractions.Testing.Tests/NotificationTests.cs b/Tests/Testably.Abstractions.Testing.Tests/NotificationTests.cs index faad37f5..9a755b7f 100644 --- a/Tests/Testably.Abstractions.Testing.Tests/NotificationTests.cs +++ b/Tests/Testably.Abstractions.Testing.Tests/NotificationTests.cs @@ -1,4 +1,5 @@ using System.Threading; +using System.Threading.Tasks; namespace Testably.Abstractions.Testing.Tests; @@ -18,22 +19,22 @@ public void AwaitableCallback_Amount_ShouldOnlyReturnAfterNumberOfCallbacks() } }); - new Thread(() => + Task.Run(async () => { - Thread.Sleep(10); + await Task.Delay(10); for (int i = 1; i <= 10; i++) { - timeSystem.Thread.Sleep(i); - Thread.Sleep(1); + await timeSystem.Task.Delay(i); + await Task.Delay(1); } - }).Start(); + }); wait.Wait(count: 7); receivedCount.Should().BeGreaterOrEqualTo(7); } [SkippableFact] - public void AwaitableCallback_Dispose_ShouldStopListening() + public async Task AwaitableCallback_Dispose_ShouldStopListening() { MockTimeSystem timeSystem = new(); bool isCalled = false; @@ -45,8 +46,8 @@ public void AwaitableCallback_Dispose_ShouldStopListening() wait.Dispose(); - timeSystem.Thread.Sleep(1); - Thread.Sleep(10); + await timeSystem.Task.Delay(1); + await Task.Delay(10); isCalled.Should().BeFalse(); } @@ -81,15 +82,15 @@ public void AwaitableCallback_Filter_ShouldOnlyUpdateAfterFilteredValue() receivedCount++; }); - new Thread(() => + Task.Run(async () => { - Thread.Sleep(10); + await Task.Delay(10); for (int i = 1; i <= 10; i++) { timeSystem.Thread.Sleep(i); - Thread.Sleep(1); + await Task.Delay(1); } - }).Start(); + }); wait.Wait(t => t.TotalMilliseconds > 6); receivedCount.Should().BeGreaterOrEqualTo(6); @@ -105,18 +106,17 @@ public void AwaitableCallback_Predicate_ShouldOnlyUpdateAfterFilteredValue() { receivedCount++; }, t => t.TotalMilliseconds > 6); - - new Thread(() => + + Task.Run(async () => { - Thread.Sleep(10); + await Task.Delay(10); for (int i = 1; i <= 10; i++) { timeSystem.Thread.Sleep(i); - Thread.Sleep(1); + await Task.Delay(1); } - ms.Set(); - }).Start(); + }); ms.Wait(30000); receivedCount.Should().BeLessOrEqualTo(4); @@ -136,14 +136,14 @@ public void AwaitableCallback_ShouldWaitForCallbackExecution() isCalled = true; }); - new Thread(() => + Task.Run(async () => { while (!ms.IsSet) { timeSystem.Thread.Sleep(1); - Thread.Sleep(1); + await Task.Delay(1); } - }).Start(); + }); wait.Wait(); isCalled.Should().BeTrue(); @@ -165,12 +165,13 @@ public void AwaitableCallback_TimeoutExpired_ShouldThrowTimeoutException() { isCalled = true; }); - new Thread(() => + + Task.Run(() => { // Delay larger than timeout of 10ms ms.Wait(); timeSystem.Thread.Sleep(1); - }).Start(); + }); Exception? exception = Record.Exception(() => { @@ -200,15 +201,15 @@ public void AwaitableCallback_WaitedPreviously_ShouldWaitAgainForCallbackExecuti isCalledFromSecondThread = true; } }).ExecuteWhileWaiting(() => listening.Set()); - new Thread(() => + Task.Run(() => { listening.Wait(1000); timeSystem.Thread.Sleep(firstThreadMilliseconds); - }).Start(); + }); wait.Wait(); listening.Reset(); - new Thread(() => + Task.Run(() => { listening.Wait(1000); if (!ms.IsSet) @@ -216,7 +217,7 @@ public void AwaitableCallback_WaitedPreviously_ShouldWaitAgainForCallbackExecuti // Should only trigger, if the second call to `Wait` still blocks timeSystem.Thread.Sleep(secondThreadMilliseconds); } - }).Start(); + }); wait.Wait(); ms.Set(); From 2dc6cf14fb40d6048dbbd0753b5d778db3684fa8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Valentin=20Breu=C3=9F?= Date: Tue, 14 Mar 2023 20:08:24 +0100 Subject: [PATCH 3/8] Fix failing tests --- .../FileSystem/FileSystemWatcherMockTests.cs | 3 +-- .../NotificationTests.cs | 8 ++++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/Tests/Testably.Abstractions.Testing.Tests/FileSystem/FileSystemWatcherMockTests.cs b/Tests/Testably.Abstractions.Testing.Tests/FileSystem/FileSystemWatcherMockTests.cs index ab61f07f..60c1366e 100644 --- a/Tests/Testably.Abstractions.Testing.Tests/FileSystem/FileSystemWatcherMockTests.cs +++ b/Tests/Testably.Abstractions.Testing.Tests/FileSystem/FileSystemWatcherMockTests.cs @@ -140,7 +140,7 @@ public void Filter_ShouldResetFiltersToOnlyContainASingleValue( [AutoData] public void InternalBufferSize_ShouldResetQueue(string path1, string path2) { - IFileSystemWatcher fileSystemWatcher = + using IFileSystemWatcher fileSystemWatcher = FileSystem.FileSystemWatcher.New(BasePath); ManualResetEventSlim block1 = new(); ManualResetEventSlim block2 = new(); @@ -181,7 +181,6 @@ public void InternalBufferSize_ShouldResetQueue(string path1, string path2) } block2.Wait(100).Should().BeFalse(); - fileSystemWatcher.Dispose(); result.Should().BeNull(); } } diff --git a/Tests/Testably.Abstractions.Testing.Tests/NotificationTests.cs b/Tests/Testably.Abstractions.Testing.Tests/NotificationTests.cs index 9a755b7f..d6e8aace 100644 --- a/Tests/Testably.Abstractions.Testing.Tests/NotificationTests.cs +++ b/Tests/Testably.Abstractions.Testing.Tests/NotificationTests.cs @@ -11,7 +11,7 @@ public void AwaitableCallback_Amount_ShouldOnlyReturnAfterNumberOfCallbacks() MockTimeSystem timeSystem = new(); int receivedCount = 0; Notification.IAwaitableCallback wait = - timeSystem.On.ThreadSleep(t => + timeSystem.On.TaskDelay(t => { if (t.TotalMilliseconds > 0) { @@ -21,11 +21,11 @@ public void AwaitableCallback_Amount_ShouldOnlyReturnAfterNumberOfCallbacks() Task.Run(async () => { - await Task.Delay(10); + await Task.Delay(10).ConfigureAwait(false); for (int i = 1; i <= 10; i++) { - await timeSystem.Task.Delay(i); - await Task.Delay(1); + await timeSystem.Task.Delay(i).ConfigureAwait(false); + await Task.Delay(1).ConfigureAwait(false); } }); From 945bd5a6b291629cfa20a546b2b42a39357c1a20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Valentin=20Breu=C3=9F?= Date: Tue, 14 Mar 2023 20:08:41 +0100 Subject: [PATCH 4/8] Increase "maxParallelThreads" in xunit.runner.json --- .../Testably.Abstractions.Testing.Tests.csproj | 4 ++++ Tests/Testably.Abstractions.Testing.Tests/xunit.runner.json | 4 ++++ .../Testably.Abstractions.Tests.csproj | 4 ++++ Tests/Testably.Abstractions.Tests/xunit.runner.json | 4 ++++ 4 files changed, 16 insertions(+) create mode 100644 Tests/Testably.Abstractions.Testing.Tests/xunit.runner.json create mode 100644 Tests/Testably.Abstractions.Tests/xunit.runner.json diff --git a/Tests/Testably.Abstractions.Testing.Tests/Testably.Abstractions.Testing.Tests.csproj b/Tests/Testably.Abstractions.Testing.Tests/Testably.Abstractions.Testing.Tests.csproj index a978f1e6..9fc5275b 100644 --- a/Tests/Testably.Abstractions.Testing.Tests/Testably.Abstractions.Testing.Tests.csproj +++ b/Tests/Testably.Abstractions.Testing.Tests/Testably.Abstractions.Testing.Tests.csproj @@ -36,4 +36,8 @@ + + + + diff --git a/Tests/Testably.Abstractions.Testing.Tests/xunit.runner.json b/Tests/Testably.Abstractions.Testing.Tests/xunit.runner.json new file mode 100644 index 00000000..d2aa9a79 --- /dev/null +++ b/Tests/Testably.Abstractions.Testing.Tests/xunit.runner.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://xunit.net/schema/current/xunit.runner.schema.json", + "maxParallelThreads": -1 +} diff --git a/Tests/Testably.Abstractions.Tests/Testably.Abstractions.Tests.csproj b/Tests/Testably.Abstractions.Tests/Testably.Abstractions.Tests.csproj index d2f91991..969e335d 100644 --- a/Tests/Testably.Abstractions.Tests/Testably.Abstractions.Tests.csproj +++ b/Tests/Testably.Abstractions.Tests/Testably.Abstractions.Tests.csproj @@ -28,4 +28,8 @@ + + + + diff --git a/Tests/Testably.Abstractions.Tests/xunit.runner.json b/Tests/Testably.Abstractions.Tests/xunit.runner.json new file mode 100644 index 00000000..d2aa9a79 --- /dev/null +++ b/Tests/Testably.Abstractions.Tests/xunit.runner.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://xunit.net/schema/current/xunit.runner.schema.json", + "maxParallelThreads": -1 +} From f827151272cfd5ecae69098dae2eea5497e779c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Valentin=20Breu=C3=9F?= Date: Sun, 9 Apr 2023 19:38:05 +0200 Subject: [PATCH 5/8] Remove xunit.runner.json --- .../Testably.Abstractions.Testing.Tests.csproj | 4 ---- Tests/Testably.Abstractions.Testing.Tests/xunit.runner.json | 4 ---- .../Testably.Abstractions.Tests.csproj | 4 ---- Tests/Testably.Abstractions.Tests/xunit.runner.json | 4 ---- 4 files changed, 16 deletions(-) delete mode 100644 Tests/Testably.Abstractions.Testing.Tests/xunit.runner.json delete mode 100644 Tests/Testably.Abstractions.Tests/xunit.runner.json diff --git a/Tests/Testably.Abstractions.Testing.Tests/Testably.Abstractions.Testing.Tests.csproj b/Tests/Testably.Abstractions.Testing.Tests/Testably.Abstractions.Testing.Tests.csproj index 9fc5275b..a978f1e6 100644 --- a/Tests/Testably.Abstractions.Testing.Tests/Testably.Abstractions.Testing.Tests.csproj +++ b/Tests/Testably.Abstractions.Testing.Tests/Testably.Abstractions.Testing.Tests.csproj @@ -36,8 +36,4 @@ - - - - diff --git a/Tests/Testably.Abstractions.Testing.Tests/xunit.runner.json b/Tests/Testably.Abstractions.Testing.Tests/xunit.runner.json deleted file mode 100644 index d2aa9a79..00000000 --- a/Tests/Testably.Abstractions.Testing.Tests/xunit.runner.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "$schema": "https://xunit.net/schema/current/xunit.runner.schema.json", - "maxParallelThreads": -1 -} diff --git a/Tests/Testably.Abstractions.Tests/Testably.Abstractions.Tests.csproj b/Tests/Testably.Abstractions.Tests/Testably.Abstractions.Tests.csproj index 969e335d..d2f91991 100644 --- a/Tests/Testably.Abstractions.Tests/Testably.Abstractions.Tests.csproj +++ b/Tests/Testably.Abstractions.Tests/Testably.Abstractions.Tests.csproj @@ -28,8 +28,4 @@ - - - - diff --git a/Tests/Testably.Abstractions.Tests/xunit.runner.json b/Tests/Testably.Abstractions.Tests/xunit.runner.json deleted file mode 100644 index d2aa9a79..00000000 --- a/Tests/Testably.Abstractions.Tests/xunit.runner.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "$schema": "https://xunit.net/schema/current/xunit.runner.schema.json", - "maxParallelThreads": -1 -} From 6a35084e1e6a3c9dbfe271c22272f021d993d0ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Valentin=20Breu=C3=9F?= Date: Sun, 9 Apr 2023 21:46:31 +0200 Subject: [PATCH 6/8] Skip brittle test --- .../FileSystem/FileSystemWatcherMockTests.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Tests/Testably.Abstractions.Testing.Tests/FileSystem/FileSystemWatcherMockTests.cs b/Tests/Testably.Abstractions.Testing.Tests/FileSystem/FileSystemWatcherMockTests.cs index 282070d1..7b52d7b7 100644 --- a/Tests/Testably.Abstractions.Testing.Tests/FileSystem/FileSystemWatcherMockTests.cs +++ b/Tests/Testably.Abstractions.Testing.Tests/FileSystem/FileSystemWatcherMockTests.cs @@ -140,6 +140,8 @@ public void Filter_ShouldResetFiltersToOnlyContainASingleValue( [AutoData] public void InternalBufferSize_ShouldResetQueue(string path1, string path2) { + Skip.If(true, "Brittle test fails on build system (disabled in #284)"); + using IFileSystemWatcher fileSystemWatcher = FileSystem.FileSystemWatcher.New(BasePath); ManualResetEventSlim block1 = new(); From f977ac5ad3901838bd6a3983115c15e3ba9f5bf8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Valentin=20Breu=C3=9F?= Date: Sun, 9 Apr 2023 21:49:39 +0200 Subject: [PATCH 7/8] Undo changes in NotificationTests --- .../NotificationTests.cs | 57 +++++++++---------- 1 file changed, 28 insertions(+), 29 deletions(-) diff --git a/Tests/Testably.Abstractions.Testing.Tests/NotificationTests.cs b/Tests/Testably.Abstractions.Testing.Tests/NotificationTests.cs index d6e8aace..faad37f5 100644 --- a/Tests/Testably.Abstractions.Testing.Tests/NotificationTests.cs +++ b/Tests/Testably.Abstractions.Testing.Tests/NotificationTests.cs @@ -1,5 +1,4 @@ using System.Threading; -using System.Threading.Tasks; namespace Testably.Abstractions.Testing.Tests; @@ -11,7 +10,7 @@ public void AwaitableCallback_Amount_ShouldOnlyReturnAfterNumberOfCallbacks() MockTimeSystem timeSystem = new(); int receivedCount = 0; Notification.IAwaitableCallback wait = - timeSystem.On.TaskDelay(t => + timeSystem.On.ThreadSleep(t => { if (t.TotalMilliseconds > 0) { @@ -19,22 +18,22 @@ public void AwaitableCallback_Amount_ShouldOnlyReturnAfterNumberOfCallbacks() } }); - Task.Run(async () => + new Thread(() => { - await Task.Delay(10).ConfigureAwait(false); + Thread.Sleep(10); for (int i = 1; i <= 10; i++) { - await timeSystem.Task.Delay(i).ConfigureAwait(false); - await Task.Delay(1).ConfigureAwait(false); + timeSystem.Thread.Sleep(i); + Thread.Sleep(1); } - }); + }).Start(); wait.Wait(count: 7); receivedCount.Should().BeGreaterOrEqualTo(7); } [SkippableFact] - public async Task AwaitableCallback_Dispose_ShouldStopListening() + public void AwaitableCallback_Dispose_ShouldStopListening() { MockTimeSystem timeSystem = new(); bool isCalled = false; @@ -46,8 +45,8 @@ public async Task AwaitableCallback_Dispose_ShouldStopListening() wait.Dispose(); - await timeSystem.Task.Delay(1); - await Task.Delay(10); + timeSystem.Thread.Sleep(1); + Thread.Sleep(10); isCalled.Should().BeFalse(); } @@ -82,15 +81,15 @@ public void AwaitableCallback_Filter_ShouldOnlyUpdateAfterFilteredValue() receivedCount++; }); - Task.Run(async () => + new Thread(() => { - await Task.Delay(10); + Thread.Sleep(10); for (int i = 1; i <= 10; i++) { timeSystem.Thread.Sleep(i); - await Task.Delay(1); + Thread.Sleep(1); } - }); + }).Start(); wait.Wait(t => t.TotalMilliseconds > 6); receivedCount.Should().BeGreaterOrEqualTo(6); @@ -106,17 +105,18 @@ public void AwaitableCallback_Predicate_ShouldOnlyUpdateAfterFilteredValue() { receivedCount++; }, t => t.TotalMilliseconds > 6); - - Task.Run(async () => + + new Thread(() => { - await Task.Delay(10); + Thread.Sleep(10); for (int i = 1; i <= 10; i++) { timeSystem.Thread.Sleep(i); - await Task.Delay(1); + Thread.Sleep(1); } + ms.Set(); - }); + }).Start(); ms.Wait(30000); receivedCount.Should().BeLessOrEqualTo(4); @@ -136,14 +136,14 @@ public void AwaitableCallback_ShouldWaitForCallbackExecution() isCalled = true; }); - Task.Run(async () => + new Thread(() => { while (!ms.IsSet) { timeSystem.Thread.Sleep(1); - await Task.Delay(1); + Thread.Sleep(1); } - }); + }).Start(); wait.Wait(); isCalled.Should().BeTrue(); @@ -165,13 +165,12 @@ public void AwaitableCallback_TimeoutExpired_ShouldThrowTimeoutException() { isCalled = true; }); - - Task.Run(() => + new Thread(() => { // Delay larger than timeout of 10ms ms.Wait(); timeSystem.Thread.Sleep(1); - }); + }).Start(); Exception? exception = Record.Exception(() => { @@ -201,15 +200,15 @@ public void AwaitableCallback_WaitedPreviously_ShouldWaitAgainForCallbackExecuti isCalledFromSecondThread = true; } }).ExecuteWhileWaiting(() => listening.Set()); - Task.Run(() => + new Thread(() => { listening.Wait(1000); timeSystem.Thread.Sleep(firstThreadMilliseconds); - }); + }).Start(); wait.Wait(); listening.Reset(); - Task.Run(() => + new Thread(() => { listening.Wait(1000); if (!ms.IsSet) @@ -217,7 +216,7 @@ public void AwaitableCallback_WaitedPreviously_ShouldWaitAgainForCallbackExecuti // Should only trigger, if the second call to `Wait` still blocks timeSystem.Thread.Sleep(secondThreadMilliseconds); } - }); + }).Start(); wait.Wait(); ms.Set(); From a1ed597481593c62fc01081c8983fd7ce5008ed6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Valentin=20Breu=C3=9F?= Date: Mon, 10 Apr 2023 08:17:42 +0200 Subject: [PATCH 8/8] Increase WaitForChanged timeout --- .../FileSystem/FileSystemWatcher/Tests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/Testably.Abstractions.Tests/FileSystem/FileSystemWatcher/Tests.cs b/Tests/Testably.Abstractions.Tests/FileSystem/FileSystemWatcher/Tests.cs index 3611814d..3ebbbcd0 100644 --- a/Tests/Testably.Abstractions.Tests/FileSystem/FileSystemWatcher/Tests.cs +++ b/Tests/Testably.Abstractions.Tests/FileSystem/FileSystemWatcher/Tests.cs @@ -92,7 +92,7 @@ public void EndInit_ShouldRestartListening(string path) } }); IWaitForChangedResult result = - fileSystemWatcher.WaitForChanged(WatcherChangeTypes.Created, 100); + fileSystemWatcher.WaitForChanged(WatcherChangeTypes.Created, 30000); fileSystemWatcher.EnableRaisingEvents.Should().BeTrue(); result.TimedOut.Should().BeFalse();