Clean all possible resources 03/59703/1
authorCédric Ollivier <cedric.ollivier@orange.com>
Wed, 11 Jul 2018 15:33:44 +0000 (17:33 +0200)
committerCédric Ollivier <cedric.ollivier@orange.com>
Wed, 11 Jul 2018 16:14:19 +0000 (18:14 +0200)
It checks all openstack resources before cleaning.
It allows removing images even if the test fail quickly.

Change-Id: I1763b8a70fa7ffeb03c435e8e775c7afd1a7adac
Signed-off-by: Cédric Ollivier <cedric.ollivier@orange.com>
(cherry picked from commit 6166caffe31888ef237874fdcaf088ac4ff8d003)

functest/core/singlevm.py
functest/core/tenantnetwork.py
functest/opnfv_tests/openstack/rally/rally.py
functest/opnfv_tests/openstack/tempest/tempest.py
functest/opnfv_tests/openstack/vping/vping_ssh.py
functest/opnfv_tests/openstack/vping/vping_userdata.py
functest/tests/unit/openstack/vping/test_vping_ssh.py

index 23f4537..ad79a8e 100644 (file)
@@ -186,8 +186,10 @@ class VmReady1(tenantnetwork.TenantNetwork1):
             assert self.orig_cloud
             assert self.cloud
             super(VmReady1, self).clean()
-            self.cloud.delete_image(self.image.id)
-            self.orig_cloud.delete_flavor(self.flavor.id)
+            if self.image:
+                self.cloud.delete_image(self.image.id)
+            if self.flavor:
+                self.orig_cloud.delete_flavor(self.flavor.id)
         except Exception:  # pylint: disable=broad-except
             self.__logger.exception("Cannot clean all ressources")
 
@@ -368,10 +370,14 @@ class SingleVm1(VmReady1):
         try:
             assert self.orig_cloud
             assert self.cloud
-            self.cloud.delete_floating_ip(self.fip.id)
-            self.cloud.delete_server(self.sshvm, wait=True)
-            self.cloud.delete_security_group(self.sec.id)
-            self.cloud.delete_keypair(self.keypair.name)
+            if self.fip:
+                self.cloud.delete_floating_ip(self.fip.id)
+            if self.sshvm:
+                self.cloud.delete_server(self.sshvm, wait=True)
+            if self.sec:
+                self.cloud.delete_security_group(self.sec.id)
+            if self.keypair:
+                self.cloud.delete_keypair(self.keypair.name)
             super(SingleVm1, self).clean()
         except Exception:  # pylint: disable=broad-except
             self.__logger.exception("Cannot clean all ressources")
index df8c2af..328fb33 100644 (file)
@@ -93,10 +93,10 @@ class NewProject(object):
         """Remove projects/users"""
         try:
             assert self.orig_cloud
-            assert self.user.id
-            assert self.project.id
-            self.orig_cloud.delete_user(self.user.id)
-            self.orig_cloud.delete_project(self.project.id)
+            if self.user:
+                self.orig_cloud.delete_user(self.user.id)
+            if self.project:
+                self.orig_cloud.delete_project(self.project.id)
             if self.role:
                 self.orig_cloud.delete_role(self.role.id)
         except Exception:  # pylint: disable=broad-except
@@ -210,10 +210,15 @@ class TenantNetwork1(testcase.TestCase):
     def clean(self):
         try:
             assert self.cloud
-            self.cloud.remove_router_interface(self.router, self.subnet.id)
-            self.cloud.delete_router(self.router.id)
-            self.cloud.delete_subnet(self.subnet.id)
-            self.cloud.delete_network(self.network.id)
+            if self.router:
+                if self.subnet:
+                    self.cloud.remove_router_interface(
+                        self.router, self.subnet.id)
+                self.cloud.delete_router(self.router.id)
+            if self.subnet:
+                self.cloud.delete_subnet(self.subnet.id)
+            if self.network:
+                self.cloud.delete_network(self.network.id)
         except Exception:  # pylint: disable=broad-except
             self.__logger.exception("cannot clean all ressources")
 
index a4371a6..4d12a61 100644 (file)
@@ -463,7 +463,8 @@ class RallyBase(singlevm.VmReady1):
     def clean(self):
         """Cleanup of OpenStack resources. Should be called on completion."""
         super(RallyBase, self).clean()
