//! Integration test for snapshot/restore //! //! Tests: //! 1. Create a VM with KVM //! 2. Load kernel and boot //! 3. Pause vCPUs //! 4. Create a snapshot //! 5. Restore from snapshot //! 6. Verify restore is faster than cold boot use std::path::Path; use std::time::Instant; /// Test that the snapshot module compiles and basic types work #[test] fn test_snapshot_types_roundtrip() { // We can't use volt-vmm internals directly since it's a bin crate, // but we can verify the basic snapshot format by creating and parsing JSON let snapshot_json = r#"{ "metadata": { "version": 1, "memory_size": 134217728, "vcpu_count": 1, "created_at": 1234567890, "state_crc64": 0, "memory_file_size": 134217728 }, "vcpu_states": [], "irqchip": { "pic_master": {"raw_data": []}, "pic_slave": {"raw_data": []}, "ioapic": {"raw_data": []}, "pit": {"channels": [], "flags": 0} }, "clock": {"clock": 0, "flags": 0}, "devices": { "serial": { "dlab": false, "ier": 0, "lcr": 0, "mcr": 0, "lsr": 96, "msr": 0, "scr": 0, "dll": 0, "dlh": 0, "thr_interrupt_pending": false, "input_buffer": [] }, "virtio_blk": null, "virtio_net": null, "mmio_transports": [] }, "memory_regions": [ {"guest_addr": 0, "size": 134217728, "file_offset": 0} ] }"#; // Verify it parses as valid JSON let parsed: serde_json::Value = serde_json::from_str(snapshot_json).unwrap(); assert_eq!(parsed["metadata"]["version"], 1); assert_eq!(parsed["metadata"]["memory_size"], 134217728); assert_eq!(parsed["metadata"]["vcpu_count"], 1); } #[test] fn test_crc64_deterministic() { // Test that CRC-64 computation is deterministic let data = b"Hello, Volt snapshot!"; // Use the crc crate directly use crc::{Crc, CRC_64_ECMA_182}; const CRC64: Crc = Crc::::new(&CRC_64_ECMA_182); let crc1 = CRC64.checksum(data); let crc2 = CRC64.checksum(data); assert_eq!(crc1, crc2); assert_ne!(crc1, 0); // Very unlikely to be zero for non-empty data }