Ejemplo n.º 1
0
    def test_on_present_sriov(self, ged, get_k8s_client, update_port_pci_info,
                              activate_vif):
        ged.return_value = [self._driver]
        kp = kuryrport.KuryrPortHandler()
        self._vif2.plugin = constants.KURYR_VIF_TYPE_SRIOV
        self._vif2.active = True
        self._kp['status']['vifs'] = {
            'eth0': {
                'default': True,
                'vif': self._vif2.obj_to_primitive()
            },
            'eth1': {
                'default': False,
                'vif': self._vif1.obj_to_primitive()
            }
        }
        CONF.set_override('enable_node_annotations', True, group='sriov')
        self.addCleanup(CONF.clear_override,
                        'enable_node_annotations',
                        group='sriov')
        activate_vif.side_effect = os_exc.ResourceNotFound()

        kp.on_present(self._kp)

        update_port_pci_info.assert_called_once_with(self._host, self._vif2)
Ejemplo n.º 2
0
    def test_get_exception_on_update_crd(self, ged, k8s, get_project, get_sg,
                                         get_subnets, request_vif, update_crd,
                                         release_vif):
        ged.return_value = [self._driver]
        kp = kuryrport.KuryrPortHandler()
        kp.k8s.get.return_value = self._pod
        get_sg.return_value = self._security_groups
        get_project.return_value = self._project_id
        get_subnets.return_value = mock.sentinel.subnets
        request_vif.return_value = self._vif1
        update_crd.side_effect = k_exc.K8sClientException()

        self.assertTrue(kp.get_vifs(self._kp))

        kp.k8s.get.assert_called_once_with(self._pod_uri)
        get_project.assert_called_once_with(self._pod)
        get_sg.assert_called_once_with(self._pod, self._project_id)
        get_subnets.assert_called_once_with(self._pod, self._project_id)
        request_vif.assert_called_once_with(self._pod, self._project_id,
                                            mock.sentinel.subnets,
                                            self._security_groups)
        update_crd.assert_called_once_with(
            self._kp,
            {constants.DEFAULT_IFNAME: {
                'default': True,
                'vif': self._vif1
            }})
        release_vif.assert_called_once_with(self._pod, self._vif1,
                                            self._project_id,
                                            self._security_groups)
Ejemplo n.º 3
0
    def test_update_kuryrport_crd(self, ged, k8s):
        ged.return_value = [self._driver]
        kp = kuryrport.KuryrPortHandler()

        kp._update_kuryrport_crd(self._kp, self._vifs)
        self._vif1.obj_reset_changes()
        self._vif2.obj_reset_changes()
        vif1 = self._vif1.obj_to_primitive()
        vif2 = self._vif2.obj_to_primitive()

        arg = {
            'vifs': {
                'eth0': {
                    'default': True,
                    'vif': vif1
                },
                'eth1': {
                    'default': False,
                    'vif': vif2
                }
            }
        }
        kp.k8s.patch_crd.assert_called_once_with('status',
                                                 utils.get_res_link(self._kp),
                                                 arg)
Ejemplo n.º 4
0
    def test_is_network_policy_enabled(self, ged, k8s):
        ged.return_value = [self._driver]
        kp = kuryrport.KuryrPortHandler()

        CONF.set_override('enabled_handlers', ['fake_handler'],
                          group='kubernetes')
        CONF.set_override('service_security_groups_driver',
                          'foo',
                          group='kubernetes')

        self.assertFalse(kp._is_network_policy_enabled())

        CONF.set_override('enabled_handlers', ['policy'], group='kubernetes')
        CONF.set_override('service_security_groups_driver',
                          'foo',
                          group='kubernetes')

        self.assertFalse(kp._is_network_policy_enabled())

        CONF.set_override('enabled_handlers', ['policy'], group='kubernetes')
        self.addCleanup(CONF.clear_override,
                        'enabled_handlers',
                        group='kubernetes')
        CONF.set_override('service_security_groups_driver',
                          'policy',
                          group='kubernetes')
        self.addCleanup(CONF.clear_override,
                        'service_security_groups_driver',
                        group='kubernetes')

        self.assertTrue(kp._is_network_policy_enabled())
