()
| 2806 | /// Test overwrite and multi-cluster allocation for all refcount orders. |
| 2807 | #[test] |
| 2808 | fn refcount_all_orders_overwrite() { |
| 2809 | for order in 0..=6u8 { |
| 2810 | let mut header = valid_header_v3(); |
| 2811 | header[99] = order; |
| 2812 | with_basic_file(&header, |disk_file: RawFile| { |
| 2813 | let mut q = QcowFile::from(disk_file).unwrap(); |
| 2814 | |
| 2815 | // Write then overwrite |
| 2816 | q.write_all(b"initial data here!!!").unwrap(); |
| 2817 | q.rewind().unwrap(); |
| 2818 | let new_data = b"overwritten data!!!!"; |
| 2819 | q.write_all(new_data).unwrap(); |
| 2820 | q.rewind().unwrap(); |
| 2821 | let mut buf = vec![0u8; new_data.len()]; |
| 2822 | q.read_exact(&mut buf).unwrap(); |
| 2823 | assert_eq!(&buf, new_data); |
| 2824 | |
| 2825 | // Allocate multiple clusters |
| 2826 | let cluster_size = 0x10000u64; |
| 2827 | for i in 1..4u64 { |
| 2828 | q.seek(SeekFrom::Start(i * cluster_size)).unwrap(); |
| 2829 | q.write_all(b"cluster data").unwrap(); |
| 2830 | } |
| 2831 | for i in 1..4u64 { |
| 2832 | let mut cluster_buf = vec![0u8; 12]; |
| 2833 | q.seek(SeekFrom::Start(i * cluster_size)).unwrap(); |
| 2834 | q.read_exact(&mut cluster_buf).unwrap(); |
| 2835 | assert_eq!(&cluster_buf, b"cluster data"); |
| 2836 | } |
| 2837 | }); |
| 2838 | } |
| 2839 | } |
| 2840 | |
| 2841 | /// Test L2 cache eviction for all refcount orders. |
| 2842 | #[test] |
nothing calls this directly
no test coverage detected