archiver: tests: fix several timing nits
Once we've signaled a cond var, it may take some small amount of time for the goroutines released to hit the spot we're wanting them to be at. Give them an appropriate amount of time.
This commit is contained in:
parent
3b8eac493b
commit
59786fe125
1 changed files with 24 additions and 5 deletions
|
@ -37,6 +37,21 @@ func allComplete(inFlight []*ArchiveRequest) bool {
|
||||||
return true
|
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) {
|
func releaseOneEntry(t *testing.T, inFlight []*ArchiveRequest) {
|
||||||
var nowQueued, numQueued int
|
var nowQueued, numQueued int
|
||||||
|
|
||||||
|
@ -58,7 +73,7 @@ func releaseOneEntry(t *testing.T, inFlight []*ArchiveRequest) {
|
||||||
assert.NotEqual(t, nowQueued, numQueued)
|
assert.NotEqual(t, nowQueued, numQueued)
|
||||||
|
|
||||||
// Also make sure that we released only one.
|
// 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) {
|
func TestArchive_Basic(t *testing.T) {
|
||||||
|
@ -106,16 +121,20 @@ func TestArchive_Basic(t *testing.T) {
|
||||||
inFlight[2] = secondReq
|
inFlight[2] = secondReq
|
||||||
|
|
||||||
ArchiveRepository(zipReq)
|
ArchiveRepository(zipReq)
|
||||||
assert.Equal(t, len(archiveInProgress), 1)
|
waitForCount(t, 1)
|
||||||
ArchiveRepository(tgzReq)
|
ArchiveRepository(tgzReq)
|
||||||
assert.Equal(t, len(archiveInProgress), 2)
|
waitForCount(t, 2)
|
||||||
ArchiveRepository(secondReq)
|
ArchiveRepository(secondReq)
|
||||||
assert.Equal(t, len(archiveInProgress), 3)
|
waitForCount(t, 3)
|
||||||
|
|
||||||
// Make sure sending an unprocessed request through doesn't affect the queue
|
// Make sure sending an unprocessed request through doesn't affect the queue
|
||||||
// count.
|
// count.
|
||||||
ArchiveRepository(zipReq)
|
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
|
// Release them all, they'll then stall at the archiveQueueReleaseCond while
|
||||||
// we examine the queue state.
|
// we examine the queue state.
|
||||||
|
|
Loading…
Reference in a new issue