Skip to content

Commit ac342a2

Browse files
committed
Make CheckRunner methods check to see if the verifier failed.
This prevents the test from hanging if the verifier fails for an unforeseen reason.
1 parent da9b7a6 commit ac342a2

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)