@@ -2,9 +2,13 @@ package verifier
22
33import (
44 "context"
5+ "strings"
56
67 "go.mongodb.org/mongo-driver/bson"
78 "go.mongodb.org/mongo-driver/mongo"
9+ "go.mongodb.org/mongo-driver/mongo/options"
10+
11+ "github.com/10gen/migration-verifier/internal/partitions"
812)
913
1014func (suite * MultiDataVersionTestSuite ) TestResetPrimaryTask () {
@@ -36,7 +40,9 @@ func (suite *MultiDataVersionTestSuite) TestResetPrimaryTask() {
3640 suite .Assert ().Len (taskDocs , 1 )
3741}
3842
39- func (suite * MultiDataVersionTestSuite ) TestResetCollectionTasks () {
43+ func (suite * MultiDataVersionTestSuite ) TestResetNonPrimaryTasks () {
44+ ctx := context .Background ()
45+
4046 verifier := buildVerifier (suite .T (), suite .srcMongoInstance , suite .dstMongoInstance , suite .metaMongoInstance )
4147
4248 // Create a primary task, and set it to complete.
@@ -59,28 +65,39 @@ func (suite *MultiDataVersionTestSuite) TestResetCollectionTasks() {
5965 verifier .UpdateVerificationTask (collTask ),
6066 )
6167
62- // Create four partition tasks: three with the same namespace as the
68+ // Create three partition tasks with the same namespace as the
6369 // collection-verification task (status=[added, processing, completed]),
6470 // and another for a different namespace that’s completed.
65- for _ , status := range []verificationTaskStatus {
66- verificationTaskAdded ,
67- verificationTaskProcessing ,
68- verificationTaskCompleted ,
71+ for _ , taskParts := range []struct {
72+ Status verificationTaskStatus
73+ Namespace string
74+ }{
75+ {verificationTaskAdded , ns1 },
76+ {verificationTaskProcessing , ns1 },
77+ {verificationTaskCompleted , ns1 },
78+ {verificationTaskAdded , ns2 },
79+ {verificationTaskProcessing , ns2 },
80+ {verificationTaskCompleted , ns2 },
6981 } {
7082 task , err := verifier .InsertPartitionVerificationTask (
7183 & partitions.Partition {
72- Ns : & partition. NameSpace {
73- DB : "foo" ,
74- Coll : "bar" ,
84+ Ns : & partitions. Namespace {
85+ DB : strings . Split ( taskParts . Namespace , "." )[ 0 ] ,
86+ Coll : strings . Split ( taskParts . Namespace , "." )[ 1 ] ,
7587 },
7688 },
7789 nil ,
78- "foo.bar" ,
90+ taskParts . Namespace ,
7991 )
80- }
92+ suite . Require (). NoError ( err )
8193
82- ctx := context .Background ()
94+ task .Status = taskParts .Status
95+ suite .Require ().NoError (
96+ verifier .UpdateVerificationTask (task ),
97+ )
98+ }
8399
100+ // Reset tasks
84101 err = verifier .doInMetaTransaction (
85102 ctx ,
86103 func (_ context.Context , ctx mongo.SessionContext ) error {
@@ -89,11 +106,84 @@ func (suite *MultiDataVersionTestSuite) TestResetCollectionTasks() {
89106 )
90107 suite .Require ().NoError (err )
91108
109+ // Contents should just be the primary task and
110+ // the completed partition-level.
92111 tasksColl := verifier .verificationTaskCollection ()
93- cursor , err := tasksColl .Find (ctx , bson.M {})
112+ cursor , err := tasksColl .Find (
113+ ctx ,
114+ bson.M {},
115+ options .Find ().SetSort (bson.D {
116+ {"type" , 1 },
117+ {"query_filter.namespace" , 1 },
118+ {"status" , 1 },
119+ }),
120+ )
94121 suite .Require ().NoError (err )
95- var taskDocs []bson. M
122+ var taskDocs []VerificationTask
96123 suite .Require ().NoError (cursor .All (ctx , & taskDocs ))
97124
98- suite .Assert ().Len (taskDocs , 1 )
125+ suite .Require ().Len (taskDocs , 5 )
126+
127+ // The tasks that should remain are:
128+
129+ // the primary (completed)
130+ suite .Assert ().Equal (
131+ verificationTaskPrimary ,
132+ taskDocs [0 ].Type ,
133+ )
134+
135+ // the 2 ns2 partition tasks that weren’t completed (both “added”)
136+ suite .Assert ().Equal (
137+ verificationTaskVerifyDocuments ,
138+ taskDocs [1 ].Type ,
139+ )
140+ suite .Assert ().Equal (
141+ verificationTaskAdded ,
142+ taskDocs [1 ].Status ,
143+ )
144+ suite .Assert ().Equal (
145+ ns2 ,
146+ taskDocs [1 ].QueryFilter .Namespace ,
147+ )
148+
149+ suite .Assert ().Equal (
150+ verificationTaskVerifyDocuments ,
151+ taskDocs [2 ].Type ,
152+ )
153+ suite .Assert ().Equal (
154+ verificationTaskAdded ,
155+ taskDocs [2 ].Status ,
156+ )
157+ suite .Assert ().Equal (
158+ ns2 ,
159+ taskDocs [2 ].QueryFilter .Namespace ,
160+ )
161+
162+ // the ns2 partition task that *was* completed
163+ suite .Assert ().Equal (
164+ verificationTaskVerifyDocuments ,
165+ taskDocs [3 ].Type ,
166+ )
167+ suite .Assert ().Equal (
168+ verificationTaskCompleted ,
169+ taskDocs [3 ].Status ,
170+ )
171+ suite .Assert ().Equal (
172+ ns2 ,
173+ taskDocs [3 ].QueryFilter .Namespace ,
174+ )
175+
176+ // ns1’s verify-collection task (added state)
177+ suite .Assert ().Equal (
178+ verificationTaskVerifyCollection ,
179+ taskDocs [4 ].Type ,
180+ )
181+ suite .Assert ().Equal (
182+ verificationTaskAdded ,
183+ taskDocs [4 ].Status ,
184+ )
185+ suite .Assert ().Equal (
186+ ns1 ,
187+ taskDocs [4 ].QueryFilter .Namespace ,
188+ )
99189}
0 commit comments