@@ -283,7 +283,7 @@ func (suite *IntegrationTestSuite) getClusterTime(ctx context.Context, client *m
283283 sctx := mongo .NewSessionContext (ctx , sess )
284284 suite .Require ().NoError (sess .Client ().Ping (sctx , nil ))
285285
286- newTime , err := getClusterTimeFromSession (sess )
286+ newTime , err := util . GetClusterTimeFromSession (sess )
287287 suite .Require ().NoError (err , "should fetch cluster time" )
288288
289289 return newTime
@@ -306,21 +306,39 @@ func (suite *IntegrationTestSuite) fetchVerifierRechecks(ctx context.Context, ve
306306func (suite * IntegrationTestSuite ) TestStartAtTimeNoChanges () {
307307 zerolog .SetGlobalLevel (zerolog .TraceLevel )
308308
309- verifier := suite .BuildVerifier ()
310- ctx := suite .Context ()
311- sess , err := suite .srcMongoClient .StartSession ()
312- suite .Require ().NoError (err )
313- sctx := mongo .NewSessionContext (ctx , sess )
314- _ , err = suite .srcMongoClient .Database ("testDb" ).Collection ("testColl" ).InsertOne (
315- sctx , bson.D {{"_id" , 0 }})
316- suite .Require ().NoError (err )
317- origStartTs := sess .OperationTime ()
318- suite .Require ().NotNil (origStartTs )
319- suite .startSrcChangeStreamReaderAndHandler (ctx , verifier )
320- suite .Require ().Equal (verifier .srcChangeStreamReader .startAtTs , origStartTs )
321- verifier .srcChangeStreamReader .writesOffTs .Set (* origStartTs )
322- <- verifier .srcChangeStreamReader .doneChan
323- suite .Require ().Equal (verifier .srcChangeStreamReader .startAtTs , origStartTs )
309+ // Each of these takes ~1s, so don’t do too many of them.
310+ for range 5 {
311+ verifier := suite .BuildVerifier ()
312+ ctx := suite .Context ()
313+ sess , err := suite .srcMongoClient .StartSession ()
314+ suite .Require ().NoError (err )
315+ sctx := mongo .NewSessionContext (ctx , sess )
316+ _ , err = suite .srcMongoClient .Database ("testDb" ).Collection ("testColl" ).InsertOne (
317+ sctx , bson.D {})
318+ suite .Require ().NoError (err , "should insert doc" )
319+
320+ insertTs , err := util .GetClusterTimeFromSession (sess )
321+ suite .Require ().NoError (err , "should get cluster time" )
322+
323+ suite .startSrcChangeStreamReaderAndHandler (ctx , verifier )
324+
325+ startAtTs := verifier .srcChangeStreamReader .startAtTs
326+ suite .Require ().NotNil (startAtTs )
327+
328+ suite .Require ().False (
329+ startAtTs .After (insertTs ),
330+ "change stream should start no later than the last operation" ,
331+ )
332+
333+ verifier .srcChangeStreamReader .writesOffTs .Set (insertTs )
334+
335+ <- verifier .srcChangeStreamReader .doneChan
336+
337+ suite .Require ().False (
338+ verifier .srcChangeStreamReader .startAtTs .Before (* startAtTs ),
339+ "new startAtTs should be no earlier than last one" ,
340+ )
341+ }
324342}
325343
326344func (suite * IntegrationTestSuite ) TestStartAtTimeWithChanges () {
0 commit comments