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)
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)
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)
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())
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 } })
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, []) ])
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)
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)
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)
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)])
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)