From fb96e780bd4a1bdeece955728f455c276cf3346b Mon Sep 17 00:00:00 2001 From: Thierry Matthey Date: Sun, 23 Jun 2024 23:31:26 +0200 Subject: [PATCH] Upgrade xunit to 2.8.0 and fix compiler warnings --- src/NetMQ.Tests/ClientServer.cs | 6 +-- src/NetMQ.Tests/MessageTests.cs | 2 +- src/NetMQ.Tests/NetMQ.Tests.csproj | 26 ++++++++++--- src/NetMQ.Tests/NetMQMonitorTests.cs | 4 +- src/NetMQ.Tests/NetMQPollerTest.cs | 18 ++++----- src/NetMQ.Tests/NetMQQueueTests.cs | 2 +- src/NetMQ.Tests/PgmTests.cs | 6 +-- src/NetMQ.Tests/RadioDish.cs | 3 +- src/NetMQ.Tests/RouterTests.cs | 2 +- src/NetMQ.Tests/ScatterGather.cs | 3 +- src/NetMQ.Tests/SocketTests.cs | 2 +- src/NetMQ.Tests/TaskUtils.cs | 56 ++++++++++++++++++++++++++++ src/NetMQ.Tests/XPubSubTests.cs | 6 +-- 13 files changed, 104 insertions(+), 32 deletions(-) create mode 100644 src/NetMQ.Tests/TaskUtils.cs diff --git a/src/NetMQ.Tests/ClientServer.cs b/src/NetMQ.Tests/ClientServer.cs index 8fad5621d..f8da51706 100644 --- a/src/NetMQ.Tests/ClientServer.cs +++ b/src/NetMQ.Tests/ClientServer.cs @@ -54,7 +54,7 @@ public void Tcp() } [Fact] - public async void Async() + public async Task Async() { using var server = new ServerSocket(); using var client = new ClientSocket(); @@ -72,7 +72,7 @@ public async void Async() } [Fact] - public async void AsyncWithCancellationToken() + public async Task AsyncWithCancellationToken() { using CancellationTokenSource source = new CancellationTokenSource(); using var server = new ServerSocket(); @@ -85,7 +85,7 @@ public async void AsyncWithCancellationToken() #if NETCOREAPP3_1 [Fact(Timeout = 120)] - public async void AsyncEnumerableCanceled() + public async Task AsyncEnumerableCanceled() { using CancellationTokenSource source = new CancellationTokenSource(); using var server = new ServerSocket(); diff --git a/src/NetMQ.Tests/MessageTests.cs b/src/NetMQ.Tests/MessageTests.cs index 2009f8f93..3ea05d479 100644 --- a/src/NetMQ.Tests/MessageTests.cs +++ b/src/NetMQ.Tests/MessageTests.cs @@ -128,7 +128,7 @@ public void Issue52_ReqToRouterBug() var msg = router.ReceiveMultipartMessage(); Assert.Equal(3, msg.FrameCount); - Assert.Equal(msg[2].ConvertToString(), testmessage); + Assert.Equal(testmessage, msg[2].ConvertToString()); } } diff --git a/src/NetMQ.Tests/NetMQ.Tests.csproj b/src/NetMQ.Tests/NetMQ.Tests.csproj index ac51221d6..347d8bc9c 100644 --- a/src/NetMQ.Tests/NetMQ.Tests.csproj +++ b/src/NetMQ.Tests/NetMQ.Tests.csproj @@ -15,7 +15,7 @@ true - + /Library/Frameworks/Mono.framework/Versions/Current/lib/mono /usr/lib/mono /usr/local/lib/mono @@ -39,14 +39,28 @@ - - - - + + - + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + diff --git a/src/NetMQ.Tests/NetMQMonitorTests.cs b/src/NetMQ.Tests/NetMQMonitorTests.cs index e6665e0b4..a4d3708ad 100644 --- a/src/NetMQ.Tests/NetMQMonitorTests.cs +++ b/src/NetMQ.Tests/NetMQMonitorTests.cs @@ -68,7 +68,7 @@ public void StartAsync() Thread.Sleep(200); Assert.Equal(TaskStatus.Running, task.Status); monitor.Stop(); - Assert.True(task.Wait(TimeSpan.FromMilliseconds(1000))); + Assert.True(TaskUtils.Wait(task, TimeSpan.FromMilliseconds(1000))); } } #endif @@ -154,7 +154,7 @@ public void MonitorDisposeProperlyWhenDisposedAfterMonitoredTcpSocket() } Thread.Sleep(100); // Monitor.Dispose should complete - var completed = Task.Factory.StartNew(() => monitor.Dispose()).Wait(1000); + var completed = TaskUtils.Wait(Task.Factory.StartNew(() => monitor.Dispose()), TimeSpan.FromMilliseconds(1000)); Assert.True(completed); } // NOTE If this test fails, it will hang because context.Dispose will block diff --git a/src/NetMQ.Tests/NetMQPollerTest.cs b/src/NetMQ.Tests/NetMQPollerTest.cs index f49030732..340730312 100644 --- a/src/NetMQ.Tests/NetMQPollerTest.cs +++ b/src/NetMQ.Tests/NetMQPollerTest.cs @@ -395,7 +395,7 @@ public void RemoveSocket() poller.Stop(); // await the pollerTask, 1ms should suffice - pollerTask.Wait(1); + TaskUtils.Wait(pollerTask, TimeSpan.FromMilliseconds(1)); Assert.True(pollerTask.IsCompleted); } } @@ -879,7 +879,7 @@ public void OneTask() Assert.True(poller.CanExecuteTaskInline, "Should be on NetMQPoller thread"); }); task.Start(poller); - task.Wait(); + TaskUtils.Wait(task); Assert.True(triggered); } @@ -894,7 +894,7 @@ public void SetsCurrentTaskScheduler() var task = new Task(() => Assert.Same(TaskScheduler.Current, poller)); task.Start(poller); - task.Wait(); + TaskUtils.Wait(task); } } @@ -911,7 +911,7 @@ public void CanExecuteTaskInline() var task = new Task(() => Assert.True(poller.CanExecuteTaskInline)); task.Start(poller); - task.Wait(); + TaskUtils.Wait(task); } } @@ -941,8 +941,8 @@ public void ContinueWith() }, poller); task.Start(poller); - task.Wait(); - task2.Wait(); + TaskUtils.Wait(task); + TaskUtils.Wait(task2); Assert.Equal(threadId1, threadId2); Assert.Equal(1, runCount1); @@ -982,9 +982,9 @@ public void TwoThreads() } }); - t1.Wait(1000); - t2.Wait(1000); - Task.WaitAll(allTasks.ToArray(), 1000); + TaskUtils.Wait(t1, TimeSpan.FromMilliseconds(1000)); + TaskUtils.Wait(t2, TimeSpan.FromMilliseconds(1000)); + TaskUtils.WaitAll(allTasks, TimeSpan.FromMilliseconds(1000)); Assert.Equal(100, count1); Assert.Equal(100, count2); diff --git a/src/NetMQ.Tests/NetMQQueueTests.cs b/src/NetMQ.Tests/NetMQQueueTests.cs index 9a26870df..7540d9b38 100644 --- a/src/NetMQ.Tests/NetMQQueueTests.cs +++ b/src/NetMQ.Tests/NetMQQueueTests.cs @@ -39,7 +39,7 @@ public void EnqueueShouldNotBlockWhenCapacityIsZero() } }); - bool completed = task.Wait(TimeSpan.FromSeconds(1)); + bool completed = TaskUtils.Wait(task, TimeSpan.FromSeconds(1)); Assert.True(completed, "Enqueue task should have completed " + socketWatermarkCapacity + " enqueue within 1 second"); } } diff --git a/src/NetMQ.Tests/PgmTests.cs b/src/NetMQ.Tests/PgmTests.cs index 1dcc857ee..d9b38aa58 100644 --- a/src/NetMQ.Tests/PgmTests.cs +++ b/src/NetMQ.Tests/PgmTests.cs @@ -230,8 +230,8 @@ public void Sending1000Messages() } }); - pubTask.Wait(); - subTask.Wait(); + TaskUtils.Wait(pubTask); + TaskUtils.Wait(subTask); Assert.Equal(1000, count); } @@ -291,7 +291,7 @@ public void SubscriberCleanupOnUnbind(string address) monitor.Stop(); - monitorTask.Wait(); + TaskUtils.Wait(monitorTask); } } } diff --git a/src/NetMQ.Tests/RadioDish.cs b/src/NetMQ.Tests/RadioDish.cs index 676f85d49..d97b871d3 100644 --- a/src/NetMQ.Tests/RadioDish.cs +++ b/src/NetMQ.Tests/RadioDish.cs @@ -1,5 +1,6 @@ using System; using System.Threading; +using System.Threading.Tasks; using NetMQ.Sockets; using Xunit; using Xunit.Abstractions; @@ -47,7 +48,7 @@ public void TestBlocking() } [Fact] - public async void TestAsync() + public async Task TestAsync() { using var radio = new RadioSocket(); using var dish = new DishSocket(); diff --git a/src/NetMQ.Tests/RouterTests.cs b/src/NetMQ.Tests/RouterTests.cs index 0633b6a71..daacc230e 100644 --- a/src/NetMQ.Tests/RouterTests.cs +++ b/src/NetMQ.Tests/RouterTests.cs @@ -44,7 +44,7 @@ public void ReceiveReadyDot35Bug() using (var server = new RouterSocket()) { server.BindRandomPort("tcp://127.0.0.1"); - server.ReceiveReady += (s, e) => Assert.True(false, "Should not receive"); + server.ReceiveReady += (s, e) => Assert.Fail("Should not receive"); Assert.False(server.Poll(TimeSpan.FromMilliseconds(1500))); } diff --git a/src/NetMQ.Tests/ScatterGather.cs b/src/NetMQ.Tests/ScatterGather.cs index 6847c5961..affc82e44 100644 --- a/src/NetMQ.Tests/ScatterGather.cs +++ b/src/NetMQ.Tests/ScatterGather.cs @@ -1,4 +1,5 @@ using System.Threading; +using System.Threading.Tasks; using NetMQ.Sockets; using Xunit; @@ -47,7 +48,7 @@ public void TestBlocking() } [Fact] - public async void TestAsync() + public async Task TestAsync() { using var scatter = new ScatterSocket(); using var gather = new GatherSocket(); diff --git a/src/NetMQ.Tests/SocketTests.cs b/src/NetMQ.Tests/SocketTests.cs index 87072d62c..4a0c3e241 100644 --- a/src/NetMQ.Tests/SocketTests.cs +++ b/src/NetMQ.Tests/SocketTests.cs @@ -134,7 +134,7 @@ public void ReceiveMessageWithTimeout() t1.Start(); t2.Start(); - Task.WaitAll(t1, t2); + TaskUtils.WaitAll(new[]{t1, t2}); } } diff --git a/src/NetMQ.Tests/TaskUtils.cs b/src/NetMQ.Tests/TaskUtils.cs new file mode 100644 index 000000000..d6381fc6f --- /dev/null +++ b/src/NetMQ.Tests/TaskUtils.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; + +namespace NetMQ.Tests +{ + internal class TaskUtils + { + internal static async Task PollUntil(Func condition, TimeSpan timeout) + { + var cts = new CancellationTokenSource(); + cts.CancelAfter(timeout); + + await PollUntil(condition, cts.Token); + } + + internal static async Task PollUntil(Func condition, CancellationToken ct = default) + { + try + { + while (!condition()) + { + await Task.Delay(25, ct).ConfigureAwait(true); + } + } + catch (TaskCanceledException) + { + // Task was cancelled. Ignore exception and return. + } + } + + internal static bool WaitAll(IEnumerable tasks, TimeSpan timeout) + { + PollUntil(() => tasks.All(t => t.IsCompleted), timeout).Wait(); + return tasks.All(t => t.Status == TaskStatus.RanToCompletion); + } + + internal static void WaitAll(IEnumerable tasks) + { + PollUntil(() => tasks.All(t => t.IsCompleted), Timeout.InfiniteTimeSpan).Wait(); + } + + internal static bool Wait(Task task, TimeSpan timeout) + { + PollUntil(() => task.IsCompleted, timeout).Wait(); + return task.Status == TaskStatus.RanToCompletion; + } + + internal static void Wait(Task task) + { + PollUntil(() => task.IsCompleted, Timeout.InfiniteTimeSpan).Wait(); + } + } +} diff --git a/src/NetMQ.Tests/XPubSubTests.cs b/src/NetMQ.Tests/XPubSubTests.cs index 14d730e7e..a0a136749 100644 --- a/src/NetMQ.Tests/XPubSubTests.cs +++ b/src/NetMQ.Tests/XPubSubTests.cs @@ -332,7 +332,7 @@ public void Manual() sub.SendFrame(new byte[] { 1, (byte)'A' }); var subscription = pub.ReceiveFrameBytes(); - Assert.Equal(subscription[1], (byte)'A'); + Assert.Equal((byte)'A', subscription[1]); pub.Subscribe("B"); pub.SendFrame("A"); @@ -356,7 +356,7 @@ public void WelcomeMessage() var subscription = pub.ReceiveFrameBytes(); - Assert.Equal(subscription[1], (byte)'W'); + Assert.Equal((byte)'W', subscription[1]); Assert.Equal("W", sub.ReceiveFrameString()); } @@ -377,7 +377,7 @@ public void ClearWelcomeMessage() var subscription = pub.ReceiveFrameBytes(); - Assert.Equal(subscription[1], (byte)'W'); + Assert.Equal((byte)'W', subscription[1]); Assert.False(sub.TrySkipFrame()); }