@@ -2172,6 +2172,40 @@ mod tests {
21722172 ) ;
21732173 }
21742174
2175+ #[ test]
2176+ fn test_attach_net_devices ( ) {
2177+ let mut vmm = create_vmm_object ( InstanceState :: Uninitialized ) ;
2178+ assert ! ( vmm. init_guest_memory( ) . is_ok( ) ) ;
2179+ assert ! ( vmm. guest_memory. is_some( ) ) ;
2180+
2181+ vmm. default_kernel_config ( ) ;
2182+
2183+ let guest_mem = vmm. guest_memory . clone ( ) . unwrap ( ) ;
2184+ let mut device_manager =
2185+ MMIODeviceManager :: new ( guest_mem. clone ( ) , x86_64:: get_32bit_gap_start ( ) as u64 ) ;
2186+
2187+ // test create network interface
2188+ let network_interface = NetworkInterfaceBody {
2189+ iface_id : String :: from ( "netif" ) ,
2190+ state : DeviceState :: Attached ,
2191+ host_dev_name : String :: from ( "hostname3" ) ,
2192+ guest_mac : None ,
2193+ rx_rate_limiter : None ,
2194+ tx_rate_limiter : None ,
2195+ allow_mmds_requests : false ,
2196+ } ;
2197+
2198+ match vmm. put_net_device ( network_interface) {
2199+ Ok ( outcome) => assert ! ( outcome == SyncOkStatus :: Created ) ,
2200+ Err ( _) => assert ! ( false ) ,
2201+ }
2202+
2203+ assert ! ( vmm. attach_net_devices( & mut device_manager) . is_ok( ) ) ;
2204+ // a second call to attach_net_devices should fail because when
2205+ // we are creating the virtio::Net object, we are taking the tap.
2206+ assert ! ( vmm. attach_net_devices( & mut device_manager) . is_err( ) ) ;
2207+ }
2208+
21752209 #[ test]
21762210 fn test_rescan ( ) {
21772211 let mut vmm = create_vmm_object ( InstanceState :: Uninitialized ) ;
0 commit comments