@@ -805,6 +805,65 @@ mod tests {
805805 Ok ( ( ) )
806806 }
807807
808+ #[ tokio:: test]
809+ async fn delete_broken_items ( ) -> Result < ( ) , Error > {
810+ let data_dir = tempdir ( ) ?;
811+ let v0_dir = data_dir. path ( ) . join ( "keyrings" ) ;
812+ let v1_dir = v0_dir. join ( "v1" ) ;
813+ fs:: create_dir_all ( & v1_dir) . await ?;
814+
815+ let fixture_path = PathBuf :: from ( env ! ( "CARGO_MANIFEST_DIR" ) )
816+ . join ( "fixtures" )
817+ . join ( "default.keyring" ) ;
818+ let keyring_path = v1_dir. join ( "default.keyring" ) ;
819+ fs:: copy ( & fixture_path, & keyring_path) . await ?;
820+
821+ let keyring = Keyring :: load ( & keyring_path, Secret :: blob ( "test" ) ) . await ?;
822+ keyring
823+ . create_item (
824+ "test 3" ,
825+ & HashMap :: from ( [ ( "attr3" , "value3" ) ] ) ,
826+ "password3" ,
827+ false ,
828+ )
829+ . await ?;
830+ drop ( keyring) ;
831+
832+ let keyring = unsafe {
833+ Keyring :: load_unchecked ( & keyring_path, Secret :: blob ( "wrong_password" ) ) . await ?
834+ } ;
835+ keyring
836+ . create_item (
837+ "test" ,
838+ & HashMap :: from ( [ ( "attr" , "value" ) ] ) ,
839+ "password" ,
840+ false ,
841+ )
842+ . await ?;
843+ drop ( keyring) ;
844+
845+ assert ! ( Keyring :: load( & keyring_path, Secret :: blob( "wrong_password" ) )
846+ . await
847+ . is_err( ) ) ;
848+
849+ let keyring = Keyring :: load ( & keyring_path, Secret :: blob ( "test" ) ) . await ?;
850+ keyring
851+ . create_item (
852+ "test 2" ,
853+ & HashMap :: from ( [ ( "attr2" , "value2" ) ] ) ,
854+ "password2" ,
855+ false ,
856+ )
857+ . await ?;
858+
859+ assert_eq ! ( keyring. delete_broken_items( ) . await ?, 1 ) ;
860+ assert_eq ! ( keyring. delete_broken_items( ) . await ?, 0 ) ;
861+
862+ fs:: remove_file ( keyring_path) . await ?;
863+
864+ Ok ( ( ) )
865+ }
866+
808867 #[ tokio:: test]
809868 async fn change_secret ( ) -> Result < ( ) , Error > {
810869 let data_dir = tempdir ( ) ?;
0 commit comments