@@ -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"
@@ -1202,6 +1203,68 @@ func (suite *IntegrationTestSuite) TestVerificationStatus() {
12021203 suite .Equal (1 , status .CompletedTasks , "completed tasks not equal" )
12031204}
12041205
1206+ func (suite * IntegrationTestSuite ) TestMetadataMismatchAndPartitioning () {
1207+ ctx := suite .Context ()
1208+
1209+ srcColl := suite .srcMongoClient .Database (suite .DBNameForTest ()).Collection ("coll" )
1210+ dstColl := suite .dstMongoClient .Database (suite .DBNameForTest ()).Collection ("coll" )
1211+
1212+ verifier := suite .BuildVerifier ()
1213+
1214+ ns := srcColl .Database ().Name () + "." + srcColl .Name ()
1215+ verifier .SetSrcNamespaces ([]string {ns })
1216+ verifier .SetDstNamespaces ([]string {ns })
1217+ verifier .SetNamespaceMap ()
1218+
1219+ for _ , coll := range mslices .Of (srcColl , dstColl ) {
1220+ _ , err := coll .InsertOne (ctx , bson.M {"_id" : 1 , "x" : 42 })
1221+ suite .Require ().NoError (err )
1222+ }
1223+
1224+ _ , err := srcColl .Indexes ().CreateOne (
1225+ ctx ,
1226+ mongo.IndexModel {
1227+ Keys : bson.D {{"foo" , 1 }},
1228+ },
1229+ )
1230+ suite .Require ().NoError (err )
1231+
1232+ runner := RunVerifierCheck (ctx , suite .T (), verifier )
1233+ runner .AwaitGenerationEnd ()
1234+
1235+ cursor , err := verifier .verificationTaskCollection ().Find (
1236+ ctx ,
1237+ bson.M {"generation" : 0 },
1238+ options .Find ().SetSort (bson.M {"type" : 1 }),
1239+ )
1240+ suite .Require ().NoError (err )
1241+
1242+ var tasks []VerificationTask
1243+ suite .Require ().NoError (cursor .All (ctx , & tasks ))
1244+
1245+ suite .Require ().Len (tasks , 2 )
1246+ suite .Require ().Equal (verificationTaskVerifyDocuments , tasks [0 ].Type )
1247+ suite .Require ().Equal (verificationTaskCompleted , tasks [0 ].Status )
1248+ suite .Require ().Equal (verificationTaskVerifyCollection , tasks [1 ].Type )
1249+ suite .Require ().Equal (verificationTaskMetadataMismatch , tasks [1 ].Status )
1250+
1251+ runner .StartNextGeneration ()
1252+ runner .AwaitGenerationEnd ()
1253+
1254+ cursor , err = verifier .verificationTaskCollection ().Find (
1255+ ctx ,
1256+ bson.M {"generation" : 1 },
1257+ options .Find ().SetSort (bson.M {"type" : 1 }),
1258+ )
1259+ suite .Require ().NoError (err )
1260+
1261+ suite .Require ().NoError (cursor .All (ctx , & tasks ))
1262+
1263+ suite .Require ().Len (tasks , 1 , "generation 1 should only have done 1 task" )
1264+ suite .Require ().Equal (verificationTaskVerifyCollection , tasks [0 ].Type )
1265+ suite .Require ().Equal (verificationTaskMetadataMismatch , tasks [0 ].Status )
1266+ }
1267+
12051268func (suite * IntegrationTestSuite ) TestGenerationalRechecking () {
12061269 zerolog .SetGlobalLevel (zerolog .DebugLevel )
12071270 verifier := suite .BuildVerifier ()
0 commit comments