fix(vfs): Z-04 — implement webdav quota report

This commit is contained in:
2026-09-19 09:52:56 +02:00
parent 487f999a24
commit 17908a64fe
5 changed files with 187 additions and 3 deletions
+69
View File
@@ -242,4 +242,73 @@ fn test_z01_decoy_password_zeroize_memory() {
drop(ephemeral);
}
#[tokio::test]
async fn test_z04_webdav_quota_report() {
use dav_server::fs::DavFileSystem;
use sanctum::vfs::SanctumFs;
let temp_dir = std::env::temp_dir();
let container_path: PathBuf =
temp_dir.join(format!("test_z04_quota_{}.sanctum", std::process::id()));
if container_path.exists() {
let _ = std::fs::remove_file(&container_path);
}
let salt = generate_salt();
let kdf_params = KdfParams {
memory_cost: MIN_MEMORY_COST_KIB,
time_cost: MIN_TIME_COST,
parallelism: 1,
};
let kek = derive_kek("TestPassZ04!", &salt, &kdf_params).unwrap();
let dek = generate_dek();
let (wrapped_dek, nonce, tag) = wrap_dek(&kek, &dek).unwrap();
let db = Database::open(&container_path).unwrap();
db.init_schema(&salt, &kdf_params, &wrapped_dek, &nonce, &tag)
.unwrap();
// Erstelle einen Testknoten mit Chunks
let node = db.create_node(1, "payload.bin", false).unwrap();
let dummy_chunk = vec![0xAAu8; 1024 * 1024]; // 1 MiB
db.write_chunk_and_update_size(
node.id,
0,
0,
&[0u8; 12],
&[0u8; 16],
&dummy_chunk,
1024 * 1024,
123456,
)
.unwrap();
let fs = SanctumFs::new(db.clone(), dek, sanctum::crypto::FORMAT_VERSION);
// Rufe WebDAV get_quota ab
let (used, total_opt) = fs.get_quota().await.unwrap();
assert!(
used > 0,
"Z-04: Verwendeter Speicherplatz muss > 0 sein (gemeldet: {} Bytes)",
used
);
assert!(
total_opt.is_some(),
"Z-04: Gesamtkapazität muss gemeldet werden"
);
let total = total_opt.unwrap();
assert!(
total >= used,
"Z-04: Gesamtkapazität ({}) muss mindestens dem belegten Speicher ({}) entsprechen",
total,
used
);
drop(fs);
drop(db);
let _ = std::fs::remove_file(&container_path);
}