Ejemplo n.º 5
0
    def test_get_vifs_with_additional_vif(self, ged, k8s, get_project, get_sg,
                                          get_subnets, request_vif,
                                          update_crd):
        ged.return_value = [self._driver]
        kp = kuryrport.KuryrPortHandler()
        kp.k8s.get.return_value = self._pod
        fake_driver = mock.MagicMock()
        fake_driver.request_additional_vifs.return_value = [self._vif2]
        kp._drv_multi_vif.append(fake_driver)
        get_sg.return_value = self._security_groups
        get_project.return_value = self._project_id
        get_subnets.return_value = mock.sentinel.subnets
        request_vif.return_value = self._vif1

        self.assertTrue(kp.get_vifs(self._kp))

        kp.k8s.get.assert_called_once_with(self._pod_uri)
        get_project.assert_called_once_with(self._pod)
        get_sg.assert_called_once_with(self._pod, self._project_id)
        get_subnets.assert_called_once_with(self._pod, self._project_id)
        request_vif.assert_called_once_with(self._pod, self._project_id,
                                            mock.sentinel.subnets,
                                            self._security_groups)
        update_crd.assert_called_once_with(
            self._kp, {
                'eth0': {
                    'default': True,
                    'vif': self._vif1
                },
                'eth1': {
                    'default': False,
                    'vif': self._vif2
                }
            })
Ejemplo n.º 6
0
    def test_on_finalize_crd_sg_exceptions(self, ged, k8s, get_project,
                                           delete_sg_rules, get_sg,
                                           release_vif):
        ged.return_value = [self._driver]
        kp = kuryrport.KuryrPortHandler()
        self._kp['status']['vifs'] = self._vifs_primitive
        get_project.return_value = self._project_id
        delete_sg_rules.side_effect = k_exc.ResourceNotReady(self._pod)
        get_sg.side_effect = k_exc.ResourceNotReady(self._pod)

        with mock.patch.object(kp, 'k8s') as k8s:
            k8s.get.return_value = self._pod

            kp.on_finalize(self._kp)

            k8s.get.assert_called_once_with(self._pod_uri)
            k8s.remove_finalizer.assert_has_calls([
                mock.call(self._pod, constants.POD_FINALIZER),
                mock.call(self._kp, constants.KURYRPORT_FINALIZER)
            ])
        delete_sg_rules.assert_called_once_with(self._pod)
        get_sg.assert_called_once_with(self._pod, self._project_id)
        release_vif.assert_has_calls([
            mock.call(self._pod, self._vif1, self._project_id, []),
            mock.call(self._pod, self._vif2, self._project_id, [])
        ])
Ejemplo n.º 7
0
    def test_on_present_no_vifs_create(self, ged, get_k8s_client, get_vifs):
        ged.return_value = [self._driver]
        kp = kuryrport.KuryrPortHandler()
        get_vifs.return_value = True

        kp.on_present(self._kp)

        get_vifs.assert_called_once_with(self._kp)
Ejemplo n.º 8
0
    def test_on_present_getting_vifs_failed(self, ged, get_k8s_client,
                                            get_vifs):
        ged.return_value = [self._driver]
        kp = kuryrport.KuryrPortHandler()
        get_vifs.return_value = False

        self.assertFalse(kp.on_present(self._kp))

        get_vifs.assert_called_once_with(self._kp)
Ejemplo n.º 9
0
    def test_get_vifs_pod_not_found(self, ged, k8s):
        ged.return_value = [self._driver]
        kp = kuryrport.KuryrPortHandler()
        kp.k8s.get.side_effect = k_exc.K8sResourceNotFound(self._pod)

        self.assertRaises(k_exc.K8sResourceNotFound, kp.get_vifs, self._kp)

        kp.k8s.get.assert_called_once_with(self._pod_uri)
        kp.k8s.remove_finalizer.assert_called_once_with(
            self._kp, constants.KURYRPORT_FINALIZER)
Ejemplo n.º 10
0
    def test_on_present_port_not_found(self, ged, get_k8s_client, activate_vif,
                                       update_crd):
        ged.return_value = [self._driver]
        kp = kuryrport.KuryrPortHandler()
        self._kp['status']['vifs'] = self._vifs_primitive
        activate_vif.side_effect = os_exc.ResourceNotFound()

        kp.on_present(self._kp)

        activate_vif.assert_has_calls([mock.call(self._vif1),
                                       mock.call(self._vif2)])
Ejemplo n.º 11
0
    def test_on_finalize_pod_running(self, ged, k8s):
        ged.return_value = [self._driver]
        # copy, so it will not be affected by other tests run in parallel.
        pod = dict(self._pod)
        del (pod['metadata']['deletionTimestamp'])

        kp = kuryrport.KuryrPortHandler()

        with mock.patch.object(kp, 'k8s') as k8s:
            k8s.get.return_value = pod
            self.assertIsNone(kp.on_finalize(self._kp))
            k8s.get.assert_called_once_with(self._pod_uri)
