@@ -10,14 +10,14 @@ extern crate regex;
1010
1111#[ cfg( test) ]
1212mod tests {
13+ use regex:: Regex ;
14+ use simple_xml_serialize:: XMLElement ;
1315 use std:: io:: { self , Write } ;
1416 use std:: process:: { Child , Command , Stdio } ;
1517 use std:: sync:: Mutex ;
1618 use std:: thread;
1719 use std:: { ffi:: OsStr , path:: PathBuf } ;
1820 use test_infra:: * ;
19-
20- use regex:: Regex ;
2121 use uuid:: Uuid ;
2222 use vmm_sys_util:: tempdir:: TempDir ;
2323
@@ -67,56 +67,87 @@ mod tests {
6767
6868 impl < ' a > Guest < ' a > {
6969 fn create_domain ( & self , vcpus : VcpuConfig , memory_size : u64 ) -> PathBuf {
70- let domain = format ! (
71- "<domain type='ch'> \
72- <name>{}</name> \
73- <uuid>{}</uuid> \
74- <genid>43dc0cf8-809b-4adb-9bea-a9abb5f3d90e</genid> \
75- <title>Test VM {}</title> \
76- <description>Test VM {}</description> \
77- <os> \
78- <type>hvm</type> \
79- <kernel>{}</kernel> \
80- </os> \
81- <vcpu current='{}'>{}</vcpu> \
82- <memory unit='b'>{}</memory> \
83- <devices> \
84- <disk type='file'> \
85- <source file='{}'/> \
86- <target dev='vda' bus='virtio'/> \
87- </disk> \
88- <disk type='file'> \
89- <source file='{}'/> \
90- <target dev='vdb' bus='virtio'/> \
91- </disk> \
92- <console type='pty'> \
93- <target type='virtio' port='0'/> \
94- </console> \
95- <interface type='ethernet'> \
96- <mac address='{}'/> \
97- <model type='virtio'/> \
98- <source> \
99- <ip address='{}' prefix='24'/> \
100- </source> \
101- </interface> \
102- </devices> \
103- </domain>",
104- self . vm_name,
105- self . uuid,
106- self . vm_name,
107- self . vm_name,
108- self . kernel_path. to_str( ) . unwrap( ) ,
109- vcpus. boot,
110- vcpus. max,
111- memory_size,
112- self . disk_config
113- . disk( DiskType :: OperatingSystem )
114- . unwrap( )
115- . as_str( ) ,
116- self . disk_config. disk( DiskType :: CloudInit ) . unwrap( ) . as_str( ) ,
117- self . network. guest_mac,
118- self . network. host_ip,
119- ) ;
70+ let xml_domain = XMLElement :: new ( "domain" )
71+ . attr ( "type" , "ch" )
72+ . element ( XMLElement :: new ( "name" ) . text ( self . vm_name . clone ( ) ) )
73+ . element ( XMLElement :: new ( "uuid" ) . text ( self . uuid . clone ( ) ) )
74+ . element ( XMLElement :: new ( "genid" ) . text ( "43dc0cf8-809b-4adb-9bea-a9abb5f3d90e" ) )
75+ . element ( XMLElement :: new ( "title" ) . text ( format ! ( "Test VM {}" , self . vm_name. clone( ) ) ) )
76+ . element (
77+ XMLElement :: new ( "description" )
78+ . text ( format ! ( "Test VM {}" , self . vm_name. clone( ) ) ) ,
79+ )
80+ . element (
81+ XMLElement :: new ( "os" )
82+ . element ( XMLElement :: new ( "type" ) . text ( "hvm" ) )
83+ . element (
84+ XMLElement :: new ( "kernel" ) . text ( self . kernel_path . to_str ( ) . unwrap ( ) ) ,
85+ ) ,
86+ )
87+ . element (
88+ XMLElement :: new ( "vcpu" )
89+ . attr ( "current" , vcpus. boot )
90+ . text ( vcpus. max ) ,
91+ )
92+ . element (
93+ XMLElement :: new ( "memory" )
94+ . attr ( "unit" , "b" )
95+ . text ( memory_size) ,
96+ )
97+ . element (
98+ XMLElement :: new ( "devices" )
99+ . element (
100+ XMLElement :: new ( "disk" )
101+ . attr ( "type" , "file" )
102+ . element ( XMLElement :: new ( "source" ) . attr (
103+ "file" ,
104+ self . disk_config . disk ( DiskType :: OperatingSystem ) . unwrap ( ) ,
105+ ) )
106+ . element (
107+ XMLElement :: new ( "target" )
108+ . attr ( "dev" , "vda" )
109+ . attr ( "bus" , "virtio" ) ,
110+ ) ,
111+ )
112+ . element (
113+ XMLElement :: new ( "disk" )
114+ . attr ( "type" , "file" )
115+ . element ( XMLElement :: new ( "source" ) . attr (
116+ "file" ,
117+ self . disk_config . disk ( DiskType :: CloudInit ) . unwrap ( ) ,
118+ ) )
119+ . element (
120+ XMLElement :: new ( "target" )
121+ . attr ( "dev" , "vdb" )
122+ . attr ( "bus" , "virtio" ) ,
123+ ) ,
124+ )
125+ . element (
126+ XMLElement :: new ( "console" ) . attr ( "type" , "pty" ) . element (
127+ XMLElement :: new ( "target" )
128+ . attr ( "type" , "virtio" )
129+ . attr ( "port" , "0" ) ,
130+ ) ,
131+ )
132+ . element (
133+ XMLElement :: new ( "interface" )
134+ . attr ( "type" , "ethernet" )
135+ . element (
136+ XMLElement :: new ( "mac" )
137+ . attr ( "address" , self . network . guest_mac . clone ( ) ) ,
138+ )
139+ . element ( XMLElement :: new ( "model" ) . attr ( "type" , "virtio" ) )
140+ . element (
141+ XMLElement :: new ( "source" ) . element (
142+ XMLElement :: new ( "ip" )
143+ . attr ( "address" , self . network . host_ip . clone ( ) )
144+ . attr ( "prefix" , "24" ) ,
145+ ) ,
146+ ) ,
147+ ) ,
148+ ) ;
149+
150+ let domain = xml_domain. to_string ( ) ;
120151
121152 eprintln ! ( "{}\n " , domain) ;
122153
0 commit comments