X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/0d9da683cb9572f6b5ba3f65376066938e701fb4..0025e3e72aea2388491a801e7bd512ab72fff16a:/services/keepstore/trash_worker_test.go diff --git a/services/keepstore/trash_worker_test.go b/services/keepstore/trash_worker_test.go index 8268191b08..40b291e6f3 100644 --- a/services/keepstore/trash_worker_test.go +++ b/services/keepstore/trash_worker_test.go @@ -258,8 +258,36 @@ func performTrashWorkerTest(testData TrashWorkerTestData, t *testing.T) { } go RunTrashWorker(trashq) + // Install gate so all local operations block until we say go + gate := make(chan struct{}) + for _, v := range vols { + v.(*MockVolume).Gate = gate + } + + assertStatusItem := func(k string, expect float64) { + if v := getStatusItem("TrashQueue", k); v != expect { + t.Errorf("Got %s %v, expected %v", k, v, expect) + } + } + + assertStatusItem("InProgress", 0) + assertStatusItem("Queued", 0) + + listLen := trashList.Len() trashq.ReplaceQueue(trashList) - time.Sleep(10 * time.Millisecond) // give a moment to finish processing the list + + // Wait for worker to take request(s) + expectEqualWithin(t, time.Second, listLen, func() interface{} { return trashq.Status().InProgress }) + + // Ensure status.json also reports work is happening + assertStatusItem("InProgress", float64(1)) + assertStatusItem("Queued", float64(listLen-1)) + + // Let worker proceed + close(gate) + + // Wait for worker to finish + expectEqualWithin(t, time.Second, 0, func() interface{} { return trashq.Status().InProgress }) // Verify Locator1 to be un/deleted as expected data, _ := GetBlock(testData.Locator1, false)