From dcccffced278e351213ad524bb3c75c512fa1d10 Mon Sep 17 00:00:00 2001 From: hannahhoward Date: Thu, 7 Oct 2021 12:38:35 -0700 Subject: [PATCH] test(responsemanager): fix flakiness TestCancellationViaCommand Resolve issue that caused TestCancellationViaCommand to sometimes fail as the request was already finished --- responsemanager/responsemanager_test.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/responsemanager/responsemanager_test.go b/responsemanager/responsemanager_test.go index 99865aaf..cfe1365e 100644 --- a/responsemanager/responsemanager_test.go +++ b/responsemanager/responsemanager_test.go @@ -101,6 +101,15 @@ func TestCancellationViaCommand(t *testing.T) { defer td.cancel() responseManager := td.newResponseManager() td.requestHooks.Register(selectorvalidator.SelectorValidator(100)) + // This block hook is simply used to pause block hook processing after 1 block until the cancel command is sent + blkCount := 0 + waitForCancel := make(chan struct{}) + td.blockHooks.Register(func(p peer.ID, requestData graphsync.RequestData, blockData graphsync.BlockData, hookActions graphsync.OutgoingBlockHookActions) { + if blkCount == 1 { + <-waitForCancel + } + blkCount++ + }) responseManager.Startup() responseManager.ProcessRequests(td.ctx, td.p, td.requests) @@ -110,6 +119,7 @@ func TestCancellationViaCommand(t *testing.T) { // send a cancellation err := responseManager.CancelResponse(td.p, td.requestID) require.NoError(t, err) + close(waitForCancel) td.assertCompleteRequestWith(graphsync.RequestCancelled) td.connManager.RefuteProtected(t, td.p)