@@ -1049,3 +1049,46 @@ async fn collection_generic_bounds() {
1049
1049
. collection ( function_name ! ( ) ) ;
1050
1050
let _result = coll. insert_one ( Bar { } , None ) . await ;
1051
1051
}
1052
+
1053
+ /// Verify that a cursor with multiple batches whose last batch isn't full
1054
+ /// iterates without errors.
1055
+ #[ cfg_attr( feature = "tokio-runtime" , tokio:: test) ]
1056
+ #[ cfg_attr( feature = "async-std-runtime" , async_std:: test) ]
1057
+ async fn cursor_batch_size ( ) {
1058
+ let _guard: RwLockReadGuard < ( ) > = LOCK . run_concurrently ( ) . await ;
1059
+
1060
+ let client = TestClient :: new ( ) . await ;
1061
+ let coll = client
1062
+ . init_db_and_coll ( "cursor_batch_size" , "cursor_batch_size" )
1063
+ . await ;
1064
+
1065
+ let doc = Document :: new ( ) ;
1066
+ coll. insert_many ( vec ! [ & doc; 10 ] , None ) . await . unwrap ( ) ;
1067
+
1068
+ let opts = FindOptions :: builder ( ) . batch_size ( 3 ) . build ( ) ;
1069
+ let cursor_no_session = coll. find ( doc ! { } , opts. clone ( ) ) . await . unwrap ( ) ;
1070
+ let docs: Vec < _ > = cursor_no_session. try_collect ( ) . await . unwrap ( ) ;
1071
+ assert_eq ! ( docs. len( ) , 10 ) ;
1072
+
1073
+ // test session cursors
1074
+ if client. is_standalone ( ) {
1075
+ return ;
1076
+ }
1077
+ let mut session = client. start_session ( None ) . await . unwrap ( ) ;
1078
+ let mut cursor = coll
1079
+ . find_with_session ( doc ! { } , opts. clone ( ) , & mut session)
1080
+ . await
1081
+ . unwrap ( ) ;
1082
+ let mut docs = Vec :: new ( ) ;
1083
+ while let Some ( doc) = cursor. next ( & mut session) . await {
1084
+ docs. push ( doc. unwrap ( ) ) ;
1085
+ }
1086
+ assert_eq ! ( docs. len( ) , 10 ) ;
1087
+
1088
+ let mut cursor = coll
1089
+ . find_with_session ( doc ! { } , opts, & mut session)
1090
+ . await
1091
+ . unwrap ( ) ;
1092
+ let docs: Vec < _ > = cursor. stream ( & mut session) . try_collect ( ) . await . unwrap ( ) ;
1093
+ assert_eq ! ( docs. len( ) , 10 ) ;
1094
+ }
0 commit comments