class SnatInstanceManager(unittest.TestCase): def setUp(self): def get_vn_id(obj_type, fq_name): if obj_type != 'virtual-network': return for vn in VirtualNetworkSM.values(): if vn.fq_name == fq_name: return vn.uuid raise NoIdError(fq_name) def vmi_create(vmi_obj): vmi_obj.uuid = 'fake-vmi-uuid' return def vn_create(vn_obj): vn_obj.uuid = 'fake-vn-uuid' return def vn_read(vn_id): vn_obj = {} vn_obj['uuid'] = 'fake-vn-uuid' vn_obj['fq_name'] = ['fake-domain', 'fake-project', 'fake-vn-uuid'] return True, [vn_obj] def vm_read(vm_id): class SI(object): def __init__(self, name, fq_name): self.name = name self.fq_name = fq_name vm_obj = {} vm_obj['uuid'] = 'fake-vm-uuid' vm_obj['fq_name'] = ['fake-vm-uuid'] fq_name = ['fake-domain', 'fake-project', 'fake-snat-instance'] name = 'fake-snat-instance' si = SI(name, fq_name) instance_name = self.netns_manager._get_instance_name(si, 0) vm_obj['display_name'] = instance_name + '__' + 'network-namespace' return True, [vm_obj] def vr_read(vm_id): vr_obj = {} vr_obj['uuid'] = 'fake-vr-uuid' vr_obj['fq_name'] = ['fake-vr-uuid'] return True, [vr_obj] VirtualMachineSM._cassandra = mock.MagicMock() VirtualMachineSM._cassandra._cassandra_virtual_machine_read = vm_read VirtualRouterSM._cassandra = mock.MagicMock() VirtualRouterSM._cassandra._cassandra_virtual_router_read = vr_read VirtualNetworkSM._cassandra = mock.MagicMock() VirtualNetworkSM._cassandra._cassandra_virtual_network_read = vn_read self.mocked_vnc = mock.MagicMock() self.mocked_vnc.fq_name_to_id = get_vn_id self.mocked_vnc.virtual_machine_interface_create = vmi_create self.mocked_vnc.virtual_network_create = vn_create self.nova_mock = mock.MagicMock() self.mocked_db = mock.MagicMock() self.mocked_args = mock.MagicMock() self.mocked_args.availability_zone = None self.netns_manager = NetworkNamespaceManager( db=self.mocked_db, logger=mock.MagicMock(), vnc_lib=self.mocked_vnc, vrouter_scheduler=mock.MagicMock(), nova_client=self.nova_mock, args=self.mocked_args) def tearDown(self): ServiceTemplateSM.delete('fake-st-uuid') ServiceInstanceSM.delete('fake-si-uuid') pass def create_test_project(self, fq_name_str): proj_obj = {} proj_obj['fq_name'] = fq_name_str.split(':') proj_obj['uuid'] = fq_name_str proj_obj['id_perms'] = 'fake-id-perms' ProjectSM.locate(proj_obj['uuid'], proj_obj) def create_test_virtual_network(self, fq_name_str): vn_obj = {} vn_obj['fq_name'] = fq_name_str.split(':') vn_obj['uuid'] = fq_name_str vn_obj['id_perms'] = 'fake-id-perms' VirtualNetworkSM.locate(vn_obj['uuid'], vn_obj) def create_test_security_group(self, fq_name_str): sg_obj = {} sg_obj['fq_name'] = fq_name_str.split(':') sg_obj['uuid'] = fq_name_str sg_obj['id_perms'] = 'fake-id-perms' SecurityGroupSM.locate(sg_obj['uuid'], sg_obj) def create_test_virtual_machine(self, fq_name_str): vm_obj = {} vm_obj['fq_name'] = fq_name_str.split(':') vm_obj['uuid'] = fq_name_str vm_obj['display_name'] = fq_name_str vm = VirtualMachineSM.locate(vm_obj['uuid'], vm_obj) vm.proj_fq_name = ['fake-domain', 'fake-project'] return vm def test_snat_instance_create(self): self.create_test_project('fake-domain:fake-project') self.create_test_virtual_network('fake-domain:fake-project:public-vn') self.create_test_security_group('fake-domain:fake-project:default') st_obj = {} st_obj['fq_name'] = ['fake-domain', 'fake-snat-template'] st_obj['uuid'] = 'fake-st-uuid' st_obj['id_perms'] = 'fake-id-perms' st_props = {} st_props['service_virtualization_type'] = 'network-namespace' st_props['service_mode'] = 'in-network-nat' st_props['service_type'] = 'source-nat' st_props['ordered_interfaces'] = True st_props['service_scaling'] = True st_props['interface_type'] = [{'service_interface_type': 'right', 'shared_ip': True}, {'service_interface_type': 'left', 'shared_ip': True}] st_obj['service_template_properties'] = st_props si_obj = {} si_obj['fq_name'] = ['fake-domain', 'fake-project', 'fake-snat-instance'] si_obj['uuid'] = 'fake-si-uuid' si_obj['id_perms'] = 'fake-id-perms' si_props = {} si_props['scale_out'] = {'max_instances': 2} si_props['interface_list'] = [{'virtual_network': 'fake-domain:fake-project:public-vn'}, {'virtual_network': ''}] si_obj['service_instance_properties'] = si_props st = ServiceTemplateSM.locate('fake-st-uuid', st_obj) si = ServiceInstanceSM.locate('fake-si-uuid', si_obj) self.netns_manager.create_service(st, si) self.mocked_vnc.virtual_machine_create.assert_any_call(VMObjMatcher(1)) self.mocked_vnc.virtual_machine_create.assert_any_call(VMObjMatcher(2)) self.assertEqual(si.vn_info[1]['net-id'], 'fake-vn-uuid') def test_snat_instance_delete(self): def create_fake_virtual_machine(fq_name_str): vm_obj = {} vm_obj['fq_name'] = fq_name_str.split(':') vm_obj['uuid'] = fq_name_str vm_obj['display_name'] = fq_name_str vm = VirtualMachineSM.locate(vm_obj['uuid'], vm_obj) vm.proj_fq_name = ['fake-domain', 'fake-project'] vm.virtual_machine_interfaces = set(['fake-vmi-uuid1', 'fake-vmi-uuid2', 'fake-vmi-uuid3']) vm.virtual_router = 'fake-vr-uuid' return vm mocked_vr = mock.MagicMock() mocked_vr.uuid = 'fake-vr-uuid' self.netns_manager._vnc_lib.virtual_router_read.\ return_value = mocked_vr vm = create_fake_virtual_machine('fake-vm-uuid') self.netns_manager.delete_service(vm) self.netns_manager._vnc_lib.virtual_machine_delete\ .assert_called_with(id='fake-vm-uuid') mocked_vr.del_virtual_machine.assert_called_with(VMObjMatcher('fake-vm-uuid', True))
class SnatInstanceManager(unittest.TestCase): def setUp(self): InstanceIpSM._cassandra = mock.MagicMock() InstanceIpSM._cassandra.object_read = test_utils.iip_db_read VirtualMachineInterfaceSM._cassandra = mock.MagicMock() VirtualMachineInterfaceSM._cassandra.object_read = test_utils.vmi_db_read VirtualMachineSM._cassandra = mock.MagicMock() VirtualMachineSM._cassandra.object_read = test_utils.vm_db_read VirtualRouterSM._cassandra = mock.MagicMock() VirtualRouterSM._cassandra.object_read = test_utils.vr_db_read VirtualNetworkSM._cassandra = mock.MagicMock() VirtualNetworkSM._cassandra.object_read = test_utils.vn_db_read self.mocked_vnc = mock.MagicMock() self.mocked_vnc.fq_name_to_id = test_utils.get_vn_id_for_fq_name self.mocked_vnc.virtual_machine_interface_create = test_utils.vmi_create self.mocked_vnc.virtual_network_create = test_utils.vn_create self.mocked_vnc.instance_ip_create = test_utils.iip_create self.mocked_scheduler = mock.MagicMock() self.mocked_scheduler.schedule = mock.Mock(return_value=('fake-virtual-router')) self.nova_mock = mock.MagicMock() self.mocked_db = mock.MagicMock() self.mocked_args = mock.MagicMock() self.mocked_args.availability_zone = None self.mocked_manager = mock.MagicMock() self.netns_manager = NetworkNamespaceManager( db=self.mocked_db, logger=mock.MagicMock(), vnc_lib=self.mocked_vnc, vrouter_scheduler=self.mocked_scheduler, nova_client=self.nova_mock, agent_manager=self.mocked_manager, args=self.mocked_args) def tearDown(self): ServiceTemplateSM.reset() ServiceInstanceSM.reset() InstanceIpSM.reset() del InstanceIpSM._cassandra VirtualMachineInterfaceSM.reset() del VirtualMachineInterfaceSM._cassandra VirtualMachineSM.reset() del VirtualMachineSM._cassandra VirtualRouterSM.reset() del VirtualRouterSM._cassandra VirtualNetworkSM.reset() del VirtualNetworkSM._cassandra def test_snat_instance_create(self): test_utils.create_test_project('fake-domain:fake-project') test_utils.create_test_virtual_network('fake-domain:fake-project:public-vn') test_utils.create_test_virtual_network('fake-domain:fake-project:fake-vn-uuid') test_utils.create_test_security_group('fake-domain:fake-project:default') test_utils.create_test_virtual_router('fake-virtual-router') st = test_utils.create_test_st(name='snat-template', virt_type='network-namespace', intf_list=[['right', True], ['left', True]]) si = test_utils.create_test_si(name='snat-instance', count=2, intf_list=['public-vn', 'fake-vn-uuid']) self.netns_manager.create_service(st, si) self.mocked_vnc.virtual_machine_create.assert_any_call(test_utils.VMObjMatcher(1)) self.mocked_vnc.virtual_machine_create.assert_any_call(test_utils.VMObjMatcher(2)) self.assertEqual(si.vn_info[1]['net-id'], 'fake-domain:fake-project:fake-vn-uuid') def test_snat_instance_delete(self): def create_fake_virtual_machine(fq_name_str): vm_obj = {} vm_obj['fq_name'] = fq_name_str.split(':') vm_obj['uuid'] = fq_name_str vm_obj['display_name'] = fq_name_str vm = VirtualMachineSM.locate(vm_obj['uuid'], vm_obj) vm.proj_fq_name = ['fake-domain', 'fake-project'] vm.virtual_machine_interfaces = set(['fake-vmi-uuid1', 'fake-vmi-uuid2', 'fake-vmi-uuid3']) vm.virtual_router = 'fake-vr-uuid' return vm mocked_vr = mock.MagicMock() mocked_vr.uuid = 'fake-vr-uuid' self.netns_manager._vnc_lib.virtual_router_read.\ return_value = mocked_vr vm = create_fake_virtual_machine('fake-vm-uuid') self.netns_manager.delete_service(vm) self.netns_manager._vnc_lib.virtual_machine_delete\ .assert_called_with(id='fake-vm-uuid') self.netns_manager._vnc_lib.ref_update.\ assert_called_with('virtual-router', 'fake-vr-uuid', 'virtual-machine', 'fake-vm-uuid', None, 'DELETE')
class SnatInstanceManager(unittest.TestCase): def setUp(self): InstanceIpSM._cassandra = mock.MagicMock() InstanceIpSM._cassandra.read = test_utils.iip_db_read VirtualMachineInterfaceSM._cassandra = mock.MagicMock() VirtualMachineInterfaceSM._cassandra.read = test_utils.vmi_db_read VirtualMachineSM._cassandra = mock.MagicMock() VirtualMachineSM._cassandra.read = test_utils.vm_db_read VirtualRouterSM._cassandra = mock.MagicMock() VirtualRouterSM._cassandra.read = test_utils.vr_db_read VirtualNetworkSM._cassandra = mock.MagicMock() VirtualNetworkSM._cassandra.read = test_utils.vn_db_read self.mocked_vnc = mock.MagicMock() self.mocked_vnc.fq_name_to_id = test_utils.get_vn_id_for_fq_name self.mocked_vnc.virtual_machine_interface_create = test_utils.vmi_create self.mocked_vnc.virtual_network_create = test_utils.vn_create self.mocked_vnc.instance_ip_create = test_utils.iip_create self.nova_mock = mock.MagicMock() self.mocked_db = mock.MagicMock() self.mocked_args = mock.MagicMock() self.mocked_args.availability_zone = None self.mocked_manager = mock.MagicMock() self.netns_manager = NetworkNamespaceManager( db=self.mocked_db, logger=mock.MagicMock(), vnc_lib=self.mocked_vnc, vrouter_scheduler=mock.MagicMock(), nova_client=self.nova_mock, agent_manager=self.mocked_manager, args=self.mocked_args, ) def tearDown(self): ServiceTemplateSM.reset() ServiceInstanceSM.reset() InstanceIpSM.reset() VirtualMachineInterfaceSM.reset() VirtualMachineSM.reset() VirtualRouterSM.reset() VirtualNetworkSM.reset() VirtualNetworkSM._cassandra.reset_mock() def test_snat_instance_create(self): test_utils.create_test_project("fake-domain:fake-project") test_utils.create_test_virtual_network("fake-domain:fake-project:public-vn") test_utils.create_test_virtual_network("fake-domain:fake-project:fake-vn-uuid") test_utils.create_test_security_group("fake-domain:fake-project:default") st = test_utils.create_test_st( name="snat-template", virt_type="network-namespace", intf_list=[["right", True], ["left", True]] ) si = test_utils.create_test_si(name="snat-instance", count=2, intf_list=["public-vn", "fake-vn-uuid"]) self.netns_manager.create_service(st, si) self.mocked_vnc.virtual_machine_create.assert_any_call(test_utils.VMObjMatcher(1)) self.mocked_vnc.virtual_machine_create.assert_any_call(test_utils.VMObjMatcher(2)) self.assertEqual(si.vn_info[1]["net-id"], "fake-domain:fake-project:fake-vn-uuid") def test_snat_instance_delete(self): def create_fake_virtual_machine(fq_name_str): vm_obj = {} vm_obj["fq_name"] = fq_name_str.split(":") vm_obj["uuid"] = fq_name_str vm_obj["display_name"] = fq_name_str vm = VirtualMachineSM.locate(vm_obj["uuid"], vm_obj) vm.proj_fq_name = ["fake-domain", "fake-project"] vm.virtual_machine_interfaces = set(["fake-vmi-uuid1", "fake-vmi-uuid2", "fake-vmi-uuid3"]) vm.virtual_router = "fake-vr-uuid" return vm mocked_vr = mock.MagicMock() mocked_vr.uuid = "fake-vr-uuid" self.netns_manager._vnc_lib.virtual_router_read.return_value = mocked_vr vm = create_fake_virtual_machine("fake-vm-uuid") self.netns_manager.delete_service(vm) self.netns_manager._vnc_lib.virtual_machine_delete.assert_called_with(id="fake-vm-uuid") mocked_vr.del_virtual_machine.assert_called_with(test_utils.VMObjMatcher("fake-vm-uuid", True))
class SnatInstanceManager(unittest.TestCase): def setUp(self): InstanceIpSM._cassandra = mock.MagicMock() InstanceIpSM._cassandra.read = test_utils.iip_db_read VirtualMachineInterfaceSM._cassandra = mock.MagicMock() VirtualMachineInterfaceSM._cassandra.read = test_utils.vmi_db_read VirtualMachineSM._cassandra = mock.MagicMock() VirtualMachineSM._cassandra.read = test_utils.vm_db_read VirtualRouterSM._cassandra = mock.MagicMock() VirtualRouterSM._cassandra.read = test_utils.vr_db_read VirtualNetworkSM._cassandra = mock.MagicMock() VirtualNetworkSM._cassandra.read = test_utils.vn_db_read self.mocked_vnc = mock.MagicMock() self.mocked_vnc.fq_name_to_id = test_utils.get_vn_id_for_fq_name self.mocked_vnc.virtual_machine_interface_create = test_utils.vmi_create self.mocked_vnc.virtual_network_create = test_utils.vn_create self.mocked_vnc.instance_ip_create = test_utils.iip_create self.nova_mock = mock.MagicMock() self.mocked_db = mock.MagicMock() self.mocked_args = mock.MagicMock() self.mocked_args.availability_zone = None self.mocked_manager = mock.MagicMock() self.netns_manager = NetworkNamespaceManager( db=self.mocked_db, logger=mock.MagicMock(), vnc_lib=self.mocked_vnc, vrouter_scheduler=mock.MagicMock(), nova_client=self.nova_mock, agent_manager=self.mocked_manager, args=self.mocked_args) def tearDown(self): ServiceTemplateSM.reset() ServiceInstanceSM.reset() InstanceIpSM.reset() del InstanceIpSM._cassandra VirtualMachineInterfaceSM.reset() del VirtualMachineInterfaceSM._cassandra VirtualMachineSM.reset() del VirtualMachineSM._cassandra VirtualRouterSM.reset() del VirtualRouterSM._cassandra VirtualNetworkSM.reset() del VirtualNetworkSM._cassandra def test_snat_instance_create(self): test_utils.create_test_project('fake-domain:fake-project') test_utils.create_test_virtual_network( 'fake-domain:fake-project:public-vn') test_utils.create_test_virtual_network( 'fake-domain:fake-project:fake-vn-uuid') test_utils.create_test_security_group( 'fake-domain:fake-project:default') st = test_utils.create_test_st(name='snat-template', virt_type='network-namespace', intf_list=[['right', True], ['left', True]]) si = test_utils.create_test_si(name='snat-instance', count=2, intf_list=['public-vn', 'fake-vn-uuid']) self.netns_manager.create_service(st, si) self.mocked_vnc.virtual_machine_create.assert_any_call( test_utils.VMObjMatcher(1)) self.mocked_vnc.virtual_machine_create.assert_any_call( test_utils.VMObjMatcher(2)) self.assertEqual(si.vn_info[1]['net-id'], 'fake-domain:fake-project:fake-vn-uuid') def test_snat_instance_delete(self): def create_fake_virtual_machine(fq_name_str): vm_obj = {} vm_obj['fq_name'] = fq_name_str.split(':') vm_obj['uuid'] = fq_name_str vm_obj['display_name'] = fq_name_str vm = VirtualMachineSM.locate(vm_obj['uuid'], vm_obj) vm.proj_fq_name = ['fake-domain', 'fake-project'] vm.virtual_machine_interfaces = set( ['fake-vmi-uuid1', 'fake-vmi-uuid2', 'fake-vmi-uuid3']) vm.virtual_router = 'fake-vr-uuid' return vm mocked_vr = mock.MagicMock() mocked_vr.uuid = 'fake-vr-uuid' self.netns_manager._vnc_lib.virtual_router_read.\ return_value = mocked_vr vm = create_fake_virtual_machine('fake-vm-uuid') self.netns_manager.delete_service(vm) self.netns_manager._vnc_lib.virtual_machine_delete\ .assert_called_with(id='fake-vm-uuid') mocked_vr.del_virtual_machine.assert_called_with( test_utils.VMObjMatcher('fake-vm-uuid', True))
class SnatInstanceManager(unittest.TestCase): def setUp(self): def get_vn_id(obj_type, fq_name): if obj_type != 'virtual-network': return for vn in VirtualNetworkSM.values(): if vn.fq_name == fq_name: return vn.uuid raise NoIdError(fq_name) def vmi_create(vmi_obj): vmi_obj.uuid = 'fake-vmi-uuid' return def vn_create(vn_obj): vn_obj.uuid = 'fake-vn-uuid' return def vn_read(vn_id): vn_obj = {} vn_obj['uuid'] = 'fake-vn-uuid' vn_obj['fq_name'] = ['fake-domain', 'fake-project', 'fake-vn-uuid'] return True, [vn_obj] def vm_read(vm_id): class SI(object): def __init__(self, name, fq_name): self.name = name self.fq_name = fq_name vm_obj = {} vm_obj['uuid'] = 'fake-vm-uuid' vm_obj['fq_name'] = ['fake-vm-uuid'] fq_name = ['fake-domain', 'fake-project', 'fake-snat-instance'] name = 'fake-snat-instance' si = SI(name, fq_name) instance_name = self.netns_manager._get_instance_name(si, 0) vm_obj['display_name'] = instance_name + '__' + 'network-namespace' return True, [vm_obj] def vr_read(vm_id): vr_obj = {} vr_obj['uuid'] = 'fake-vr-uuid' vr_obj['fq_name'] = ['fake-vr-uuid'] return True, [vr_obj] VirtualMachineSM._cassandra = mock.MagicMock() VirtualMachineSM._cassandra._cassandra_virtual_machine_read = vm_read VirtualRouterSM._cassandra = mock.MagicMock() VirtualRouterSM._cassandra._cassandra_virtual_router_read = vr_read VirtualNetworkSM._cassandra = mock.MagicMock() VirtualNetworkSM._cassandra._cassandra_virtual_network_read = vn_read self.mocked_vnc = mock.MagicMock() self.mocked_vnc.fq_name_to_id = get_vn_id self.mocked_vnc.virtual_machine_interface_create = vmi_create self.mocked_vnc.virtual_network_create = vn_create self.nova_mock = mock.MagicMock() self.mocked_db = mock.MagicMock() self.mocked_args = mock.MagicMock() self.mocked_args.availability_zone = None self.netns_manager = NetworkNamespaceManager( db=self.mocked_db, logger=mock.MagicMock(), vnc_lib=self.mocked_vnc, vrouter_scheduler=mock.MagicMock(), nova_client=self.nova_mock, args=self.mocked_args) def tearDown(self): ServiceTemplateSM.delete('fake-st-uuid') ServiceInstanceSM.delete('fake-si-uuid') pass def create_test_project(self, fq_name_str): proj_obj = {} proj_obj['fq_name'] = fq_name_str.split(':') proj_obj['uuid'] = fq_name_str proj_obj['id_perms'] = 'fake-id-perms' ProjectSM.locate(proj_obj['uuid'], proj_obj) def create_test_virtual_network(self, fq_name_str): vn_obj = {} vn_obj['fq_name'] = fq_name_str.split(':') vn_obj['uuid'] = fq_name_str vn_obj['id_perms'] = 'fake-id-perms' VirtualNetworkSM.locate(vn_obj['uuid'], vn_obj) def create_test_security_group(self, fq_name_str): sg_obj = {} sg_obj['fq_name'] = fq_name_str.split(':') sg_obj['uuid'] = fq_name_str sg_obj['id_perms'] = 'fake-id-perms' SecurityGroupSM.locate(sg_obj['uuid'], sg_obj) def create_test_virtual_machine(self, fq_name_str): vm_obj = {} vm_obj['fq_name'] = fq_name_str.split(':') vm_obj['uuid'] = fq_name_str vm_obj['display_name'] = fq_name_str vm = VirtualMachineSM.locate(vm_obj['uuid'], vm_obj) vm.proj_fq_name = ['fake-domain', 'fake-project'] return vm def test_snat_instance_create(self): self.create_test_project('fake-domain:fake-project') self.create_test_virtual_network('fake-domain:fake-project:public-vn') self.create_test_security_group('fake-domain:fake-project:default') st_obj = {} st_obj['fq_name'] = ['fake-domain', 'fake-snat-template'] st_obj['uuid'] = 'fake-st-uuid' st_obj['id_perms'] = 'fake-id-perms' st_props = {} st_props['service_virtualization_type'] = 'network-namespace' st_props['service_mode'] = 'in-network-nat' st_props['service_type'] = 'source-nat' st_props['ordered_interfaces'] = True st_props['service_scaling'] = True st_props['interface_type'] = [{ 'service_interface_type': 'right', 'shared_ip': True }, { 'service_interface_type': 'left', 'shared_ip': True }] st_obj['service_template_properties'] = st_props si_obj = {} si_obj['fq_name'] = [ 'fake-domain', 'fake-project', 'fake-snat-instance' ] si_obj['uuid'] = 'fake-si-uuid' si_obj['id_perms'] = 'fake-id-perms' si_props = {} si_props['scale_out'] = {'max_instances': 2} si_props['interface_list'] = [{ 'virtual_network': 'fake-domain:fake-project:public-vn' }, { 'virtual_network': '' }] si_obj['service_instance_properties'] = si_props st = ServiceTemplateSM.locate('fake-st-uuid', st_obj) si = ServiceInstanceSM.locate('fake-si-uuid', si_obj) self.netns_manager.create_service(st, si) self.mocked_vnc.virtual_machine_create.assert_any_call(VMObjMatcher(1)) self.mocked_vnc.virtual_machine_create.assert_any_call(VMObjMatcher(2)) self.assertEqual(si.vn_info[1]['net-id'], 'fake-vn-uuid') def test_snat_instance_delete(self): def create_fake_virtual_machine(fq_name_str): vm_obj = {} vm_obj['fq_name'] = fq_name_str.split(':') vm_obj['uuid'] = fq_name_str vm_obj['display_name'] = fq_name_str vm = VirtualMachineSM.locate(vm_obj['uuid'], vm_obj) vm.proj_fq_name = ['fake-domain', 'fake-project'] vm.virtual_machine_interfaces = set( ['fake-vmi-uuid1', 'fake-vmi-uuid2', 'fake-vmi-uuid3']) vm.virtual_router = 'fake-vr-uuid' return vm mocked_vr = mock.MagicMock() mocked_vr.uuid = 'fake-vr-uuid' self.netns_manager._vnc_lib.virtual_router_read.\ return_value = mocked_vr vm = create_fake_virtual_machine('fake-vm-uuid') self.netns_manager.delete_service(vm) self.netns_manager._vnc_lib.virtual_machine_delete\ .assert_called_with(id='fake-vm-uuid') mocked_vr.del_virtual_machine.assert_called_with( VMObjMatcher('fake-vm-uuid', True))