示例#1
0
    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 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)
示例#3
0
    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)
示例#4
0
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')
示例#6
0
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))
示例#7
0
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))
示例#8
0
    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)
示例#9
0
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))