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
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) {
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.