@@ -586,6 +586,28 @@ func TestChangeStream_ReplicaSet(t *testing.T) {
586
586
assert .Equal (mt , 2 , numClearedEvents , "expected two PoolCleared events, got %d" , numClearedEvents )
587
587
})
588
588
})
589
+ // Setting min server version as 4.0 since v3.6 does not send a "dropEvent"
590
+ mt .RunOpts ("call to cursor.Next after cursor closed" , mtest .NewOptions ().MinServerVersion ("4.0" ), func (mt * mtest.T ) {
591
+ cs , err := mt .Coll .Watch (mtest .Background , mongo.Pipeline {})
592
+ assert .Nil (mt , err , "Watch error: %v" , err )
593
+ defer closeStream (cs )
594
+
595
+ // Generate insert events
596
+ generateEvents (mt , 5 )
597
+ // Call Coll.Drop to generate drop and invalidate event
598
+ err = mt .Coll .Drop (mtest .Background )
599
+ assert .Nil (mt , err , "Drop error: %v" , err )
600
+
601
+ // Test that all events were successful
602
+ for i := 0 ; i < 7 ; i ++ {
603
+ assert .True (mt , cs .Next (mtest .Background ), "Next returned false at index %d; iteration error: %v" , i , cs .Err ())
604
+ }
605
+
606
+ operationType := cs .Current .Lookup ("operationType" ).StringValue ()
607
+ assert .Equal (mt , operationType , "invalidate" , "expected invalidate event but returned %q event" , operationType )
608
+ // next call to cs.Next should return False since cursor is closed
609
+ assert .False (mt , cs .Next (mtest .Background ), "expected to return false, but returned true" )
610
+ })
589
611
}
590
612
591
613
func closeStream (cs * mongo.ChangeStream ) {
0 commit comments