Skip to content

Commit 58a11e8

Browse files
client: Rewrite the delete_broken_items test in a way it triggers a panic
1 parent b67e913 commit 58a11e8

1 file changed

Lines changed: 35 additions & 31 deletions

File tree

client/src/file/mod.rs

Lines changed: 35 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)