Helper to create a test file with header extensions
(ext_type: u32, ext_data: &[u8])
| 2558 | |
| 2559 | /// Helper to create a test file with header extensions |
| 2560 | fn create_header_with_extension(ext_type: u32, ext_data: &[u8]) -> (RawFile, QcowHeader) { |
| 2561 | let header = QcowHeader::create_for_size_and_path(3, 0x10_0000, None) |
| 2562 | .expect("Failed to create header."); |
| 2563 | |
| 2564 | let mut disk_file: RawFile = RawFile::new(TempFile::new().unwrap().into_file(), false); |
| 2565 | header.write_to(&mut disk_file).unwrap(); |
| 2566 | |
| 2567 | // Write extension |
| 2568 | disk_file |
| 2569 | .seek(SeekFrom::Start(header.header_size as u64)) |
| 2570 | .unwrap(); |
| 2571 | u32::write_be(&mut disk_file, ext_type).unwrap(); |
| 2572 | u32::write_be(&mut disk_file, ext_data.len() as u32).unwrap(); |
| 2573 | disk_file.write_all(ext_data).unwrap(); |
| 2574 | |
| 2575 | // Add padding to 8-byte boundary |
| 2576 | let padding = (8 - (ext_data.len() % 8)) % 8; |
| 2577 | if padding > 0 { |
| 2578 | disk_file.write_all(&vec![0u8; padding]).unwrap(); |
| 2579 | } |
| 2580 | |
| 2581 | u32::write_be(&mut disk_file, HEADER_EXT_END).unwrap(); |
| 2582 | |
| 2583 | disk_file.rewind().unwrap(); |
| 2584 | |
| 2585 | (disk_file, header) |
| 2586 | } |
| 2587 | |
| 2588 | #[test] |
| 2589 | fn read_header_extensions_unknown_extension() { |