-        self.orig_cloud.delete_flavor(self.flavor_alt.id)
+        if self.flavor_alt:
+            self.orig_cloud.delete_flavor(self.flavor_alt.id)
 
     @energy.enable_recording
     def run(self, **kwargs):
index 53085d6..911c8ca 100644 (file)
@@ -316,8 +316,10 @@ class TempestCommon(singlevm.VmReady1):
         Cleanup all OpenStack objects. Should be called on completion.
         """
         super(TempestCommon, self).clean()
-        self.cloud.delete_image(self.image_alt)
-        self.orig_cloud.delete_flavor(self.flavor_alt.id)
+        if self.image_alt:
+            self.cloud.delete_image(self.image_alt)
+        if self.flavor_alt:
+            self.orig_cloud.delete_flavor(self.flavor_alt.id)
 
 
 class TempestSmokeSerial(TempestCommon):
index 1fd2d97..643f4f6 100644 (file)
@@ -51,7 +51,8 @@ class VPingSSH(singlevm.SingleVm2):
 
     def clean(self):
         assert self.cloud
-        self.cloud.delete_server(
-            self.vm2, wait=True,
-            timeout=getattr(config.CONF, 'vping_vm_delete_timeout'))
+        if self.vm2:
+            self.cloud.delete_server(
+                self.vm2, wait=True,
+                timeout=getattr(config.CONF, 'vping_vm_delete_timeout'))
         super(VPingSSH, self).clean()
index 3b0a1a9..421ea6a 100644 (file)
@@ -122,10 +122,12 @@ class VPingUserdata(singlevm.VmReady2):
 
     def clean(self):
         assert self.cloud
-        self.cloud.delete_server(
-            self.vm1, wait=True,
-            timeout=getattr(config.CONF, 'vping_vm_delete_timeout'))
-        self.cloud.delete_server(
-            self.vm2, wait=True,
-            timeout=getattr(config.CONF, 'vping_vm_delete_timeout'))
+        if self.vm1:
+            self.cloud.delete_server(
+                self.vm1, wait=True,
+                timeout=getattr(config.CONF, 'vping_vm_delete_timeout'))
+        if self.vm2:
+            self.cloud.delete_server(
+                self.vm2, wait=True,
+                timeout=getattr(config.CONF, 'vping_vm_delete_timeout'))
         super(VPingUserdata, self).clean()
index 589668e..3595638 100644 (file)
@@ -92,6 +92,7 @@ class VpingSSHTesting(unittest.TestCase):
             self.vping.clean()
 
     def test_clean_exc2(self):
+        self.vping.vm2 = munch.Munch(id='vm2')
         mdelete_server = self.vping.cloud.delete_server
         mdelete_server.side_effect = shade.OpenStackCloudException(None)
         with self.assertRaises(shade.OpenStackCloudException):
@@ -100,7 +101,7 @@ class VpingSSHTesting(unittest.TestCase):
     @mock.patch('functest.core.singlevm.SingleVm2.clean',
                 side_effect=Exception)
     def test_clean_exc3(self, *args):
-        self.vping.vm2 = munch.Munch()
+        self.vping.vm2 = munch.Munch(id='vm2')
         with self.assertRaises(Exception):
             self.vping.clean()
         self.vping.cloud.delete_server.assert_called_once_with(
@@ -109,8 +110,15 @@ class VpingSSHTesting(unittest.TestCase):
         args[0].assert_called_once_with()
 
     @mock.patch('functest.core.singlevm.SingleVm2.clean')
-    def test_clean(self, *args):
-        self.vping.vm2 = munch.Munch()
+    def test_clean1(self, *args):
+        self.vping.vm2 = None
+        self.vping.clean()
+        self.vping.cloud.delete_server.assert_not_called()
+        args[0].assert_called_once_with()
+
+    @mock.patch('functest.core.singlevm.SingleVm2.clean')
+    def test_clean2(self, *args):
+        self.vping.vm2 = munch.Munch(id='vm2')
         self.vping.clean()
         self.vping.cloud.delete_server.assert_called_once_with(
             self.vping.vm2, wait=True,