@@ -84,6 +84,8 @@ async_test!(test_journal_mode);
84
84
async_test ! ( test_concurrency) ;
85
85
async_test ! ( test_pool) ;
86
86
async_test ! ( test_pool_conn_for_each) ;
87
+ async_test ! ( test_pool_close_concurrent) ;
88
+ async_test ! ( test_pool_num_conns_zero_clamps) ;
87
89
88
90
async fn test_journal_mode ( ) {
89
91
let tmp_dir = tempfile:: tempdir ( ) . unwrap ( ) ;
@@ -227,3 +229,36 @@ async fn test_pool_conn_for_each() {
227
229
// cleanup
228
230
pool. close ( ) . await . expect ( "closing client conn" ) ;
229
231
}
232
+
233
+ async fn test_pool_close_concurrent ( ) {
234
+ let tmp_dir = tempfile:: tempdir ( ) . unwrap ( ) ;
235
+ let pool = PoolBuilder :: new ( )
236
+ . path ( tmp_dir. path ( ) . join ( "sqlite.db" ) )
237
+ . num_conns ( 2 )
238
+ . open ( )
239
+ . await
240
+ . expect ( "pool unable to be opened" ) ;
241
+
242
+ let c1 = pool. close ( ) ;
243
+ let c2 = pool. close ( ) ;
244
+ futures_util:: future:: join_all ( [ c1, c2] )
245
+ . await
246
+ . into_iter ( )
247
+ . collect :: < Result < Vec < _ > , Error > > ( )
248
+ . expect ( "closing concurrently" ) ;
249
+
250
+ let res = pool. conn ( |c| c. execute ( "SELECT 1" , ( ) ) ) . await ;
251
+ assert ! ( matches!( res, Err ( Error :: Closed ) ) ) ;
252
+ }
253
+
254
+ async fn test_pool_num_conns_zero_clamps ( ) {
255
+ let tmp_dir = tempfile:: tempdir ( ) . unwrap ( ) ;
256
+ let pool = PoolBuilder :: new ( )
257
+ . path ( tmp_dir. path ( ) . join ( "clamp.db" ) )
258
+ . num_conns ( 0 )
259
+ . open ( )
260
+ . await
261
+ . expect ( "pool unable to be opened" ) ;
262
+ let results = pool. conn_for_each ( |_| Ok ( ( ) ) ) . await ;
263
+ assert_eq ! ( results. len( ) , 1 ) ;
264
+ }
0 commit comments