fix(vfs): Z-04 — implement webdav quota report
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user