@@ -511,28 +511,39 @@ func TestSessionsProse(t *testing.T) {
511511 })
512512
513513 mt .Run ("20 Drivers do not gossip $clusterTime on SDAM commands" , func (mt * mtest.T ) {
514+ heartbeatStarted := make (chan struct {})
515+ heartbeatSucceeded := make (chan struct {})
516+ clusterTimeAdvanced := make (chan struct {})
514517 serverMonitor := & event.ServerMonitor {
515518 ServerHeartbeatStarted : func (e * event.ServerHeartbeatStartedEvent ) {
516519 fmt .Println ("Server heartbeat started:" , e .ConnectionID )
520+ select {
521+ case _ , ok := <- clusterTimeAdvanced :
522+ if ! ok {
523+ heartbeatStarted <- struct {}{}
524+ }
525+ default :
526+ // NOOP
527+ }
517528 },
518529 ServerHeartbeatSucceeded : func (e * event.ServerHeartbeatSucceededEvent ) {
519530 fmt .Println ("Server heartbeat succeeded:" , e .ConnectionID , e .Duration , e .Reply )
531+ select {
532+ case _ , ok := <- clusterTimeAdvanced :
533+ if ! ok {
534+ heartbeatSucceeded <- struct {}{}
535+ }
536+ default :
537+ // NOOP
538+ }
520539 },
521540 }
522541
523542 opts := options .Client ().
524543 ApplyURI (mtest .ClusterURI ()).
525544 SetHosts ([]string {mtest .ClusterConnString ().Hosts [0 ]}).
526545 SetDirect (true ).
527- SetHeartbeatInterval (500 * time .Millisecond ).
528- SetMonitor (& event.CommandMonitor {
529- Started : func (_ context.Context , cse * event.CommandStartedEvent ) {
530- fmt .Println ("Command started:" , cse .CommandName , cse .Command )
531- },
532- Succeeded : func (_ context.Context , cse * event.CommandSucceededEvent ) {
533- fmt .Println ("Command succeeded:" , cse .CommandName , cse .Reply )
534- },
535- }).
546+ SetHeartbeatInterval (500 * time .Millisecond ). // Minimum interval
536547 SetServerMonitor (serverMonitor )
537548
538549 client , err := mongo .Connect (opts )
@@ -546,21 +557,23 @@ func TestSessionsProse(t *testing.T) {
546557 {"ping" , 1 },
547558 }).Raw ()
548559 require .NoError (mt , err , "expected no error, got: %v" , err )
549- mt .Log ("result of ping command:" , res )
560+ replyClusterTime , err := res .LookupErr ("$clusterTime" )
561+ require .NoError (mt , err , "$clusterTime not found in response" )
550562
551563 _ , err = mt .Client .Database ("test" ).Collection ("test" ).InsertOne (context .Background (), bson.D {{"advance" , "$clusterTime" }})
552564 require .NoError (mt , err , "expected no error inserting document, got: %v" , err )
553565
554- time .Sleep (3 * time .Second )
566+ close (clusterTimeAdvanced )
567+ <- heartbeatStarted
568+ <- heartbeatSucceeded
555569
556570 res , err = client .Database ("admin" ).RunCommand (context .Background (), bson.D {
557571 {"ping" , 1 },
558572 }).Raw ()
559573 require .NoError (mt , err , "expected no error, got: %v" , err )
560- mt .Log ("result of ping command:" , res )
561- replyClusterTimeVal , err := res .LookupErr ("$clusterTime" )
574+ replyClusterTimeNew , err := res .LookupErr ("$clusterTime" )
562575 require .NoError (mt , err , "$clusterTime not found in response" )
563- mt .Fatalf ("$clusterTime: %v" , replyClusterTimeVal )
576+ mt .Fatalf ("$clusterTime: %v %v " , replyClusterTime , replyClusterTimeNew )
564577 })
565578}
566579
0 commit comments