Replace nova delete keypair with shade client. 27/59127/1
authorShobhi Jain <shobhi.jain@intel.com>
Tue, 27 Mar 2018 15:47:04 +0000 (16:47 +0100)
committerEmma Foley <emma.l.foley@intel.com>
Wed, 27 Jun 2018 16:11:46 +0000 (17:11 +0100)
Function delete_keypair now uses shade client.

JIRA: YARDSTICK-1088

Change-Id: I46b895748c5c44b0bf7d5b035395676ebff48d7f
Signed-off-by: Shobhi Jain <shobhi.jain@intel.com>
(cherry pick from commit aded0fdb30caf035e0eb94c1216f436ba597c2c7)

yardstick/benchmark/scenarios/lib/delete_keypair.py
yardstick/common/exceptions.py
yardstick/common/openstack_utils.py
yardstick/tests/unit/benchmark/scenarios/lib/test_delete_keypair.py
yardstick/tests/unit/common/test_openstack_utils.py

index 1351399..a52a385 100644 (file)
@@ -6,14 +6,12 @@
 # which accompanies this distribution, and is available at
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
-
-from __future__ import print_function
-from __future__ import absolute_import
-
 import logging
 
+from yardstick.common import openstack_utils
+from yardstick.common import exceptions
 from yardstick.benchmark.scenarios import base
-import yardstick.common.openstack_utils as op_utils
+
 
 LOG = logging.getLogger(__name__)
 
@@ -26,11 +24,11 @@ class DeleteKeypair(base.Scenario):
     def __init__(self, scenario_cfg, context_cfg):
         self.scenario_cfg = scenario_cfg
         self.context_cfg = context_cfg
-        self.options = self.scenario_cfg['options']
+        self.options = self.scenario_cfg["options"]
 
-        self.key_name = self.options.get("key_name", "yardstick_key")
+        self.key_name = self.options["key_name"]
 
-        self.nova_client = op_utils.get_nova_client()
+        self.shade_client = openstack_utils.get_shade_client()
 
         self.setup_done = False
 
@@ -45,12 +43,13 @@ class DeleteKeypair(base.Scenario):
         if not self.setup_done:
             self.setup()
 
-        status = op_utils.delete_keypair(self.nova_client,
-                                         self.key_name)
+        status = openstack_utils.delete_keypair(self.shade_client,
+                                                self.key_name)
 
-        if status:
-            result.update({"delete_keypair": 1})
-            LOG.info("Delete keypair successful!")
-        else:
+        if not status:
             result.update({"delete_keypair": 0})
-            LOG.info("Delete keypair failed!")
+            LOG.error("Delete keypair failed!")
+            raise exceptions.ScenarioDeleteKeypairError
+
+        result.update({"delete_keypair": 1})
+        LOG.info("Delete keypair successful!")
index aa71845..3af46a8 100644 (file)
@@ -230,6 +230,10 @@ class ScenarioCreateKeypairError(YardstickException):
     message = 'Nova Create Keypair Scenario failed'
 
 
+class ScenarioDeleteKeypairError(YardstickException):
+    message = 'Nova Delete Keypair Scenario failed'
+
+
 class ApiServerError(YardstickException):
     message = 'An unkown exception happened to Api Server!'
 
index e79c988..0902d29 100644 (file)
@@ -348,12 +348,18 @@ def delete_flavor(flavor_id):    # pragma: no cover
         return True
 
 
-def delete_keypair(nova_client, key):     # pragma: no cover
+def delete_keypair(shade_client, name):
+    """Delete a keypair.
+
+    :param name: Name of the keypair to delete.
+
+    :returns: True if delete succeeded, False otherwise.
+    """
     try:
-        nova_client.keypairs.delete(key=key)
-        return True
-    except Exception:  # pylint: disable=broad-except
-        log.exception("Error [delete_keypair(nova_client)]")
+        return shade_client.delete_keypair(name)
+    except exc.OpenStackCloudException as o_exc:
+        log.error("Error [delete_neutron_router(shade_client, '%s')]. "
+                  "Exception message: %s", name, o_exc.orig_message)
         return False
 
 
