Replace neutron network deletion with shade. 67/51767/13
authorShobhi Jain <shobhi.jain@intel.com>
Thu, 1 Feb 2018 16:31:55 +0000 (16:31 +0000)
committerRodolfo Alonso Hernandez <rodolfo.alonso.hernandez@intel.com>
Mon, 19 Feb 2018 11:35:44 +0000 (11:35 +0000)
Function delete_neutron_net now uses shade client instead of neutron
client.

JIRA: YARDSTICK-890

Change-Id: I99b6f3ecd37d6e3b783f7eb3da9f971398fc3bdd
Signed-off-by: Shobhi Jain <shobhi.jain@intel.com>
yardstick/benchmark/scenarios/lib/delete_network.py
yardstick/common/openstack_utils.py
yardstick/tests/unit/benchmark/scenarios/lib/test_delete_network.py
yardstick/tests/unit/common/test_openstack_utils.py

index e8796bf..2e8b595 100644 (file)
@@ -7,14 +7,12 @@
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
 
-from __future__ import print_function
-from __future__ import absolute_import
-
 import logging
 
 from yardstick.benchmark.scenarios import base
 import yardstick.common.openstack_utils as op_utils
 
+
 LOG = logging.getLogger(__name__)
 
 
@@ -30,7 +28,7 @@ class DeleteNetwork(base.Scenario):
 
         self.network_id = self.options.get("network_id", None)
 
-        self.neutron_client = op_utils.get_neutron_client()
+        self.shade_client = op_utils.get_shade_client()
 
         self.setup_done = False
 
@@ -45,7 +43,7 @@ class DeleteNetwork(base.Scenario):
         if not self.setup_done:
             self.setup()
 
