def test__check_annotations_succeed(self): ann_objs = [ vif.PodState(default_vif=vif.VIFMacvlanNested(vif_name='foo')), vif.PodState(default_vif=vif.VIFMacvlanNested(vif_name='bar')), ] ann_objs = [jsonutils.dumps(ann.obj_to_primitive()) for ann in ann_objs] self._test__check_annotations(ann_objs, 0)
def _test__convert_annotations(self, method, calls): self.cmd.k8s.annotate = mock.Mock() ann_objs = [ ('foo', vif.PodState(default_vif=vif.VIFMacvlanNested(vif_name='foo'))), ('bar', vif.VIFMacvlanNested(vif_name='bar')), ] ann_objs = [(name, jsonutils.dumps(ann.obj_to_primitive())) for name, ann in ann_objs] pods = { 'items': [ { 'metadata': { 'annotations': { constants.K8S_ANNOTATION_VIF: ann }, 'selfLink': name, 'resourceVersion': 1, } } for name, ann in ann_objs ] } self.cmd.k8s = mock.Mock(get=mock.Mock(return_value=pods)) method() for args in calls: self.cmd.k8s.annotate.assert_any_call(*args)
def setUp(self): super(TestVIFHandler, self).setUp() self._project_id = mock.sentinel.project_id self._subnets = mock.sentinel.subnets self._security_groups = mock.sentinel.security_groups self._vif = os_obj.vif.VIFBase() self._vif.active = True self._vif_serialized = mock.sentinel.vif_serialized self._multi_vif_drv = mock.MagicMock(spec=drivers.MultiVIFDriver) self._additioan_vifs = [] self._state = vif.PodState(default_vif=self._vif) self._pod_version = mock.sentinel.pod_version self._pod_link = mock.sentinel.pod_link self._pod_namespace = mock.sentinel.namespace self._pod = { 'metadata': { 'resourceVersion': self._pod_version, 'selfLink': self._pod_link, 'namespace': self._pod_namespace }, 'status': { 'phase': k_const.K8S_POD_STATUS_PENDING }, 'spec': { 'hostNetwork': False, 'nodeName': 'hostname' } } self._handler = mock.MagicMock(spec=h_vif.VIFHandler) self._handler._drv_project = mock.Mock(spec=drivers.PodProjectDriver) self._handler._drv_subnets = mock.Mock(spec=drivers.PodSubnetsDriver) self._handler._drv_sg = mock.Mock(spec=drivers.PodSecurityGroupsDriver) self._handler._drv_vif = mock.Mock(spec=drivers.PodVIFDriver) self._handler._drv_vif_pool = mock.MagicMock( spec=drivers.VIFPoolDriver) self._handler._drv_multi_vif = [self._multi_vif_drv] self._get_project = self._handler._drv_project.get_project self._get_subnets = self._handler._drv_subnets.get_subnets self._get_security_groups = self._handler._drv_sg.get_security_groups self._set_vifs_driver = self._handler._drv_vif_pool.set_vif_driver self._request_vif = self._handler._drv_vif_pool.request_vif self._release_vif = self._handler._drv_vif_pool.release_vif self._activate_vif = self._handler._drv_vif_pool.activate_vif self._set_pod_state = self._handler._set_pod_state self._is_pending_node = self._handler._is_pending_node self._request_additional_vifs = \ self._multi_vif_drv.request_additional_vifs self._request_vif.return_value = self._vif self._request_additional_vifs.return_value = self._additioan_vifs self._is_pending_node.return_value = True self._get_project.return_value = self._project_id self._get_subnets.return_value = self._subnets self._get_security_groups.return_value = self._security_groups self._set_vifs_driver.return_value = mock.Mock( spec=drivers.PodVIFDriver)
def test_extract_pod_annotation(self): vif_obj = objects.vif.VIFBase() ps = vif.PodState(default_vif=vif_obj) d = ps.obj_to_primitive() result = utils.extract_pod_annotation(d) self.assertEqual(vif.PodState.obj_name(), result.obj_name()) self.assertEqual(vif_obj, result.default_vif)
def test__check_annotations_malformed(self): ann_objs = [ vif.PodState(default_vif=vif.VIFMacvlanNested(vif_name='foo')), ] ann_objs = [jsonutils.dumps(ann.obj_to_primitive()) for ann in ann_objs] ann_objs.append('{}') self._test__check_annotations(ann_objs, 1)
def extract_pod_annotation(annotation): obj = objects.base.VersionedObject.obj_from_primitive(annotation) # FIXME(dulek): This is code to maintain compatibility with Queens. We can # remove it once we stop supporting upgrading from Queens, # most likely in Stein. Note that this requires being sure # that *all* the pod annotations are in new format. if obj.obj_name() != vif.PodState.obj_name(): # This is old format of annotations - single VIF object. We need to # pack it in PodState object. obj = vif.PodState(default_vif=obj) return obj
def test__get_annotation_existing(self): mock_obj = vif.PodState( default_vif=vif.VIFMacvlanNested(vif_name='foo')) pod = { 'metadata': { 'annotations': { constants.K8S_ANNOTATION_VIF: jsonutils.dumps( mock_obj.obj_to_primitive()) } } } obj = self.cmd._get_annotation(pod) self.assertEqual(mock_obj, obj)
def test_move_annotations_to_crd_with_annotations(self, m_get_k8s_client): vifobj = os_obj.vif.VIFOpenVSwitch() state = vif.PodState(default_vif=vifobj) annotation = jsonutils.dumps(state.obj_to_primitive()) self._pod['metadata']['annotations'] = { k_const.K8S_ANNOTATION_VIF: annotation} vifs = {'eth0': {'default': True, 'vif': vifobj.obj_to_primitive()}} k8s = mock.MagicMock() m_get_k8s_client.return_value = k8s res = h_vif.VIFHandler._move_annotations_to_crd(self._handler, self._pod) self.assertTrue(res) self._handler._add_kuryrport_crd.assert_called_once_with(self._pod, vifs) m_get_k8s_client.assert_called_once() k8s.remove_annotations.assert_called_once_with( self._pod['metadata']['selfLink'], k_const.K8S_ANNOTATION_VIF)
def update_fn(obj): if obj.obj_name() != objects.vif.PodState.obj_name(): return vif.PodState(default_vif=obj) return self._convert_sriov(obj)
def update_fn(obj): return vif.PodState(default_vif=obj)
def setUp(self): super(TestVIFHandler, self).setUp() self._project_id = mock.sentinel.project_id self._subnets = mock.sentinel.subnets self._security_groups = mock.sentinel.security_groups self._vif = os_obj.vif.VIFBase() self._vif.active = True self._vif_serialized = mock.sentinel.vif_serialized self._multi_vif_drv = mock.MagicMock(spec=drivers.MultiVIFDriver) self._additioan_vifs = [] self._state = vif.PodState(default_vif=self._vif) self._pod_version = mock.sentinel.pod_version self._pod_link = mock.sentinel.pod_link self._pod_namespace = mock.sentinel.namespace self._pod_uid = mock.sentinel.pod_uid self._pod_name = 'pod1' self._pod = { 'metadata': {'resourceVersion': self._pod_version, 'selfLink': self._pod_link, 'name': self._pod_name, 'namespace': self._pod_namespace}, 'status': {'phase': k_const.K8S_POD_STATUS_PENDING}, 'spec': {'hostNetwork': False, 'nodeName': 'hostname'} } self._kp_version = mock.sentinel.kp_version self._kp_link = mock.sentinel.kp_link self._kp = {'apiVersion': 'openstack.org/v1', 'kind': 'KuryrPort', 'metadata': {'resourceVersion': self._kp_version, 'selfLink': mock.sentinel.kp_link, 'namespace': self._pod_namespace, 'labels': mock.ANY}, 'spec': {'podUid': self._pod_uid, 'podNodeName': 'hostname'}, 'status': {'vifs': {}}} self._handler = mock.MagicMock(spec=h_vif.VIFHandler) self._handler._drv_project = mock.Mock(spec=drivers.PodProjectDriver) self._handler._drv_subnets = mock.Mock(spec=drivers.PodSubnetsDriver) self._handler._drv_sg = mock.Mock(spec=drivers.PodSecurityGroupsDriver) self._handler._drv_vif = mock.Mock(spec=drivers.PodVIFDriver) self._handler._drv_vif_pool = mock.MagicMock( spec=drivers.VIFPoolDriver) self._handler._drv_multi_vif = [self._multi_vif_drv] self._get_project = self._handler._drv_project.get_project self._get_subnets = self._handler._drv_subnets.get_subnets self._get_security_groups = self._handler._drv_sg.get_security_groups self._set_vifs_driver = self._handler._drv_vif_pool.set_vif_driver self._request_vif = self._handler._drv_vif_pool.request_vif self._release_vif = self._handler._drv_vif_pool.release_vif self._activate_vif = self._handler._drv_vif_pool.activate_vif self._matc = self._handler._move_annotations_to_crd self._is_pod_scheduled = self._handler._is_pod_scheduled self._is_pod_completed = self._handler._is_pod_completed self._request_additional_vifs = \ self._multi_vif_drv.request_additional_vifs self._request_vif.return_value = self._vif self._request_additional_vifs.return_value = self._additioan_vifs self._is_pod_scheduled.return_value = True self._is_pod_completed.return_value = False self._get_project.return_value = self._project_id self._get_subnets.return_value = self._subnets self._get_security_groups.return_value = self._security_groups self._set_vifs_driver.return_value = mock.Mock( spec=drivers.PodVIFDriver)