From 5a2b7d0770260db4e6cf1b9bddc751208cc1f2f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCnther=20Foidl?= Date: Wed, 16 Dec 2020 19:27:07 +0100 Subject: [PATCH 1/2] Enable GetHostEntryAsync_InvalidHost_LogsError on Windows too --- .../tests/FunctionalTests/LoggingTest.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/libraries/System.Net.NameResolution/tests/FunctionalTests/LoggingTest.cs b/src/libraries/System.Net.NameResolution/tests/FunctionalTests/LoggingTest.cs index dacc47eaae2af9..f923955fc620cb 100644 --- a/src/libraries/System.Net.NameResolution/tests/FunctionalTests/LoggingTest.cs +++ b/src/libraries/System.Net.NameResolution/tests/FunctionalTests/LoggingTest.cs @@ -63,7 +63,6 @@ public void GetHostEntry_InvalidHost_LogsError() } [ConditionalFact] - [PlatformSpecific(~TestPlatforms.Windows)] // Unreliable on Windows. public async Task GetHostEntryAsync_InvalidHost_LogsError() { using (var listener = new TestEventListener("Private.InternalDiagnostics.System.Net.NameResolution", EventLevel.Error)) From b723ccd03e2c27b45d24e757ddcf9433a62966a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCnther=20Foidl?= Date: Sat, 16 Jan 2021 11:36:06 +0100 Subject: [PATCH 2/2] Use WaitForErrorEventAsync instead of a naive Task.Delay Cf. https://github.com/dotnet/runtime/pull/47034#discussion_r558728557 --- .../tests/FunctionalTests/LoggingTest.cs | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/libraries/System.Net.NameResolution/tests/FunctionalTests/LoggingTest.cs b/src/libraries/System.Net.NameResolution/tests/FunctionalTests/LoggingTest.cs index f923955fc620cb..915067acffbbfc 100644 --- a/src/libraries/System.Net.NameResolution/tests/FunctionalTests/LoggingTest.cs +++ b/src/libraries/System.Net.NameResolution/tests/FunctionalTests/LoggingTest.cs @@ -78,8 +78,7 @@ await listener.RunWithCallbackAsync(ev => events.Enqueue(ev), async () => } catch (SocketException e) when (e.SocketErrorCode == SocketError.HostNotFound) { - // Wait a bit to let the event source write it's log - await Task.Delay(100).ConfigureAwait(false); + await WaitForErrorEventAsync(events); } catch (Exception e) { @@ -96,6 +95,20 @@ await listener.RunWithCallbackAsync(ev => events.Enqueue(ev), async () => Assert.NotNull(ev.Payload[2]); } } + + static async Task WaitForErrorEventAsync(ConcurrentQueue events) + { + const int ErrorEventId = 5; + DateTime startTime = DateTime.UtcNow; + + while (!events.Any(e => e.EventId == ErrorEventId)) + { + if (DateTime.UtcNow.Subtract(startTime) > TimeSpan.FromSeconds(30)) + throw new TimeoutException("Timeout waiting for error event"); + + await Task.Delay(100); + } + } } [ConditionalFact]