@@ -834,6 +834,9 @@ mod tests {
834834
835835 #[ tokio:: test]
836836 async fn delete_broken_items ( ) -> Result < ( ) , Error > {
837+ const VALID_TO_ADD : usize = 5 ;
838+ const BROKEN_TO_ADD : usize = 3 ;
839+
837840 let data_dir = tempdir ( ) ?;
838841 let v0_dir = data_dir. path ( ) . join ( "keyrings" ) ;
839842 let v1_dir = v0_dir. join ( "v1" ) ;
@@ -845,54 +848,55 @@ mod tests {
845848 let keyring_path = v1_dir. join ( "default.keyring" ) ;
846849 fs:: copy ( & fixture_path, & keyring_path) . await ?;
847850
851+ // 1) Load with the correct password and add several valid items.
852+ // This ensures n_valid_items > n_broken_items that we'll add later.
848853 let keyring = Keyring :: load ( & keyring_path, Secret :: blob ( "test" ) ) . await ?;
849- keyring
850- . create_item (
851- "test 3" ,
852- & HashMap :: from ( [ ( "attr3" , "value3" ) ] ) ,
853- "password3" ,
854- false ,
855- )
856- . await ?;
854+ for i in 0 ..VALID_TO_ADD {
855+ keyring
856+ . create_item (
857+ & format ! ( "valid {}" , i) ,
858+ & HashMap :: from ( [ ( "attr_valid" , "value" ) ] ) ,
859+ format ! ( "password_valid_{}" , i) ,
860+ false ,
861+ )
862+ . await ?;
863+ }
857864 drop ( keyring) ;
858865
866+ // 2) Load_unchecked with the wrong password and add a few "broken" items.
859867 let keyring = unsafe {
860868 Keyring :: load_unchecked ( & keyring_path, Secret :: blob ( "wrong_password" ) ) . await ?
861869 } ;
862- keyring
863- . create_item (
864- "test" ,
865- & HashMap :: from ( [ ( "attr" , "value" ) ] ) ,
866- "password" ,
867- false ,
868- )
869- . await ?;
870+ for i in 0 ..BROKEN_TO_ADD {
871+ keyring
872+ . create_item (
873+ & format ! ( "bad{}" , i) ,
874+ & HashMap :: from ( [ ( "attr_bad" , "value_bad" ) ] ) ,
875+ format ! ( "pw_bad{}" , i) ,
876+ false ,
877+ )
878+ . await ?;
879+ }
870880 drop ( keyring) ;
871881
882+ // 3) Load with the correct password and run the deletion.
883+ let keyring = Keyring :: load ( & keyring_path, Secret :: blob ( "test" ) ) . await ?;
884+ let removed = keyring. delete_broken_items ( ) . await ?;
872885 assert ! (
873- Keyring :: load( & keyring_path, Secret :: blob( "wrong_password" ) )
874- . await
875- . is_err( )
886+ removed >= BROKEN_TO_ADD ,
887+ "expected at least {} broken items removed, got {}" ,
888+ BROKEN_TO_ADD ,
889+ removed
876890 ) ;
877891
878- let keyring = Keyring :: load ( & keyring_path, Secret :: blob ( "test" ) ) . await ?;
879- keyring
880- . create_item (
881- "test 2" ,
882- & HashMap :: from ( [ ( "attr2" , "value2" ) ] ) ,
883- "password2" ,
884- false ,
885- )
886- . await ?;
887-
888- assert_eq ! ( keyring. delete_broken_items( ) . await ?, 1 ) ;
892+ // Second call should find nothing left to clean up.
889893 assert_eq ! ( keyring. delete_broken_items( ) . await ?, 0 ) ;
890894
891895 fs:: remove_file ( keyring_path) . await ?;
892-
893896 Ok ( ( ) )
894897 }
895898
899+
896900 #[ tokio:: test]
897901 async fn change_secret ( ) -> Result < ( ) , Error > {
898902 let data_dir = tempdir ( ) ?;
0 commit comments