purge: skip broadcasts of deleted authors, purge outbox log, guards, 410 inbox test

This commit is contained in:
2026-10-26 02:39:06 +01:00
parent 51a70b5260
commit 80dbdec107
9 changed files with 318 additions and 27 deletions

View File

@@ -90,6 +90,7 @@ impl ObjectStorage for Storage {
struct Fixture {
handler: Arc<AccountPurgeHandler>,
purger: Arc<Purger>,
log: Log,
store: Arc<InMemoryStore>,
user: UserId,
@@ -103,21 +104,23 @@ async fn fixture(notify_fails: bool, tombstoned: bool) -> Fixture {
store.mark_deleted(alice.id(), &[]).await.unwrap();
}
let log: Log = Arc::default();
let purger = Arc::new(Purger {
log: log.clone(),
purged: Mutex::new(false),
keys: vec!["avatars/a.webp".into(), "banners/a.webp".into()],
});
let handler = Arc::new(AccountPurgeHandler::new(
store.clone(),
Arc::new(Notifier {
log: log.clone(),
fail: notify_fails,
}),
Arc::new(Purger {
log: log.clone(),
purged: Mutex::new(false),
keys: vec!["avatars/a.webp".into(), "banners/a.webp".into()],
}),
purger.clone(),
Arc::new(Storage { log: log.clone() }),
));
Fixture {
handler,
purger,
log,
store,
user: alice.id().clone(),
@@ -251,3 +254,25 @@ async fn a_redelivered_event_is_skipped_by_the_ledger() {
let purges = entries(&f.log).iter().filter(|e| *e == "purge").count();
assert_eq!(purges, 1);
}
/// The rows were committed but the worker died before deleting the image
/// objects: the redelivery finds the account purged, still sees the image
/// references, deletes the objects and clears the references.
#[tokio::test]
async fn a_rerun_after_a_crash_following_the_commit_deletes_the_images() {
let f = fixture(false, true).await;
*f.purger.purged.lock().unwrap() = true;
f.handler.handle(&deleted(&f.user)).await.unwrap();
assert_eq!(
entries(&f.log),
[
"purge",
"delete avatars/a.webp",
"delete banners/a.webp",
"forget"
],
"no second federation notice, images removed and forgotten"
);
}