kubernetes_utils: avoid 404 error code in delete_config_map() 73/59973/5
authorMytnyk, Volodymyr <volodymyrx.mytnyk@intel.com>
Thu, 19 Jul 2018 07:47:02 +0000 (08:47 +0100)
committerMytnyk, Volodymyr <volodymyrx.mytnyk@intel.com>
Wed, 25 Jul 2018 09:19:28 +0000 (10:19 +0100)
JIRA: YARDSTICK-1318

Change-Id: I0c04bd2928d5a4166b483f0c4f9f75fa9e5e00d2
Signed-off-by: Mytnyk, Volodymyr <volodymyrx.mytnyk@intel.com>
yardstick/benchmark/contexts/kubernetes.py
yardstick/common/kubernetes_utils.py
yardstick/tests/unit/common/test_kubernetes_utils.py

index 6312973..e1553c7 100644 (file)
@@ -159,7 +159,7 @@ class KubernetesContext(ctx_base.Context):
         k8s_utils.create_config_map(self.ssh_key, {'authorized_keys': key})
 
     def _delete_ssh_key(self):
-        k8s_utils.delete_config_map(self.ssh_key)
+        k8s_utils.delete_config_map(self.ssh_key, skip_codes=[404])
         utils.remove_file(self.key_path)
         utils.remove_file(self.public_key_path)
 
index 03d3878..e708dc5 100644 (file)
@@ -201,8 +201,10 @@ def create_config_map(name,
 def delete_config_map(name,
                       namespace='default',
                       wait=False,
-                      **kwargs):     # pragma: no cover
+                      skip_codes=None,
+                      **kwargs):
     # pylint: disable=unused-argument
+    skip_codes = [] if not skip_codes else skip_codes
     core_v1_api = get_core_api()
     body = kwargs.get('body', client.V1DeleteOptions())
     kwargs.pop('body', None)
@@ -211,9 +213,12 @@ def delete_config_map(name,
                                                  namespace,
                                                  body,
                                                  **kwargs)
-    except ApiException:
-        LOG.exception('Delete config map failed')
-        raise
+    except ApiException as e:
+        if e.status in skip_codes:
+            LOG.info(e.reason)
+        else:
+            raise exceptions.KubernetesApiException(
+                action='delete', resource='ConfigMap')
 
 
 def create_custom_resource_definition(body):
index 28de8ad..30c1c1f 100644 (file)
@@ -347,3 +347,33 @@ class DeleteReplicationControllerTestCase(base.BaseUnitTestCase):
         kubernetes_utils.delete_replication_controller(mock.ANY, skip_codes=[404])
 
         mock_log.info.assert_called_once()
+
+
+class DeleteConfigMapTestCase(base.BaseUnitTestCase):
+    @mock.patch.object(kubernetes_utils, 'get_core_api')
+    def test_execute_correct(self, mock_get_api):
+        mock_api = mock.Mock()
+        mock_get_api.return_value = mock_api
+        kubernetes_utils.delete_config_map("name", body=None)
+        mock_api.delete_namespaced_config_map.assert_called_once_with(
+            "name", "default", None
+        )
+
+    @mock.patch.object(kubernetes_utils, 'get_core_api')
+    def test_execute_exception(self, mock_get_api):
+        mock_api = mock.Mock()
+        mock_api.delete_namespaced_config_map.side_effect = rest.ApiException(status=200)
+
+        mock_get_api.return_value = mock_api
+        with self.assertRaises(exceptions.KubernetesApiException):
+            kubernetes_utils.delete_config_map(mock.ANY, skip_codes=[404])
+
+    @mock.patch.object(kubernetes_utils, 'get_core_api')
+    @mock.patch.object(kubernetes_utils, 'LOG')
+    def test_execute_skip_exception(self, mock_log, mock_get_api):
+        mock_api = mock.Mock()
+        mock_api.delete_namespaced_config_map.side_effect = rest.ApiException(status=404)
+
+        mock_get_api.return_value = mock_api
+        kubernetes_utils.delete_config_map(mock.ANY, skip_codes=[404])
+        mock_log.info.assert_called_once()