From 5babf7c43c549d34308ff6333a7bc1d3cb7de85d Mon Sep 17 00:00:00 2001 From: Remy Willems Date: Mon, 1 Apr 2024 16:59:12 +0200 Subject: [PATCH] Provide more information when waiting for notification times out (#5282) ### Description Provide more information when waiting for notification times out, which will help debug unstable tests ### How has this been tested? Change to testing By submitting this pull request, I confirm that my contribution is made under the terms of the [MIT license](https://github.com/dafny-lang/dafny/blob/master/LICENSE.txt). --- .../Util/ClientBasedLanguageServerTest.cs | 8 +++++--- .../Util/TestNotificationReceiver.cs | 6 ++++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/Source/DafnyLanguageServer.Test/Util/ClientBasedLanguageServerTest.cs b/Source/DafnyLanguageServer.Test/Util/ClientBasedLanguageServerTest.cs index 88fc061f95..3cbecd6617 100644 --- a/Source/DafnyLanguageServer.Test/Util/ClientBasedLanguageServerTest.cs +++ b/Source/DafnyLanguageServer.Test/Util/ClientBasedLanguageServerTest.cs @@ -176,7 +176,7 @@ protected async Task WaitUntilAllStatusAreCompleted(Text bool allowStale = false) { cancellationToken ??= CancellationToken; - if ((!await WaitUntilResolutionFinished(documentId, cancellationToken))) { + if ((!await WaitUntilResolutionFinished(documentId, cancellationToken.Value))) { return null; } @@ -198,11 +198,13 @@ bool FinishedStatus(NamedVerifiableStatus method) { } } - public async Task WaitUntilResolutionFinished(TextDocumentItem documentId, CancellationToken? cancellationToken) { + public async Task WaitUntilResolutionFinished(TextDocumentItem documentId, + CancellationToken cancellationToken = default) { + CompilationStatusParams compilationStatusParams = compilationStatusReceiver.GetLast(s => s.Uri == documentId.Uri); while (compilationStatusParams == null || compilationStatusParams.Version != documentId.Version || compilationStatusParams.Uri != documentId.Uri || compilationStatusParams.Status is CompilationStatus.Parsing or CompilationStatus.ResolutionStarted) { - compilationStatusParams = await compilationStatusReceiver.AwaitNextNotificationAsync(cancellationToken.Value); + compilationStatusParams = await compilationStatusReceiver.AwaitNextNotificationAsync(cancellationToken); } return compilationStatusParams.Status == CompilationStatus.ResolutionSucceeded; diff --git a/Source/DafnyLanguageServer.Test/Util/TestNotificationReceiver.cs b/Source/DafnyLanguageServer.Test/Util/TestNotificationReceiver.cs index 49f49f724e..b156adf4b5 100644 --- a/Source/DafnyLanguageServer.Test/Util/TestNotificationReceiver.cs +++ b/Source/DafnyLanguageServer.Test/Util/TestNotificationReceiver.cs @@ -55,13 +55,15 @@ public async Task AwaitNextNotificationAsync(CancellationToken ca try { await availableNotifications.WaitAsync(cancellationToken); } catch (OperationCanceledException) { - logger.LogInformation($"Waited for {(DateTime.Now - start).Seconds} seconds"); + var last = History.Any() ? History[-1].Stringify() : "none"; + logger.LogInformation($"Waited for {(DateTime.Now - start).Seconds} seconds for new notification.\n" + + $"Last received notification was {last}"); throw; } if (notifications.TryDequeue(out var notification)) { return notification; } - throw new System.InvalidOperationException("got a signal for a received notification but it was not present in the queue"); + throw new InvalidOperationException("got a signal for a received notification but it was not present in the queue"); } } }