index 6e790ba..c794025 100644 (file)
@@ -9,19 +9,43 @@
 import unittest
 import mock
 
-from yardstick.benchmark.scenarios.lib.delete_keypair import DeleteKeypair
+from yardstick.common import openstack_utils
+from yardstick.common import exceptions
+from yardstick.benchmark.scenarios.lib import delete_keypair
 
 
 class DeleteKeypairTestCase(unittest.TestCase):
 
-    @mock.patch('yardstick.common.openstack_utils.get_nova_client')
-    @mock.patch('yardstick.common.openstack_utils.delete_keypair')
-    def test_detach_volume(self, mock_get_nova_client, mock_delete_keypair):
-        options = {
-            'key_name': 'yardstick_key'
-        }
-        args = {"options": options}
-        obj = DeleteKeypair(args, {})
-        obj.run({})
-        mock_get_nova_client.assert_called_once()
-        mock_delete_keypair.assert_called_once()
+    def setUp(self):
+        self._mock_delete_keypair = mock.patch.object(
+            openstack_utils, 'delete_keypair')
+        self.mock_delete_keypair = self._mock_delete_keypair.start()
+        self._mock_get_shade_client = mock.patch.object(
+            openstack_utils, 'get_shade_client')
+        self.mock_get_shade_client = self._mock_get_shade_client.start()
+        self._mock_log = mock.patch.object(delete_keypair, 'LOG')
+        self.mock_log = self._mock_log.start()
+        self.args = {'options': {'key_name': 'yardstick_key'}}
+        self.result = {}
+        self.delkey_obj = delete_keypair.DeleteKeypair(self.args, mock.ANY)
+
+        self.addCleanup(self._stop_mock)
+
+    def _stop_mock(self):
+        self._mock_delete_keypair.stop()
+        self._mock_get_shade_client.stop()
+        self._mock_log.stop()
+
+    def test_run(self):
+        self.mock_delete_keypair.return_value = True
+        self.assertIsNone(self.delkey_obj.run(self.result))
+        self.assertEqual({'delete_keypair': 1}, self.result)
+        self.mock_log.info.assert_called_once_with(
+            'Delete keypair successful!')
+
+    def test_run_fail(self):
+        self.mock_delete_keypair.return_value = False
+        with self.assertRaises(exceptions.ScenarioDeleteKeypairError):
+            self.delkey_obj.run(self.result)
+        self.assertEqual({'delete_keypair': 0}, self.result)
+        self.mock_log.error.assert_called_once_with("Delete keypair failed!")
index c0332c8..4dc4a70 100644 (file)
@@ -418,3 +418,30 @@ class CreateKeypairTestCase(unittest.TestCase):
             self.mock_shade_client, self.name)
         mock_logger.error.assert_called_once()
         self.assertIsNone(output)
+
+
+class DeleteKeypairTestCase(unittest.TestCase):
+
+    def setUp(self):
+        self.mock_shade_client = mock.Mock()
+
+    def test_delete_keypair(self):
+        self.mock_shade_client.delete_keypair.return_value = True
+        output = openstack_utils.delete_keypair(self.mock_shade_client,
+                                                'key_name')
+        self.assertTrue(output)
+
+    def test_delete_keypair_fail(self):
+        self.mock_shade_client.delete_keypair.return_value = False
+        output = openstack_utils.delete_keypair(self.mock_shade_client,
+                                                'key_name')
+        self.assertFalse(output)
+
+    @mock.patch.object(openstack_utils, 'log')
+    def test_delete_keypair_exception(self, mock_logger):
+        self.mock_shade_client.delete_keypair.side_effect = (
+            exc.OpenStackCloudException('error message'))
+        output = openstack_utils.delete_keypair(self.mock_shade_client,
+                                                'key_name')
+        mock_logger.error.assert_called_once()
+        self.assertFalse(output)