-        status = op_utils.delete_neutron_net(self.neutron_client,
+        status = op_utils.delete_neutron_net(self.shade_client,
                                              network_id=self.network_id)
         if status:
             result.update({"delete_network": 1})
@@ -53,3 +51,4 @@ class DeleteNetwork(base.Scenario):
         else:
             result.update({"delete_network": 0})
             LOG.error("Delete network failed!")
+        return status
index c5b17c2..8f666e2 100644 (file)
@@ -15,6 +15,7 @@ import logging
 from keystoneauth1 import loading
 from keystoneauth1 import session
 import shade
+from shade import exc
 
 from cinderclient import client as cinderclient
 from novaclient import client as novaclient
@@ -174,6 +175,7 @@ def get_glance_client():    # pragma: no cover
 def get_shade_client():
     return shade.openstack_cloud()
 
+
 # *********************************************
 #   NOVA
 # *********************************************
@@ -272,7 +274,8 @@ def create_aggregate_with_host(nova_client, aggregate_name, av_zone,
 def create_keypair(name, key_path=None):    # pragma: no cover
     try:
         with open(key_path) as fpubkey:
-            keypair = get_nova_client().keypairs.create(name=name, public_key=fpubkey.read())
+            keypair = get_nova_client().keypairs.create(
+                name=name, public_key=fpubkey.read())
             return keypair
     except Exception:  # pylint: disable=broad-except
         log.exception("Error [create_keypair(nova_client)]")
@@ -304,9 +307,11 @@ def create_instance_and_wait_for_active(json_body):    # pragma: no cover
     return None
 
 
-def attach_server_volume(server_id, volume_id, device=None):    # pragma: no cover
+def attach_server_volume(server_id, volume_id,
+                         device=None):    # pragma: no cover
     try:
-        get_nova_client().volumes.create_server_volume(server_id, volume_id, device)
+        get_nova_client().volumes.create_server_volume(server_id,
+                                                       volume_id, device)
     except Exception:  # pylint: disable=broad-except
         log.exception("Error [attach_server_volume(nova_client, '%s', '%s')]",
                       server_id, volume_id)
@@ -370,7 +375,8 @@ def get_server_by_name(name):   # pragma: no cover
 
 def create_flavor(name, ram, vcpus, disk, **kwargs):   # pragma: no cover
     try:
-        return get_nova_client().flavors.create(name, ram, vcpus, disk, **kwargs)
+        return get_nova_client().flavors.create(name, ram, vcpus,
+                                                disk, **kwargs)
     except Exception:  # pylint: disable=broad-except
         log.exception("Error [create_flavor(nova_client, %s, %s, %s, %s, %s)]",
                       name, ram, disk, vcpus, kwargs['is_public'])
@@ -455,13 +461,11 @@ def create_neutron_net(neutron_client, json_body):      # pragma: no cover
         raise Exception("operation error")
 
 
-def delete_neutron_net(neutron_client, network_id):      # pragma: no cover
+def delete_neutron_net(shade_client, network_id):
     try:
-        neutron_client.delete_network(network_id)
-        return True
-    except Exception:  # pylint: disable=broad-except
-        log.error("Error [delete_neutron_net(neutron_client, '%s')]",
-                  network_id)
+        return shade_client.delete_network(network_id)
+    except exc.OpenStackCloudException:
+        log.error("Error [delete_neutron_net(shade_client, '%s')]", network_id)
         return False
 
 
@@ -558,7 +562,8 @@ def get_security_group_id(neutron_client, sg_name):      # pragma: no cover
     return id
 
 
-def create_security_group(neutron_client, sg_name, sg_description):      # pragma: no cover
+def create_security_group(neutron_client, sg_name,
+                          sg_description):      # pragma: no cover
     json_body = {'security_group': {'name': sg_name,
                                     'description': sg_description}}
     try:
@@ -611,8 +616,8 @@ def create_secgroup_rule(neutron_client, sg_id, direction, protocol,
         return False
 
 
-def create_security_group_full(neutron_client,
-                               sg_name, sg_description):      # pragma: no cover
+def create_security_group_full(neutron_client, sg_name,
+                               sg_description):      # pragma: no cover
     sg_id = get_security_group_id(neutron_client, sg_name)
     if sg_id != '':
         log.info("Using existing security group '%s'...", sg_name)
@@ -670,22 +675,18 @@ def create_image(glance_client, image_name, file_path, disk_format,
         else:
             log.info("Creating image '%s' from '%s'...", image_name, file_path)
 
-            image = glance_client.images.create(name=image_name,
-                                                visibility=public,
-                                                disk_format=disk_format,
-                                                container_format=container_format,
-                                                min_disk=min_disk,
-                                                min_ram=min_ram,
-                                                tags=tag,
-                                                protected=protected,
-                                                **kwargs)
+            image = glance_client.images.create(
+                name=image_name, visibility=public, disk_format=disk_format,
+                container_format=container_format, min_disk=min_disk,
+                min_ram=min_ram, tags=tag, protected=protected, **kwargs)
             image_id = image.id
             with open(file_path) as image_data:
                 glance_client.images.upload(image_id, image_data)
         return image_id
     except Exception:  # pylint: disable=broad-except
-        log.error("Error [create_glance_image(glance_client, '%s', '%s', '%s')]",
-                  image_name, file_path, public)
+        log.error(
+            "Error [create_glance_image(glance_client, '%s', '%s', '%s')]",
+            image_name, file_path, public)
         return None
 
 
@@ -725,7 +726,8 @@ def create_volume(cinder_client, volume_name, volume_size,
         return None
 
 
-def delete_volume(cinder_client, volume_id, forced=False):      # pragma: no cover
+def delete_volume(cinder_client, volume_id,
+                  forced=False):      # pragma: no cover
     try:
         if forced:
             try:
index 5f11713..aef99ee 100644 (file)
@@ -6,30 +6,44 @@
 # which accompanies this distribution, and is available at
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
+
+from oslo_utils import uuidutils
 import unittest
 import mock
 
-from yardstick.benchmark.scenarios.lib.delete_network import DeleteNetwork
+import yardstick.common.openstack_utils as op_utils
+from yardstick.benchmark.scenarios.lib import delete_network
 
 
 class DeleteNetworkTestCase(unittest.TestCase):
 
-    @mock.patch('yardstick.common.openstack_utils.get_neutron_client')
-    @mock.patch('yardstick.common.openstack_utils.delete_neutron_net')
-    def test_delete_network(self, mock_get_neutron_client, mock_delete_neutron_net):
-        options = {
-            'network_id': '123-123-123'
-        }
-        args = {"options": options}
-        obj = DeleteNetwork(args, {})
-        obj.run({})
-        self.assertTrue(mock_get_neutron_client.called)
-        self.assertTrue(mock_delete_neutron_net.called)
-
-
-def main():
-    unittest.main()
-
-
-if __name__ == '__main__':
-    main()
+    def setUp(self):
+        self._mock_delete_neutron_net = mock.patch.object(
+            op_utils, 'delete_neutron_net')
+        self.mock_delete_neutron_net = self._mock_delete_neutron_net.start()
+        self._mock_get_shade_client = mock.patch.object(
+            op_utils, 'get_shade_client')
+        self.mock_get_shade_client = self._mock_get_shade_client.start()
+        self._mock_log = mock.patch.object(delete_network, 'LOG')
+        self.mock_log = self._mock_log.start()
+        _uuid = uuidutils.generate_uuid()
+        self.args = {'options': {'network_id': _uuid}}
+        self._del_obj = delete_network.DeleteNetwork(self.args, mock.ANY)
+
+        self.addCleanup(self._stop_mock)
+
+    def _stop_mock(self):
+        self._mock_delete_neutron_net.stop()
+        self._mock_get_shade_client.stop()
+        self._mock_log.stop()
+
+    def test_run(self):
+        self.mock_delete_neutron_net.return_value = True
+        self.assertTrue(self._del_obj.run({}))
+        self.mock_log.info.assert_called_once_with(
+            "Delete network successful!")
+
+    def test_run_fail(self):
+        self.mock_delete_neutron_net.return_value = False
+        self.assertFalse(self._del_obj.run({}))
+        self.mock_log.error.assert_called_once_with("Delete network failed!")
index b685e63..8a2f5f9 100644 (file)
@@ -11,6 +11,7 @@ from oslo_utils import uuidutils
 import unittest
 import mock
 
+from shade import exc
 from yardstick.common import openstack_utils
 
 
@@ -54,3 +55,31 @@ class GetNetworkIdTestCase(unittest.TestCase):
         output = openstack_utils.get_network_id(mock_shade_client,
                                                 'network_name')
         self.assertEqual(None, output)
+
+
+class DeleteNeutronNetTestCase(unittest.TestCase):
+
+    def setUp(self):
+        self.mock_shade_client = mock.Mock()
+        self.mock_shade_client.delete_network = mock.Mock()
+
+    def test_delete_neutron_net(self):
+        self.mock_shade_client.delete_network.return_value = True
+        output = openstack_utils.delete_neutron_net(self.mock_shade_client,
+                                                    'network_id')
+        self.assertTrue(output)
+
+    def test_delete_neutron_net_fail(self):
+        self.mock_shade_client.delete_network.return_value = False
+        output = openstack_utils.delete_neutron_net(self.mock_shade_client,
+                                                    'network_id')
+        self.assertFalse(output)
+
+    @mock.patch.object(openstack_utils, 'log')
+    def test_delete_neutron_net_exception(self, mock_logger):
+        self.mock_shade_client.delete_network.side_effect = (
+            exc.OpenStackCloudException('error message'))
+        output = openstack_utils.delete_neutron_net(self.mock_shade_client,
+                                                    'network_id')
+        self.assertFalse(output)
+        mock_logger.error.assert_called_once()