Ejemplo n.º 12
0
    def test_on_present_active(self, ged, get_k8s_client):
        ged.return_value = [self._driver]
        kp = kuryrport.KuryrPortHandler()
        self._vif1.active = True
        self._vif2.active = True
        self._kp['status']['vifs'] = {
            'eth0': {'default': True,
                     'vif': self._vif1.obj_to_primitive()},
            'eth1': {'default': False,
                     'vif': self._vif2.obj_to_primitive()}}

        kp.on_present(self._kp)
Ejemplo n.º 13
0
    def test_on_present_pod_not_found(self, ged, get_k8s_client, activate_vif):
        ged.return_value = [self._driver]
        kp = kuryrport.KuryrPortHandler()
        self._kp['status']['vifs'] = self._vifs_primitive

        with mock.patch.object(kp, 'k8s') as k8s:
            k8s.get.side_effect = k_exc.K8sResourceNotFound(self._pod)

            self.assertRaises(k_exc.K8sResourceNotFound, kp.on_present,
                              self._kp)

            k8s.get.assert_called_once_with(self._pod_uri)
Ejemplo n.º 14
0
    def test_on_finalize_exception_on_pod(self, ged, k8s):
        ged.return_value = [self._driver]
        kp = kuryrport.KuryrPortHandler()
        self._kp['status']['vifs'] = self._vifs_primitive

        with mock.patch.object(kp, 'k8s') as k8s:
            k8s.get.side_effect = k_exc.K8sResourceNotFound(self._pod)

            self.assertIsNone(kp.on_finalize(self._kp))

            k8s.get.assert_called_once_with(self._pod_uri)
            k8s.remove_finalizer.assert_called_once_with(
                self._kp, constants.KURYRPORT_FINALIZER)
Ejemplo n.º 15
0
    def test_get_vifs_subnet_error(self, ged, k8s, get_project, get_sg,
                                   get_subnets):
        ged.return_value = [self._driver]
        kp = kuryrport.KuryrPortHandler()
        kp.k8s.get.return_value = self._pod
        get_sg.return_value = self._security_groups
        get_project.return_value = self._project_id
        get_subnets.side_effect = os_exc.ResourceNotFound()

        self.assertFalse(kp.get_vifs(self._kp))

        kp.k8s.get.assert_called_once_with(self._pod_uri)
        get_project.assert_called_once_with(self._pod)
        get_sg.assert_called_once_with(self._pod, self._project_id)
        get_subnets.assert_called_once_with(self._pod, self._project_id)
Ejemplo n.º 16
0
    def test_on_present_fail_update_crd(self, ged, get_k8s_client,
                                        activate_vif, update_crd, get_project,
                                        get_sg, release_vif):
        ged.return_value = [self._driver]
        kp = kuryrport.KuryrPortHandler()
        self._kp['status']['vifs'] = self._vifs_primitive
        update_crd.side_effect = k_exc.K8sResourceNotFound(self._kp)
        get_project.return_value = self._project_id
        get_sg.return_value = self._security_groups

        with mock.patch.object(kp, 'k8s') as k8s:
            k8s.get.return_value = self._pod

            kp.on_present(self._kp)

            k8s.get.assert_called_once_with(self._pod_uri)
Ejemplo n.º 17
0
    def test_on_present(self, ged, get_k8s_client, activate_vif,
                        update_crd, get_project):
        ged.return_value = [mock.MagicMock]
        kp = kuryrport.KuryrPortHandler()
        self._kp['status']['vifs'] = self._vifs_primitive
        get_project.return_value = self._project_id

        with mock.patch.object(kp, 'k8s') as k8s:
            k8s.get.return_value = self._pod

            kp.on_present(self._kp)

            k8s.get.assert_called_once_with(self._pod_uri)

        activate_vif.assert_has_calls([mock.call(self._vif1),
                                       mock.call(self._vif2)])
        update_crd.assert_called_once_with(self._kp, self._vifs)
Ejemplo n.º 18
0
    def test_on_present_np(self, ged, is_np_enabled, get_k8s_client,
                           activate_vif, update_crd, get_lb_instance,
                           get_sg_instance, create_sgr, update_services,
                           get_services, get_project):
        ged.return_value = [self._driver]
        kp = kuryrport.KuryrPortHandler()
        self._kp['status']['vifs'] = self._vifs_primitive

        with mock.patch.object(kp, 'k8s') as k8s:
            k8s.get.return_value = self._pod

            kp.on_present(self._kp)

            k8s.get.assert_called_once_with(self._pod_uri)

        activate_vif.assert_has_calls([mock.call(self._vif1),
                                       mock.call(self._vif2)])
        update_crd.assert_called_once_with(self._kp, self._vifs)
        create_sgr.assert_called_once_with(self._pod)
