block: qcow_async: Add write after punch hole test

Write data, punch hole to deallocate, then rewrite the same
range and verify the new contents read back correctly.

Signed-off-by: Anatol Belski <anbelski@linux.microsoft.com>
This commit is contained in:
Anatol Belski
2026-03-30 23:45:12 +02:00
committed by Rob Bradford
parent 48155c4151
commit 072b3a85d2

View File

@@ -895,4 +895,32 @@ mod unit_tests {
"bytes after the write should be zero"
);
}
#[test]
fn test_qcow_async_write_after_punch_hole() {
let data = vec![0xAA; 64 * 1024];
let offset = 0u64;
let (_temp, disk) = create_disk_with_data(100 * 1024 * 1024, &data, offset, true);
let buf = async_read(&disk, offset, data.len());
assert!(buf.iter().all(|&b| b == 0xAA));
let mut async_io = disk.new_async_io(1).unwrap();
async_io.punch_hole(offset, data.len() as u64, 10).unwrap();
let (_, result) = wait_for_completion(async_io.as_mut());
assert_eq!(result, 0);
drop(async_io);
let buf = async_read(&disk, offset, data.len());
assert!(
buf.iter().all(|&b| b == 0),
"should be zero after punch hole"
);
let new_data = vec![0xBB; 64 * 1024];
async_write(&disk, offset, &new_data);
let buf = async_read(&disk, offset, new_data.len());
assert_eq!(buf, new_data, "should read new data after rewrite");
}
}