diff --git a/.github/workflows/handle-stale-discussions.yml b/.github/workflows/handle-stale-discussions.yml index bfa00bd..25a7055 100644 --- a/.github/workflows/handle-stale-discussions.yml +++ b/.github/workflows/handle-stale-discussions.yml @@ -13,6 +13,6 @@ jobs: discussions: write steps: - name: Stale discussions action - uses: aws-github-ops/handle-stale-discussions@711a9813957be17629fc6933afcd8bd132c57254 #v1.6 + uses: aws-github-ops/handle-stale-discussions@c0beee451a5d33d9c8f048a6d4e7c856b5422544 #v1.6.0 env: GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} diff --git a/test/AWS.Messaging.UnitTests/SQSMessagePollerTests.cs b/test/AWS.Messaging.UnitTests/SQSMessagePollerTests.cs index 561df41..f2dbf62 100644 --- a/test/AWS.Messaging.UnitTests/SQSMessagePollerTests.cs +++ b/test/AWS.Messaging.UnitTests/SQSMessagePollerTests.cs @@ -78,8 +78,11 @@ public async Task SQSMessagePoller_PollingControlStopped_DoesNotPollSQS() public async Task SQSMessagePoller_PollingControlRestarted_PollsSQS() { var client = new Mock(); + var messageReceived = new TaskCompletionSource(); client.Setup(x => x.ReceiveMessageAsync(It.IsAny(), It.IsAny())) - .ReturnsAsync(new ReceiveMessageResponse(), TimeSpan.FromMilliseconds(50)); + .ReturnsAsync(new ReceiveMessageResponse(), TimeSpan.FromMilliseconds(50)) + .Callback(() => messageReceived.TrySetResult(true)); + var pollingControlToken = new PollingControlToken { PollingWaitTime = TimeSpan.FromMilliseconds(25) @@ -90,12 +93,24 @@ public async Task SQSMessagePoller_PollingControlRestarted_PollsSQS() var pump = BuildMessagePumpService(client, options => { options.WaitTimeSeconds = 1; }, pollingControlToken: pollingControlToken); var task = pump.StartAsync(source.Token); + // Verify no messages are received while polling is stopped client.Verify(x => x.ReceiveMessageAsync(It.IsAny(), It.IsAny()), Times.Never); + // Start polling and wait for a message to be received pollingControlToken.StartPolling(); + + // Wait for a message to be received with a timeout + using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5)); + try + { + await messageReceived.Task.WaitAsync(cts.Token); + } + catch (OperationCanceledException) + { + Assert.Fail("Timed out waiting for message to be received after polling was restarted"); + } - SpinWait.SpinUntil(() => false, pollingControlToken.PollingWaitTime * 5); - + // Verify that messages were received client.Verify(x => x.ReceiveMessageAsync(It.IsAny(), It.IsAny()), Times.AtLeastOnce()); source.Cancel();