@@ -602,6 +602,28 @@ func TestChangeStream_ReplicaSet(t *testing.T) {
602
602
assert .Equal (mt , 2 , numClearedEvents , "expected two PoolCleared events, got %d" , numClearedEvents )
603
603
})
604
604
})
605
+ // Setting min server version as 4.0 since v3.6 does not send a "dropEvent"
606
+ mt .RunOpts ("call to cursor.Next after cursor closed" , mtest .NewOptions ().MinServerVersion ("4.0" ), func (mt * mtest.T ) {
607
+ cs , err := mt .Coll .Watch (mtest .Background , mongo.Pipeline {})
608
+ assert .Nil (mt , err , "Watch error: %v" , err )
609
+ defer closeStream (cs )
610
+
611
+ // Generate insert events
612
+ generateEvents (mt , 5 )
613
+ // Call Coll.Drop to generate drop and invalidate event
614
+ err = mt .Coll .Drop (mtest .Background )
615
+ assert .Nil (mt , err , "Drop error: %v" , err )
616
+
617
+ // Test that all events were successful
618
+ for i := 0 ; i < 7 ; i ++ {
619
+ assert .True (mt , cs .Next (mtest .Background ), "Next returned false at index %d; iteration error: %v" , i , cs .Err ())
620
+ }
621
+
622
+ operationType := cs .Current .Lookup ("operationType" ).StringValue ()
623
+ assert .Equal (mt , operationType , "invalidate" , "expected invalidate event but returned %q event" , operationType )
624
+ // next call to cs.Next should return False since cursor is closed
625
+ assert .False (mt , cs .Next (mtest .Background ), "expected to return false, but returned true" )
626
+ })
605
627
}
606
628
607
629
func closeStream (cs * mongo.ChangeStream ) {
0 commit comments