kubernetes_utils: avoid 404 error code in delete_network() 49/59949/6
authorMytnyk, Volodymyr <volodymyrx.mytnyk@intel.com>
Wed, 18 Jul 2018 15:56:23 +0000 (16:56 +0100)
committerMytnyk, Volodymyr <volodymyrx.mytnyk@intel.com>
Tue, 24 Jul 2018 08:17:01 +0000 (09:17 +0100)
JIRA: YARDSTICK-1316

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

index f5b0443..c90f73e 100644 (file)
@@ -266,7 +266,8 @@ def create_network(scope, group, version, plural, body, namespace='default'):
             action='create', resource='Custom Object: Network')
 
 
-def delete_network(scope, group, version, plural, name, namespace='default'):
+def delete_network(scope, group, version, plural, name, namespace='default', skip_codes=None):
+    skip_codes = [] if not skip_codes else skip_codes
     api = get_custom_objects_api()
     try:
         if scope == consts.SCOPE_CLUSTER:
@@ -274,9 +275,12 @@ def delete_network(scope, group, version, plural, name, namespace='default'):
         else:
             api.delete_namespaced_custom_object(
                 group, version, namespace, plural, name, {})
-    except ApiException:
-        raise exceptions.KubernetesApiException(
-            action='delete', resource='Custom Object: Network')
+    except ApiException as e:
+        if e.status in skip_codes:
+            LOG.info(e.reason)
+        else:
+            raise exceptions.KubernetesApiException(
+                action='delete', resource='Custom Object: Network')
 
 
 def get_pod_list(namespace='default'):      # pragma: no cover
index 7b14502..594f679 100644 (file)
@@ -441,7 +441,7 @@ class NetworkObject(object):
 
     def delete(self):
         k8s_utils.delete_network(self.scope, self.group, self.version,
-                                 self.plural, self._name)
+                                 self.plural, self._name, skip_codes=[404])
 
 
 class KubernetesTemplate(object):
index 42aa9f7..9dca270 100644 (file)
@@ -240,6 +240,19 @@ class DeleteNetworkTestCase(base.BaseUnitTestCase):
                 constants.SCOPE_CLUSTER, mock.ANY, mock.ANY, mock.ANY,
                 mock.ANY)
 
+    @mock.patch.object(kubernetes_utils, 'get_custom_objects_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_cluster_custom_object.side_effect = rest.ApiException(status=404)
+
+        mock_get_api.return_value = mock_api
+        kubernetes_utils.delete_network(
+            constants.SCOPE_CLUSTER, mock.ANY, mock.ANY, mock.ANY,
+            mock.ANY, skip_codes=[404])
+
+        mock_log.info.assert_called_once()
+
 
 class DeletePodTestCase(base.BaseUnitTestCase):
     @mock.patch.object(kubernetes_utils, 'get_core_api')
@@ -260,8 +273,9 @@ class DeletePodTestCase(base.BaseUnitTestCase):
         with self.assertRaises(exceptions.KubernetesApiException):
             kubernetes_utils.delete_pod(mock.ANY, skip_codes=[404])
 
+    @mock.patch.object(kubernetes_utils, 'LOG')
     @mock.patch.object(kubernetes_utils, 'get_core_api')
-    def test_execute_skip_exception(self, mock_get_api):
+    def test_execute_skip_exception(self, mock_get_api, *args):
         mock_api = mock.Mock()
         mock_api.delete_namespaced_pod.side_effect = rest.ApiException(status=404)
 
@@ -289,12 +303,11 @@ class DeleteServiceTestCase(base.BaseUnitTestCase):
         with self.assertRaises(exceptions.KubernetesApiException):
             kubernetes_utils.delete_service(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.patch.object(kubernetes_utils, 'get_core_api')
+    def test_execute_skip_exception(self, mock_get_api, *args):
         mock_api = mock.Mock()
         mock_api.delete_namespaced_service.side_effect = rest.ApiException(status=404)
 
         mock_get_api.return_value = mock_api
         kubernetes_utils.delete_service(mock.ANY, skip_codes=[404])
-        mock_log.info.assert_called_once()
index 5a6f8c6..4bf6783 100644 (file)
@@ -543,7 +543,7 @@ class NetworkObjectTestCase(base.BaseUnitTestCase):
         net_obj._name = 'name'
         net_obj.delete()
         mock_delete_network.assert_called_once_with(
-            'scope', 'group', 'version', 'plural', 'name')
+            'scope', 'group', 'version', 'plural', 'name', skip_codes=[404])
 
 
 class ServiceNodePortObjectTestCase(base.BaseUnitTestCase):