@@ -18,12 +18,22 @@ pub mod common;
18
18
19
19
static DISKNAME1 : & str = "/tmp/disk1.img" ;
20
20
static DISKNAME2 : & str = "/tmp/disk2.img" ;
21
+ static DISKNAME3 : & str = "/tmp/disk3.img" ;
21
22
22
23
#[ tokio:: test]
23
24
async fn lvs_pool_test ( ) {
24
- common:: delete_file ( & [ DISKNAME1 . into ( ) , DISKNAME2 . into ( ) ] ) ;
25
+ common:: delete_file ( & [
26
+ DISKNAME1 . into ( ) ,
27
+ DISKNAME2 . into ( ) ,
28
+ DISKNAME3 . into ( ) ,
29
+ ] ) ;
25
30
common:: truncate_file ( DISKNAME1 , 128 * 1024 ) ;
26
31
common:: truncate_file ( DISKNAME2 , 128 * 1024 ) ;
32
+ common:: truncate_file ( DISKNAME3 , 128 * 1024 ) ;
33
+
34
+ //setup disk3 via loop device using a sector size of 4096.
35
+ let ldev = common:: setup_loopdev_file ( DISKNAME3 , Some ( 4096 ) ) ;
36
+
27
37
let args = MayastorCliArgs {
28
38
reactor_mask : "0x3" . into ( ) ,
29
39
..Default :: default ( )
@@ -336,6 +346,60 @@ async fn lvs_pool_test() {
336
346
} )
337
347
. await ;
338
348
349
+ let pool_dev_aio = ldev. clone ( ) ;
350
+ // should succeed to create an aio bdev pool on a loop blockdev of 4096
351
+ // bytes sector size.
352
+ ms. spawn ( async move {
353
+ Lvs :: create_or_import ( PoolArgs {
354
+ name : "tpool_4k_aio" . into ( ) ,
355
+ disks : vec ! [ format!( "aio://{pool_dev_aio}" ) ] ,
356
+ uuid : None ,
357
+ cluster_size : None ,
358
+ backend : PoolBackend :: Lvs ,
359
+ } )
360
+ . await
361
+ . unwrap ( ) ;
362
+ } )
363
+ . await ;
364
+
365
+ // should be able to find our new LVS created on loopdev, and subsequently
366
+ // destroy it.
367
+ ms. spawn ( async {
368
+ let pool = Lvs :: lookup ( "tpool_4k_aio" ) . unwrap ( ) ;
369
+ assert_eq ! ( pool. name( ) , "tpool_4k_aio" ) ;
370
+ assert_eq ! ( pool. used( ) , 0 ) ;
371
+ dbg ! ( pool. uuid( ) ) ;
372
+ pool. destroy ( ) . await . unwrap ( ) ;
373
+ } )
374
+ . await ;
375
+
376
+ let pool_dev_uring = ldev. clone ( ) ;
377
+ // should succeed to create an uring pool on a loop blockdev of 4096 bytes
378
+ // sector size.
379
+ ms. spawn ( async move {
380
+ Lvs :: create_or_import ( PoolArgs {
381
+ name : "tpool_4k_uring" . into ( ) ,
382
+ disks : vec ! [ format!( "uring://{pool_dev_uring}" ) ] ,
383
+ uuid : None ,
384
+ cluster_size : None ,
385
+ backend : PoolBackend :: Lvs ,
386
+ } )
387
+ . await
388
+ . unwrap ( ) ;
389
+ } )
390
+ . await ;
391
+
392
+ // should be able to find our new LVS created on loopdev, and subsequently
393
+ // destroy it.
394
+ ms. spawn ( async {
395
+ let pool = Lvs :: lookup ( "tpool_4k_uring" ) . unwrap ( ) ;
396
+ assert_eq ! ( pool. name( ) , "tpool_4k_uring" ) ;
397
+ assert_eq ! ( pool. used( ) , 0 ) ;
398
+ dbg ! ( pool. uuid( ) ) ;
399
+ pool. destroy ( ) . await . unwrap ( ) ;
400
+ } )
401
+ . await ;
402
+
339
403
// validate the expected state of mayastor
340
404
ms. spawn ( async {
341
405
// no shares left except for the discovery controller
@@ -381,4 +445,6 @@ async fn lvs_pool_test() {
381
445
. await ;
382
446
383
447
common:: delete_file ( & [ DISKNAME2 . into ( ) ] ) ;
448
+ common:: detach_loopdev ( ldev. as_str ( ) ) ;
449
+ common:: delete_file ( & [ DISKNAME3 . into ( ) ] ) ;
384
450
}
0 commit comments