diff --git a/services/archiver/archiver_test.go b/services/archiver/archiver_test.go index bfeeb24f1e..cfbe646db9 100644 --- a/services/archiver/archiver_test.go +++ b/services/archiver/archiver_test.go @@ -37,6 +37,21 @@ func allComplete(inFlight []*ArchiveRequest) bool { return true } +func waitForCount(t *testing.T, num int) { + var numQueued int + + // Wait for 3 seconds to hit the queue. + timeout := time.Now().Add(3 * time.Second) + for { + numQueued = len(archiveInProgress) + if numQueued == num || time.Now().After(timeout) { + break + } + } + + assert.Equal(t, num, len(archiveInProgress)) +} + func releaseOneEntry(t *testing.T, inFlight []*ArchiveRequest) { var nowQueued, numQueued int @@ -58,7 +73,7 @@ func releaseOneEntry(t *testing.T, inFlight []*ArchiveRequest) { assert.NotEqual(t, nowQueued, numQueued) // Also make sure that we released only one. - assert.Equal(t, nowQueued, numQueued+1) + assert.Equal(t, nowQueued, numQueued-1) } func TestArchive_Basic(t *testing.T) { @@ -106,16 +121,20 @@ func TestArchive_Basic(t *testing.T) { inFlight[2] = secondReq ArchiveRepository(zipReq) - assert.Equal(t, len(archiveInProgress), 1) + waitForCount(t, 1) ArchiveRepository(tgzReq) - assert.Equal(t, len(archiveInProgress), 2) + waitForCount(t, 2) ArchiveRepository(secondReq) - assert.Equal(t, len(archiveInProgress), 3) + waitForCount(t, 3) // Make sure sending an unprocessed request through doesn't affect the queue // count. ArchiveRepository(zipReq) - assert.Equal(t, len(archiveInProgress), 3) + + // Sleep two seconds to make sure the queue doesn't change. + two_seconds, _ := time.ParseDuration("2s") + time.Sleep(two_seconds) + assert.Equal(t, 3, len(archiveInProgress)) // Release them all, they'll then stall at the archiveQueueReleaseCond while // we examine the queue state.