Skip to content

Commit 0ac317f

Browse files
committed
add test, and mslices.Of
1 parent 61b2ccc commit 0ac317f

File tree

3 files changed

+100
-0
lines changed

3 files changed

+100
-0
lines changed

internal/verifier/migration_verifier_test.go

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818

1919
"github.com/10gen/migration-verifier/internal/partitions"
2020
"github.com/10gen/migration-verifier/internal/testutil"
21+
"github.com/10gen/migration-verifier/mslices"
2122
"github.com/cespare/permute/v2"
2223
"github.com/rs/zerolog"
2324
"github.com/samber/lo"
@@ -1283,6 +1284,67 @@ func (suite *IntegrationTestSuite) TestVerificationStatus() {
12831284
suite.Equal(1, status.CompletedTasks, "completed tasks not equal")
12841285
}
12851286

1287+
func (suite *IntegrationTestSuite) TestMetadataMismatchAndPartitioning() {
1288+
ctx := suite.Context()
1289+
1290+
srcColl := suite.srcMongoClient.Database(suite.DBNameForTest()).Collection("coll")
1291+
dstColl := suite.dstMongoClient.Database(suite.DBNameForTest()).Collection("coll")
1292+
1293+
verifier := suite.BuildVerifier()
1294+
1295+
ns := srcColl.Database().Name() + "." + srcColl.Name()
1296+
verifier.SetSrcNamespaces([]string{ns})
1297+
verifier.SetDstNamespaces([]string{ns})
1298+
verifier.SetNamespaceMap()
1299+
1300+
for _, coll := range mslices.Of(srcColl, dstColl) {
1301+
_, err := coll.InsertOne(ctx, bson.M{"_id": 1, "x": 42})
1302+
suite.Require().NoError(err)
1303+
}
1304+
1305+
srcColl.Indexes().CreateOne(
1306+
ctx,
1307+
mongo.IndexModel{
1308+
Keys: bson.D{{"foo", 1}},
1309+
},
1310+
)
1311+
1312+
runner := RunVerifierCheck(ctx, suite.T(), verifier)
1313+
runner.AwaitGenerationEnd()
1314+
1315+
cursor, err := verifier.verificationTaskCollection().Find(
1316+
ctx,
1317+
bson.M{"generation": 0},
1318+
options.Find().SetSort(bson.M{"type": 1}),
1319+
)
1320+
suite.Require().NoError(err)
1321+
1322+
var tasks []VerificationTask
1323+
suite.Require().NoError(cursor.All(ctx, &tasks))
1324+
1325+
suite.Require().Len(tasks, 2)
1326+
suite.Require().Equal(verificationTaskVerifyDocuments, tasks[0].Type)
1327+
suite.Require().Equal(verificationTaskCompleted, tasks[0].Status)
1328+
suite.Require().Equal(verificationTaskVerifyCollection, tasks[1].Type)
1329+
suite.Require().Equal(verificationTaskMetadataMismatch, tasks[1].Status)
1330+
1331+
runner.StartNextGeneration()
1332+
runner.AwaitGenerationEnd()
1333+
1334+
cursor, err = verifier.verificationTaskCollection().Find(
1335+
ctx,
1336+
bson.M{"generation": 1},
1337+
options.Find().SetSort(bson.M{"type": 1}),
1338+
)
1339+
suite.Require().NoError(err)
1340+
1341+
suite.Require().NoError(cursor.All(ctx, &tasks))
1342+
1343+
suite.Require().Len(tasks, 1, "generation 1 should only have done 1 task")
1344+
suite.Require().Equal(verificationTaskVerifyCollection, tasks[0].Type)
1345+
suite.Require().Equal(verificationTaskMetadataMismatch, tasks[0].Status)
1346+
}
1347+
12861348
func (suite *IntegrationTestSuite) TestGenerationalRechecking() {
12871349
zerolog.SetGlobalLevel(zerolog.DebugLevel)
12881350
verifier := suite.BuildVerifier()

mslices/slices.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package mslices
2+
3+
// This package complements the Go standard library’s package of the
4+
// same name with broadly-useful tools that the standard library lacks.
5+
6+
// Of returns a slice out of the given arguments. It’s syntactic sugar
7+
// to capitalize on Go’s type inference, similar to
8+
// [this declined feature proposal](https://github.com/golang/go/issues/47709).
9+
func Of[T any](pieces ...T) []T {
10+
return append([]T{}, pieces...)
11+
}

mslices/slices_test.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package mslices
2+
3+
import (
4+
"testing"
5+
6+
"github.com/stretchr/testify/suite"
7+
)
8+
9+
type mySuite struct {
10+
suite.Suite
11+
}
12+
13+
func TestUnitTestSuite(t *testing.T) {
14+
suite.Run(t, &mySuite{})
15+
}
16+
17+
func (s *mySuite) Test_Of() {
18+
slc := Of(12, 23, 34)
19+
20+
s.Assert().IsType([]int{}, slc, "expected type")
21+
22+
a := []int{1, 2, 3}
23+
b := Of(a...)
24+
a[0] = 4
25+
26+
s.Assert().Equal(1, b[0], "should copy slice")
27+
}

0 commit comments

Comments
 (0)