feat(infra): temp IdeA généralisé à tous les agents + purge du store managed-tmp au shutdown d'IdeA — #200 (QA verte)
This commit is contained in:
@ -10,7 +10,7 @@ use domain::{
|
||||
use uuid::Uuid;
|
||||
|
||||
use application::{
|
||||
AllocateManagedTemp, AllocateManagedTempInput, AppError, ResolveManagedTemp,
|
||||
AllocateManagedTemp, AllocateManagedTempInput, AppError, PurgeManagedTemp, ResolveManagedTemp,
|
||||
ResolveManagedTempInput, MANAGED_TEMP_DEFAULT_TTL_MS, MANAGED_TEMP_PURPOSE_MAX_CHARS,
|
||||
};
|
||||
|
||||
@ -90,6 +90,12 @@ impl ManagedTempStore for FakeManagedTempStore {
|
||||
async fn gc(&self, _now_ms: u64) -> Result<ManagedTempGcReport, ManagedTempError> {
|
||||
Ok(ManagedTempGcReport { deleted: 0 })
|
||||
}
|
||||
|
||||
async fn purge_all(&self) -> Result<ManagedTempGcReport, ManagedTempError> {
|
||||
let deleted = self.leases.lock().unwrap().len();
|
||||
self.leases.lock().unwrap().clear();
|
||||
Ok(ManagedTempGcReport { deleted })
|
||||
}
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
@ -132,6 +138,31 @@ async fn allocate_uses_generated_opaque_handle_and_default_ttl() {
|
||||
);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn purge_managed_temp_calls_store_and_returns_report() {
|
||||
let store = Arc::new(FakeManagedTempStore::default());
|
||||
let allocate = AllocateManagedTemp::new(
|
||||
Arc::clone(&store) as Arc<dyn ManagedTempStore>,
|
||||
Arc::new(FixedIds),
|
||||
Arc::new(FixedClock),
|
||||
);
|
||||
allocate
|
||||
.execute(AllocateManagedTempInput {
|
||||
owner_project_id: None,
|
||||
kind: ManagedTempKind::Directory,
|
||||
purpose: "purge me".to_owned(),
|
||||
ttl_ms: None,
|
||||
})
|
||||
.await
|
||||
.unwrap();
|
||||
let purge = PurgeManagedTemp::new(Arc::clone(&store) as Arc<dyn ManagedTempStore>);
|
||||
|
||||
let out = purge.execute().await.unwrap();
|
||||
|
||||
assert_eq!(out.report.deleted, 1);
|
||||
assert!(store.leases.lock().unwrap().is_empty());
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn allocate_rejects_empty_or_zero_ttl_and_bounds_purpose_metadata() {
|
||||
let store = Arc::new(FakeManagedTempStore::default());
|
||||
|
||||
Reference in New Issue
Block a user