Skip to content

Commit 5fc7a04

Browse files
authored
Make CheckRunner methods check to see if the verifier failed. (#56)
This prevents the test from hanging if the verifier fails for an unforeseen reason.
1 parent 76c9871 commit 5fc7a04

File tree

3 files changed

+32
-19
lines changed

3 files changed

+32
-19
lines changed

internal/verifier/change_stream_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ func (suite *IntegrationTestSuite) TestCursorKilledResilience() {
280280
verifierRunner := RunVerifierCheck(suite.Context(), suite.T(), verifier)
281281

282282
// wait for generation 0 to end
283-
verifierRunner.AwaitGenerationEnd()
283+
suite.Require().NoError(verifierRunner.AwaitGenerationEnd())
284284

285285
const mvName = "Migration Verifier"
286286

@@ -374,7 +374,7 @@ func (suite *IntegrationTestSuite) testInsertsBeforeWritesOff(docsCount int) {
374374
verifierRunner := RunVerifierCheck(suite.Context(), suite.T(), verifier)
375375

376376
// wait for generation 0 to end
377-
verifierRunner.AwaitGenerationEnd()
377+
suite.Require().NoError(verifierRunner.AwaitGenerationEnd())
378378

379379
docs := lo.RepeatBy(docsCount, func(_ int) bson.D { return bson.D{} })
380380
_, err := coll.InsertMany(
@@ -424,7 +424,7 @@ func (suite *IntegrationTestSuite) TestCreateForbidden() {
424424
verifierRunner := RunVerifierCheck(suite.Context(), suite.T(), verifier)
425425

426426
// wait for generation 0 to end
427-
verifierRunner.AwaitGenerationEnd()
427+
suite.Require().NoError(verifierRunner.AwaitGenerationEnd())
428428

429429
db := suite.srcMongoClient.Database(suite.DBNameForTest())
430430
coll := db.Collection("mycoll")

internal/verifier/check_runner.go

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package verifier
33
import (
44
"context"
55
"testing"
6+
7+
"github.com/pkg/errors"
68
)
79

810
type CheckRunner struct {
@@ -30,14 +32,25 @@ func RunVerifierCheck(ctx context.Context, t *testing.T, verifier *Verifier) *Ch
3032
}
3133

3234
// AwaitGenerationEnd blocks until the check’s current generation ends.
33-
func (cr *CheckRunner) AwaitGenerationEnd() {
34-
<-cr.generationDoneChan
35+
func (cr *CheckRunner) AwaitGenerationEnd() error {
36+
select {
37+
case <-cr.generationDoneChan:
38+
return nil
39+
case err := <-cr.checkDoneChan:
40+
return errors.Wrap(err, "verifier failed while test awaited generation completion")
41+
}
3542
}
3643

3744
// StartNextGeneration blocks until it can tell the check to start
3845
// the next generation.
39-
func (cr *CheckRunner) StartNextGeneration() {
40-
cr.doNextGenerationChan <- struct{}{}
46+
func (cr *CheckRunner) StartNextGeneration() error {
47+
select {
48+
case cr.doNextGenerationChan <- struct{}{}:
49+
return nil
50+
case err := <-cr.checkDoneChan:
51+
return errors.Wrap(err, "verifier failed while test waited to start next generation")
52+
}
53+
4154
}
4255

4356
// Await will await generations and start new ones until the check

internal/verifier/migration_verifier_test.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1245,7 +1245,7 @@ func (suite *IntegrationTestSuite) TestMetadataMismatchAndPartitioning() {
12451245
suite.Require().NoError(err)
12461246

12471247
runner := RunVerifierCheck(ctx, suite.T(), verifier)
1248-
runner.AwaitGenerationEnd()
1248+
suite.Require().NoError(runner.AwaitGenerationEnd())
12491249

12501250
cursor, err := verifier.verificationTaskCollection().Find(
12511251
ctx,
@@ -1263,8 +1263,8 @@ func (suite *IntegrationTestSuite) TestMetadataMismatchAndPartitioning() {
12631263
suite.Require().Equal(verificationTaskVerifyCollection, tasks[1].Type)
12641264
suite.Require().Equal(verificationTaskMetadataMismatch, tasks[1].Status)
12651265

1266-
runner.StartNextGeneration()
1267-
runner.AwaitGenerationEnd()
1266+
suite.Require().NoError(runner.StartNextGeneration())
1267+
suite.Require().NoError(runner.AwaitGenerationEnd())
12681268

12691269
cursor, err = verifier.verificationTaskCollection().Find(
12701270
ctx,
@@ -1310,16 +1310,16 @@ func (suite *IntegrationTestSuite) TestGenerationalRechecking() {
13101310
suite.T().Logf("TotalTasks is 0 (generation=%d); waiting %s then will run another generation …", verifier.generation, delay)
13111311

13121312
time.Sleep(delay)
1313-
runner.StartNextGeneration()
1314-
runner.AwaitGenerationEnd()
1313+
suite.Require().NoError(runner.StartNextGeneration())
1314+
suite.Require().NoError(runner.AwaitGenerationEnd())
13151315
status, err = verifier.GetVerificationStatus()
13161316
suite.Require().NoError(err)
13171317
}
13181318
return status
13191319
}
13201320

13211321
// wait for one generation to finish
1322-
runner.AwaitGenerationEnd()
1322+
suite.Require().NoError(runner.AwaitGenerationEnd())
13231323
status := waitForTasks()
13241324
suite.Require().Equal(VerificationStatus{TotalTasks: 2, FailedTasks: 1, CompletedTasks: 1}, *status)
13251325

@@ -1328,10 +1328,10 @@ func (suite *IntegrationTestSuite) TestGenerationalRechecking() {
13281328
suite.Require().NoError(err)
13291329

13301330
// tell check to start the next generation
1331-
runner.StartNextGeneration()
1331+
suite.Require().NoError(runner.StartNextGeneration())
13321332

13331333
// wait for generation to finish
1334-
runner.AwaitGenerationEnd()
1334+
suite.Require().NoError(runner.AwaitGenerationEnd())
13351335
status = waitForTasks()
13361336
// there should be no failures now, since they are are equivalent at this point in time
13371337
suite.Require().Equal(VerificationStatus{TotalTasks: 1, CompletedTasks: 1}, *status)
@@ -1341,10 +1341,10 @@ func (suite *IntegrationTestSuite) TestGenerationalRechecking() {
13411341
suite.Require().NoError(err)
13421342

13431343
// tell check to start the next generation
1344-
runner.StartNextGeneration()
1344+
suite.Require().NoError(runner.StartNextGeneration())
13451345

13461346
// wait for one generation to finish
1347-
runner.AwaitGenerationEnd()
1347+
suite.Require().NoError(runner.AwaitGenerationEnd())
13481348
status = waitForTasks()
13491349

13501350
// there should be a failure from the src insert
@@ -1355,10 +1355,10 @@ func (suite *IntegrationTestSuite) TestGenerationalRechecking() {
13551355
suite.Require().NoError(err)
13561356

13571357
// continue
1358-
runner.StartNextGeneration()
1358+
suite.Require().NoError(runner.StartNextGeneration())
13591359

13601360
// wait for it to finish again, this should be a clean run
1361-
runner.AwaitGenerationEnd()
1361+
suite.Require().NoError(runner.AwaitGenerationEnd())
13621362
status = waitForTasks()
13631363

13641364
// there should be no failures now, since they are are equivalent at this point in time

0 commit comments

Comments
 (0)