use uuid::uuid; use super::build::DomainBuilder; use super::*; use crate::datasize; trait Unprettify { fn unprettify(&self) -> String; } impl Unprettify for &str { fn unprettify(&self) -> String { self.split('\n') .map(|s| s.trim()) .collect::>() .concat() } } #[test] fn domain_serde() { let dom_str = r#" test-vm 9a8f2611-a976-4d06-ac91-2750ac3462b3 This is a test 2 512 hvm "# .unprettify(); println!("Serializing domain..."); let mac = MacAddr::new(0x02, 0x0b, 0xee, 0xca, 0xfe, 0x42); let uuid = uuid!("9a8f2611-a976-4d06-ac91-2750ac3462b3"); let domain = DomainBuilder::default() .name("test-vm") .uuid(uuid) .description("This is a test") .disk_device(|dsk| { dsk.volume_source("tank", "test-vm-root") .target("sda", "virtio") }) .net_device(|net| net.with_bridge("virbr0").mac_addr(mac)) .build(); let dom_xml = quick_xml::se::to_string(&domain).unwrap(); println!("{}", dom_xml); assert_eq!(&dom_xml, &dom_str); println!("Deserializing domain..."); let _new_dom: Domain = quick_xml::de::from_str(&dom_str).unwrap(); } #[test] fn pool_serde() { let pool_str = r#" default 4ad34b59-9418-483d-9533-2e8b51e7317e 200 120 80 /var/lib/libvirt/images "# .unprettify(); println!("Serializing pool..."); let pool: Pool = Pool { r#type: "dir".to_owned(), name: "default".to_owned(), uuid: Some(uuid!("4ad34b59-9418-483d-9533-2e8b51e7317e")), capacity: Some(datasize!(200 GiB)), allocation: Some(datasize!(120 GiB)), available: Some(datasize!(80 GiB)), target: Some(VolTarget { path: Some("/var/lib/libvirt/images".to_owned()), format: None, }), }; let pool_xml = quick_xml::se::to_string(&pool).unwrap(); assert_eq!(&pool_xml, &pool_str); println!("Deserializing pool..."); let pool: Pool = quick_xml::de::from_str(&pool_str).unwrap(); assert_eq!(pool.name, "default".to_owned()); assert_eq!(pool.r#type, "dir".to_owned()); } #[test] fn vol_serde() { let vol_str = r#" test 20 20 "# .unprettify(); println!("Serializing volume..."); let vol: Volume = Volume::new("test", VolType::Qcow2, datasize!(20 GiB)); let vol_xml = quick_xml::se::to_string(&vol).unwrap(); assert_eq!(&vol_xml, &vol_str); println!("Deserializing volume..."); let vol_obj: Volume = quick_xml::de::from_str(&vol_str).unwrap(); assert_eq!(vol_obj, vol); }