@@ -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+
12861348func (suite * IntegrationTestSuite ) TestGenerationalRechecking () {
12871349 zerolog .SetGlobalLevel (zerolog .DebugLevel )
12881350 verifier := suite .BuildVerifier ()
0 commit comments