# Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. from karbor.context import RequestContext from karbor.resource import Resource from karbor.services.protection.clients import k8s # noqa from karbor.services.protection.protectable_plugins.pod \ import K8sPodProtectablePlugin from kubernetes.client.models.v1_object_meta import V1ObjectMeta from kubernetes.client.models.v1_pod import V1Pod from kubernetes.client.models.v1_pod_list import V1PodList from kubernetes.client.models.v1_pod_status import V1PodStatus from oslo_config import cfg from karbor.tests import base import mock import uuid class PodProtectablePluginTest(base.TestCase): def setUp(self): super(PodProtectablePluginTest, self).setUp() self._context = RequestContext(user_id='demo', project_id='abcd', auth_token='efgh', service_catalog=None) def test_get_resource_type(self): plugin = K8sPodProtectablePlugin(self._context, cfg.CONF) self.assertEqual('OS::Kubernetes::Pod', plugin.get_resource_type()) def test_get_parent_resource_types(self): plugin = K8sPodProtectablePlugin(self._context, cfg.CONF) self.assertEqual(("OS::Keystone::Project"), plugin.get_parent_resource_types()) @mock.patch('kubernetes.client.api_client.ApiClient.__del__') @mock.patch('kubernetes.client.apis.core_v1_api.' 'CoreV1Api.list_namespaced_pod') def test_list_resources(self, mock_pod_list, mock_pod_delete): plugin = K8sPodProtectablePlugin(self._context, cfg.CONF) pod = V1Pod(api_version="v1", kind="Pod", metadata=V1ObjectMeta( name="busybox-test", namespace="default", uid="dd8236e1-8c6c-11e7-9b7a-fa163e18e097"), status=V1PodStatus(phase="Running")) pod_list = V1PodList(items=[pod]) mock_pod_list.return_value = pod_list self.assertEqual([ Resource('OS::Kubernetes::Pod', uuid.uuid5(uuid.NAMESPACE_OID, "default:busybox-test"), 'default:busybox-test')], plugin.list_resources(self._context)) @mock.patch('kubernetes.client.api_client.ApiClient.__del__') @mock.patch('kubernetes.client.apis.core_v1_api.' 'CoreV1Api.read_namespaced_pod') def test_show_resource(self, mock_pod_get, mock_pod_delete): plugin = K8sPodProtectablePlugin(self._context, cfg.CONF) pod = V1Pod(api_version="v1", kind="Pod", metadata=V1ObjectMeta( name="busybox-test", namespace="default", uid="dd8236e1-8c6c-11e7-9b7a-fa163e18e097"), status=V1PodStatus(phase="Running")) mock_pod_get.return_value = pod self.assertEqual(Resource( 'OS::Kubernetes::Pod', uuid.uuid5(uuid.NAMESPACE_OID, "default:busybox-test"), 'default:busybox-test'), plugin.show_resource(self._context, uuid.uuid5(uuid.NAMESPACE_OID, "default:busybox-test"), {'name': 'default:busybox-test'}) )