Ejemplo n.º 19
0
    def test_get_vifs_no_vif(self, ged, k8s, get_project, get_sg, get_subnets,
                             request_vif):
        ged.return_value = [self._driver]
        kp = kuryrport.KuryrPortHandler()
        kp.k8s.get.return_value = self._pod
        get_sg.return_value = self._security_groups
        get_project.return_value = self._project_id
        get_subnets.return_value = mock.sentinel.subnets
        request_vif.return_value = None

        self.assertFalse(kp.get_vifs(self._kp))

        kp.k8s.get.assert_called_once_with(self._pod_uri)
        get_project.assert_called_once_with(self._pod)
        get_sg.assert_called_once_with(self._pod, self._project_id)
        get_subnets.assert_called_once_with(self._pod, self._project_id)
        request_vif.assert_called_once_with(self._pod, self._project_id,
                                            mock.sentinel.subnets,
                                            self._security_groups)
Ejemplo n.º 20
0
    def test_get_vifs_resource_not_found(self, ged, k8s, get_project, get_sg,
                                         get_subnets, request_vif):
        ged.return_value = [self._driver]
        kp = kuryrport.KuryrPortHandler()
        kp.k8s.get.return_value = self._pod
        get_sg.return_value = self._security_groups
        get_project.return_value = self._project_id
        get_subnets.return_value = mock.sentinel.subnets
        request_vif.side_effect = os_exc.ResourceNotFound()

        self.assertRaises(k_exc.ResourceNotReady, kp.get_vifs, self._kp)

        kp.k8s.get.assert_called_once_with(self._pod_uri)
        get_project.assert_called_once_with(self._pod)
        get_sg.assert_called_once_with(self._pod, self._project_id)
        get_subnets.assert_called_once_with(self._pod, self._project_id)
        request_vif.assert_called_once_with(self._pod, self._project_id,
                                            mock.sentinel.subnets,
                                            self._security_groups)
Ejemplo n.º 21
0
    def test_update_services(self, ged, k8s, smap):
        ged.return_value = [self._driver]
        kp = kuryrport.KuryrPortHandler()
        kp._drv_lbaas = mock.MagicMock()
        kp._drv_svc_sg = mock.MagicMock()
        kp._drv_svc_sg.get_security_groups.return_value = self._security_groups

        smap.side_effect = [True, False]
        services = {'items': ['service1', 'service2']}

        kp._update_services(services, mock.sentinel.crd_pod_selectors,
                            self._project_id)

        smap.assert_has_calls([
            mock.call('service1', mock.sentinel.crd_pod_selectors),
            mock.call('service2', mock.sentinel.crd_pod_selectors)
        ])
        kp._drv_svc_sg.get_security_groups.assert_called_once_with(
            'service1', self._project_id)
        kp._drv_lbaas.update_lbaas_sg.assert_called_once_with(
            'service1', self._security_groups)
Ejemplo n.º 22
0
    def test_on_finalize_np(self, ged, k8s, get_project, delete_sg_rules,
                            get_sg, release_vif, is_np_enabled,
                            get_lb_instance, get_sg_instance, get_services,
                            update_services):
        ged.return_value = [self._driver]
        CONF.set_override('enforce_sg_rules', True, group='octavia_defaults')
        self.addCleanup(CONF.clear_override,
                        'enforce_sg_rules',
                        group='octavia_defaults')
        kp = kuryrport.KuryrPortHandler()
        self._kp['status']['vifs'] = self._vifs_primitive
        get_project.return_value = self._project_id
        selector = mock.sentinel.selector
        delete_sg_rules.return_value = selector
        get_sg.return_value = self._security_groups
        get_services.return_value = mock.sentinel.services

        with mock.patch.object(kp, 'k8s') as k8s:
            k8s.get.return_value = self._pod

            kp.on_finalize(self._kp)

            k8s.get.assert_called_once_with(self._pod_uri)
            k8s.remove_finalizer.assert_has_calls([
                mock.call(self._pod, constants.POD_FINALIZER),
                mock.call(self._kp, constants.KURYRPORT_FINALIZER)
            ])

        delete_sg_rules.assert_called_once_with(self._pod)
        get_sg.assert_called_once_with(self._pod, self._project_id)
        release_vif.assert_has_calls([
            mock.call(self._pod, self._vif1, self._project_id,
                      self._security_groups),
            mock.call(self._pod, self._vif2, self._project_id,
                      self._security_groups)
        ])

        get_services.assert_called_once()
        update_services.assert_called_once_with(mock.sentinel.services,
                                                selector, self._project_id)