@@ -17,6 +17,7 @@ mod dynamic_storage {
17
17
use iceoryx2_bb_elementary:: math:: ToB64 ;
18
18
use iceoryx2_bb_posix:: unique_system_id:: UniqueSystemId ;
19
19
use iceoryx2_bb_system_types:: file_name:: FileName ;
20
+ use iceoryx2_bb_testing:: lifetime_tracker:: LifetimeTracker ;
20
21
use iceoryx2_bb_testing:: { assert_that, test_requires} ;
21
22
use iceoryx2_cal:: dynamic_storage:: * ;
22
23
use iceoryx2_cal:: named_concept:: * ;
@@ -34,6 +35,7 @@ mod dynamic_storage {
34
35
value : AtomicI64 ,
35
36
supplementary_ptr : * mut u8 ,
36
37
supplementary_len : usize ,
38
+ _lifetime_tracker : LifetimeTracker ,
37
39
}
38
40
39
41
impl TestData {
@@ -42,6 +44,7 @@ mod dynamic_storage {
42
44
value : AtomicI64 :: new ( value) ,
43
45
supplementary_ptr : std:: ptr:: null_mut :: < u8 > ( ) ,
44
46
supplementary_len : 0 ,
47
+ _lifetime_tracker : LifetimeTracker :: new ( ) ,
45
48
}
46
49
}
47
50
}
@@ -462,6 +465,68 @@ mod dynamic_storage {
462
465
assert_that ! ( Sut :: does_exist( & sut_name) , eq Ok ( false ) ) ;
463
466
}
464
467
468
+ #[ test]
469
+ fn when_storage_is_removed_it_calls_drop < Sut : DynamicStorage < TestData > > ( ) {
470
+ let storage_name = generate_name ( ) ;
471
+
472
+ LifetimeTracker :: start_tracking ( ) ;
473
+
474
+ let sut = Sut :: Builder :: new ( & storage_name)
475
+ . create ( TestData :: new ( 123 ) )
476
+ . unwrap ( ) ;
477
+
478
+ assert_that ! ( sut. has_ownership( ) , eq true ) ;
479
+ drop ( sut) ;
480
+
481
+ assert_that ! ( LifetimeTracker :: number_of_living_instances( ) , eq 0 ) ;
482
+ }
483
+
484
+ #[ test]
485
+ fn when_storage_is_persistent_it_does_not_call_drop < Sut : DynamicStorage < TestData > > ( ) {
486
+ if Sut :: does_support_persistency ( ) {
487
+ let storage_name = generate_name ( ) ;
488
+
489
+ LifetimeTracker :: start_tracking ( ) ;
490
+
491
+ let sut = Sut :: Builder :: new ( & storage_name)
492
+ . create ( TestData :: new ( 123 ) )
493
+ . unwrap ( ) ;
494
+ sut. release_ownership ( ) ;
495
+ drop ( sut) ;
496
+
497
+ assert_that ! ( LifetimeTracker :: number_of_living_instances( ) , eq 1 ) ;
498
+ }
499
+ }
500
+
501
+ #[ test]
502
+ fn explicit_remove_of_persistent_storage_calls_drop < Sut : DynamicStorage < TestData > > ( ) {
503
+ let storage_name = generate_name ( ) ;
504
+
505
+ LifetimeTracker :: start_tracking ( ) ;
506
+
507
+ let sut = Sut :: Builder :: new ( & storage_name)
508
+ . create ( TestData :: new ( 123 ) )
509
+ . unwrap ( ) ;
510
+ sut. release_ownership ( ) ;
511
+ // it leaks a memory mapping here but this we want explicitly to test remove also
512
+ // for platforms that do not support persistent dynamic storage
513
+ std:: mem:: forget ( sut) ;
514
+
515
+ assert_that ! ( unsafe { Sut :: remove( & storage_name) } , eq Ok ( true ) ) ;
516
+ assert_that ! ( LifetimeTracker :: number_of_living_instances( ) , eq 0 ) ;
517
+ }
518
+
519
+ #[ test]
520
+ fn remove_storage_with_unfinished_initialization_does_not_call_drop <
521
+ Sut : DynamicStorage < TestData > ,
522
+ > ( ) {
523
+ }
524
+
525
+ #[ test]
526
+ fn opening_dynamic_storage_with_wrong_type_fails < Sut : DynamicStorage < TestData > > ( ) { }
527
+
528
+ fn removing_dynamic_storage_with_wrong_type_fails < Sut : DynamicStorage < TestData > > ( ) { }
529
+
465
530
#[ instantiate_tests( <iceoryx2_cal:: dynamic_storage:: posix_shared_memory:: Storage <TestData >>) ]
466
531
mod posix_shared_memory { }
467
532
0 commit comments