summaryrefslogtreecommitdiffstats
path: root/functest/tests/unit/utils/test_openstack_clean.py
diff options
context:
space:
mode:
Diffstat (limited to 'functest/tests/unit/utils/test_openstack_clean.py')
-rw-r--r--functest/tests/unit/utils/test_openstack_clean.py671
1 files changed, 671 insertions, 0 deletions
diff --git a/functest/tests/unit/utils/test_openstack_clean.py b/functest/tests/unit/utils/test_openstack_clean.py
new file mode 100644
index 000000000..28eab4f8a
--- /dev/null
+++ b/functest/tests/unit/utils/test_openstack_clean.py
@@ -0,0 +1,671 @@
+#!/usr/bin/env python
+
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+
+import logging
+import mock
+import unittest
+
+from functest.utils import openstack_clean
+from functest.tests.unit import test_utils
+
+
+class OSCleanTesting(unittest.TestCase):
+
+ logging.disable(logging.CRITICAL)
+
+ def _get_instance(self, key):
+ mock_obj = mock.Mock()
+ attrs = {'id': 'id' + str(key), 'name': 'name' + str(key),
+ 'ip': 'ip' + str(key)}
+ mock_obj.configure_mock(**attrs)
+ return mock_obj
+
+ def setUp(self):
+ self.client = mock.Mock()
+ self.test_list = [self._get_instance(1), self._get_instance(2)]
+ self.update_list = {'id1': 'name1', 'id2': 'name2'}
+ self.remove_list = {'id3': 'name3', 'id4': 'name4'}
+ self.test_dict_list = [{'id': 'id1', 'name': 'name1', 'ip': 'ip1',
+ 'router:external': False,
+ 'external_gateway_info': None},
+ {'id': 'id2', 'name': 'name2', 'ip': 'ip2',
+ 'router:external': False,
+ 'external_gateway_info': None}]
+ self.routers = [mock.Mock()]
+ self.ports = [mock.Mock()]
+
+ @mock.patch('functest.utils.openstack_clean.logger.debug')
+ def test_separator(self, mock_logger_debug):
+ openstack_clean.separator()
+ mock_logger_debug.assert_called_once_with("-----------------"
+ "-----------------"
+ "---------")
+
+ @mock.patch('functest.utils.openstack_clean.logger.debug')
+ def test_remove_instances(self, mock_logger_debug):
+ with mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_instances', return_value=self.test_list):
+ openstack_clean.remove_instances(self.client, self.update_list)
+ mock_logger_debug.assert_any_call("Removing Nova instances...")
+ mock_logger_debug.assert_any_call(" > this is a default "
+ "instance and will "
+ "NOT be deleted.")
+
+ @mock.patch('functest.utils.openstack_clean.logger.debug')
+ def test_remove_instances_missing_instances(self, mock_logger_debug):
+ with mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_instances', return_value=[]):
+ openstack_clean.remove_instances(self.client, self.update_list)
+ mock_logger_debug.assert_any_call("Removing Nova instances...")
+ mock_logger_debug.assert_any_call("No instances found.")
+
+ @mock.patch('functest.utils.openstack_clean.logger.debug')
+ def test_remove_instances_delete_success(self, mock_logger_debug):
+ with mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_instances', return_value=self.test_list), \
+ mock.patch('functest.utils.openstack_clean.os_utils'
+ '.delete_instance', return_value=True):
+ openstack_clean.remove_instances(self.client, self.remove_list)
+ mock_logger_debug.assert_any_call("Removing Nova instances...")
+ mock_logger_debug.assert_any_call(" > Request sent.")
+ mock_logger_debug.assert_any_call(test_utils.RegexMatch("Removing"
+ " instance"
+ " '\s*\S+'"
+ " ..."))
+
+ @mock.patch('functest.utils.openstack_clean.logger.error')
+ @mock.patch('functest.utils.openstack_clean.logger.debug')
+ def test_remove_instances_delete_failed(self, mock_logger_debug,
+ mock_logger_error):
+ with mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_instances', return_value=self.test_list), \
+ mock.patch('functest.utils.openstack_clean.os_utils'
+ '.delete_instance', return_value=False):
+ openstack_clean.remove_instances(self.client, self.remove_list)
+ mock_logger_debug.assert_any_call("Removing Nova instances...")
+ mock_logger_error.assert_any_call(test_utils.
+ RegexMatch("There has been a "
+ "problem removing "
+ "the instance \s*\S+"
+ "..."))
+ mock_logger_debug.assert_any_call(test_utils.RegexMatch("Removing"
+ " instance"
+ " '\s*\S+'"
+ " ..."))
+
+ @mock.patch('functest.utils.openstack_clean.logger.debug')
+ def test_remove_images(self, mock_logger_debug):
+ with mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_images', return_value=self.test_list):
+ openstack_clean.remove_images(self.client, self.update_list)
+ mock_logger_debug.assert_any_call("Removing Glance images...")
+ mock_logger_debug.assert_any_call(" > this is a default "
+ "image and will "
+ "NOT be deleted.")
+
+ @mock.patch('functest.utils.openstack_clean.logger.debug')
+ def test_remove_images_missing_images(self, mock_logger_debug):
+ with mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_images', return_value=[]):
+ openstack_clean.remove_images(self.client, self.update_list)
+ mock_logger_debug.assert_any_call("Removing Glance images...")
+ mock_logger_debug.assert_any_call("No images found.")
+
+ @mock.patch('functest.utils.openstack_clean.logger.debug')
+ def test_remove_images_delete_success(self, mock_logger_debug):
+ with mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_images', return_value=self.test_list), \
+ mock.patch('functest.utils.openstack_clean.os_utils'
+ '.delete_glance_image', return_value=True):
+ openstack_clean.remove_images(self.client, self.remove_list)
+ mock_logger_debug.assert_any_call("Removing Glance images...")
+ mock_logger_debug.assert_any_call(" > Done!")
+ mock_logger_debug.assert_any_call(test_utils.
+ RegexMatch("Removing image "
+ "\s*\S+,"
+ " ID=\s*\S+ ..."))
+
+ @mock.patch('functest.utils.openstack_clean.logger.error')
+ @mock.patch('functest.utils.openstack_clean.logger.debug')
+ def test_remove_images_delete_failed(self, mock_logger_debug,
+ mock_logger_error):
+ with mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_images', return_value=self.test_list), \
+ mock.patch('functest.utils.openstack_clean.os_utils'
+ '.delete_glance_image', return_value=False):
+ openstack_clean.remove_images(self.client, self.remove_list)
+ mock_logger_debug.assert_any_call("Removing Glance images...")
+ mock_logger_error.assert_any_call(test_utils.
+ RegexMatch("There has been a "
+ "problem removing the"
+ "image \s*\S+..."))
+ mock_logger_debug.assert_any_call(test_utils.
+ RegexMatch("Removing image "
+ "\s*\S+,"
+ " ID=\s*\S+ ..."))
+
+ @mock.patch('functest.utils.openstack_clean.logger.debug')
+ def test_remove_volumes(self, mock_logger_debug):
+ with mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_volumes', return_value=self.test_list):
+ openstack_clean.remove_volumes(self.client, self.update_list)
+ mock_logger_debug.assert_any_call("Removing Cinder volumes...")
+ mock_logger_debug.assert_any_call(" > this is a default "
+ "volume and will "
+ "NOT be deleted.")
+
+ @mock.patch('functest.utils.openstack_clean.logger.debug')
+ def test_remove_volumes_missing_volumes(self, mock_logger_debug):
+ with mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_volumes', return_value=[]):
+ openstack_clean.remove_volumes(self.client, self.update_list)
+ mock_logger_debug.assert_any_call("Removing Cinder volumes...")
+ mock_logger_debug.assert_any_call("No volumes found.")
+
+ @mock.patch('functest.utils.openstack_clean.logger.debug')
+ def test_remove_volumes_delete_success(self, mock_logger_debug):
+ with mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_volumes', return_value=self.test_list), \
+ mock.patch('functest.utils.openstack_clean.os_utils'
+ '.delete_volume', return_value=True):
+ openstack_clean.remove_volumes(self.client, self.remove_list)
+ mock_logger_debug.assert_any_call("Removing Cinder volumes...")
+ mock_logger_debug.assert_any_call(" > Done!")
+ mock_logger_debug.assert_any_call(test_utils.
+ RegexMatch("Removing cinder "
+ "volume \s*\S+ ..."))
+
+ @mock.patch('functest.utils.openstack_clean.logger.error')
+ @mock.patch('functest.utils.openstack_clean.logger.debug')
+ def test_remove_volumes_delete_failed(self, mock_logger_debug,
+ mock_logger_error):
+ with mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_volumes', return_value=self.test_list), \
+ mock.patch('functest.utils.openstack_clean.os_utils'
+ '.delete_volume', return_value=False):
+ openstack_clean.remove_volumes(self.client, self.remove_list)
+ mock_logger_debug.assert_any_call("Removing Cinder volumes...")
+ mock_logger_error.assert_any_call(test_utils.
+ RegexMatch("There has been a "
+ "problem removing "
+ "the "
+ "volume \s*\S+..."))
+ mock_logger_debug.assert_any_call(test_utils.
+ RegexMatch("Removing cinder "
+ "volume \s*\S+ ..."))
+
+ @mock.patch('functest.utils.openstack_clean.logger.debug')
+ def test_remove_floatingips(self, mock_logger_debug):
+ with mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_floating_ips', return_value=self.test_list):
+ openstack_clean.remove_floatingips(self.client, self.update_list)
+ mock_logger_debug.assert_any_call("Removing floating IPs...")
+ mock_logger_debug.assert_any_call(" > this is a default "
+ "floating IP and will "
+ "NOT be deleted.")
+
+ @mock.patch('functest.utils.openstack_clean.logger.debug')
+ def test_remove_floatingips_missing_floatingips(self, mock_logger_debug):
+ with mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_floating_ips', return_value=[]):
+ openstack_clean.remove_floatingips(self.client, self.update_list)
+ mock_logger_debug.assert_any_call("Removing floating IPs...")
+ mock_logger_debug.assert_any_call("No floating IPs found.")
+
+ @mock.patch('functest.utils.openstack_clean.logger.debug')
+ def test_remove_floatingips_delete_success(self, mock_logger_debug):
+ with mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_floating_ips', return_value=self.test_list), \
+ mock.patch('functest.utils.openstack_clean.os_utils'
+ '.delete_volume', return_value=True):
+ openstack_clean.remove_floatingips(self.client, self.remove_list)
+ mock_logger_debug.assert_any_call("Removing floating IPs...")
+ mock_logger_debug.assert_any_call(" > Done!")
+ mock_logger_debug.assert_any_call(test_utils.
+ RegexMatch("Removing floating "
+ "IP \s*\S+ ..."))
+
+ @mock.patch('functest.utils.openstack_clean.logger.error')
+ @mock.patch('functest.utils.openstack_clean.logger.debug')
+ def test_remove_floatingips_delete_failed(self, mock_logger_debug,
+ mock_logger_error):
+ with mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_floating_ips', return_value=self.test_list), \
+ mock.patch('functest.utils.openstack_clean.os_utils'
+ '.delete_floating_ip', return_value=False):
+ openstack_clean.remove_floatingips(self.client, self.remove_list)
+ mock_logger_debug.assert_any_call("Removing floating IPs...")
+ mock_logger_error.assert_any_call(test_utils.
+ RegexMatch("There has been a "
+ "problem removing "
+ "the floating IP "
+ "\s*\S+..."))
+ mock_logger_debug.assert_any_call(test_utils.
+ RegexMatch("Removing floating "
+ "IP \s*\S+ ..."))
+
+ @mock.patch('functest.utils.openstack_clean.remove_routers')
+ @mock.patch('functest.utils.openstack_clean.remove_ports')
+ @mock.patch('functest.utils.openstack_clean.logger.debug')
+ def test_remove_networks(self, mock_logger_debug,
+ mock_remove_ports,
+ mock_remove_routers):
+ with mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_network_list',
+ return_value=self.test_dict_list), \
+ mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_port_list', return_value=self.ports), \
+ mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_router_list', return_value=self.routers):
+ openstack_clean.remove_networks(self.client, self.update_list,
+ self.update_list)
+ mock_logger_debug.assert_any_call("Removing Neutron objects")
+ mock_logger_debug.assert_any_call(" > this is a default "
+ "network and will "
+ "NOT be deleted.")
+ mock_remove_ports.assert_called_once_with(self.client, self.ports,
+ [])
+ mock_remove_routers.assert_called_once_with(self.client,
+ self.routers,
+ self.update_list)
+
+ @mock.patch('functest.utils.openstack_clean.remove_routers')
+ @mock.patch('functest.utils.openstack_clean.remove_ports')
+ @mock.patch('functest.utils.openstack_clean.logger.debug')
+ def test_remove_networks_missing_networks(self, mock_logger_debug,
+ mock_remove_ports,
+ mock_remove_routers):
+ with mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_network_list', return_value=None), \
+ mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_port_list', return_value=self.ports), \
+ mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_router_list', return_value=self.routers):
+ openstack_clean.remove_networks(self.client, self.update_list,
+ self.update_list)
+ mock_logger_debug.assert_any_call("Removing Neutron objects")
+ mock_logger_debug.assert_any_call("There are no networks in the"
+ " deployment. ")
+ mock_remove_ports.assert_called_once_with(self.client, self.ports,
+ [])
+ mock_remove_routers.assert_called_once_with(self.client,
+ self.routers,
+ self.update_list)
+
+ @mock.patch('functest.utils.openstack_clean.remove_routers')
+ @mock.patch('functest.utils.openstack_clean.remove_ports')
+ @mock.patch('functest.utils.openstack_clean.logger.debug')
+ def test_remove_networks_delete_success(self, mock_logger_debug,
+ mock_remove_ports,
+ mock_remove_routers):
+
+ with mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_network_list',
+ return_value=self.test_dict_list), \
+ mock.patch('functest.utils.openstack_clean.os_utils'
+ '.delete_neutron_net', return_value=True), \
+ mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_port_list', return_value=self.ports), \
+ mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_router_list', return_value=self.routers):
+ openstack_clean.remove_networks(self.client, self.remove_list,
+ self.remove_list)
+ mock_logger_debug.assert_any_call("Removing Neutron objects")
+ mock_logger_debug.assert_any_call(" > this network will be "
+ "deleted.")
+ mock_logger_debug.assert_any_call(" > Done!")
+ mock_logger_debug.assert_any_call(test_utils.
+ RegexMatch("Removing network "
+ "\s*\S+ ..."))
+ mock_remove_ports.assert_called_once_with(self.client, self.ports,
+ ['id1', 'id2'])
+ mock_remove_routers.assert_called_once_with(self.client,
+ self.routers,
+ self.remove_list)
+
+ @mock.patch('functest.utils.openstack_clean.remove_routers')
+ @mock.patch('functest.utils.openstack_clean.remove_ports')
+ @mock.patch('functest.utils.openstack_clean.logger.error')
+ @mock.patch('functest.utils.openstack_clean.logger.debug')
+ def test_remove_networks_delete_failed(self, mock_logger_debug,
+ mock_logger_error,
+ mock_remove_ports,
+ mock_remove_routers):
+ with mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_network_list',
+ return_value=self.test_dict_list), \
+ mock.patch('functest.utils.openstack_clean.os_utils'
+ '.delete_neutron_net', return_value=False), \
+ mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_port_list', return_value=self.ports), \
+ mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_router_list', return_value=self.routers):
+ openstack_clean.remove_networks(self.client, self.remove_list,
+ self.remove_list)
+ mock_logger_debug.assert_any_call("Removing Neutron objects")
+ mock_logger_error.assert_any_call(test_utils.
+ RegexMatch("There has been a"
+ " problem removing"
+ " the network \s*\S+"
+ "..."))
+ mock_logger_debug.assert_any_call(test_utils.
+ RegexMatch("Removing network "
+ "\s*\S+ ..."))
+ mock_remove_ports.assert_called_once_with(self.client, self.ports,
+ ['id1', 'id2'])
+ mock_remove_routers.assert_called_once_with(self.client,
+ self.routers,
+ self.remove_list)
+
+ # TODO: ports
+ @mock.patch('functest.utils.openstack_clean.os_utils.update_neutron_port')
+ @mock.patch('functest.utils.openstack_clean.logger.error')
+ @mock.patch('functest.utils.openstack_clean.logger.debug')
+ def test_force_remove_port(self, mock_logger_debug,
+ mock_logger_error,
+ mock_update_neutron_port):
+ with mock.patch('functest.utils.openstack_clean.os_utils'
+ '.delete_neutron_port',
+ return_value=True):
+ openstack_clean.force_remove_port(self.client, 'id')
+ mock_logger_debug.assert_any_call(" > Done!")
+ mock_logger_debug.assert_any_call(test_utils.
+ RegexMatch("Clearing device_"
+ "owner for port "
+ "\s*\S+ ..."))
+
+ @mock.patch('functest.utils.openstack_clean.os_utils.update_neutron_port')
+ @mock.patch('functest.utils.openstack_clean.logger.error')
+ @mock.patch('functest.utils.openstack_clean.logger.debug')
+ def test_force_remove_port_failed(self, mock_logger_debug,
+ mock_logger_error,
+ mock_update_neutron_port):
+ with mock.patch('functest.utils.openstack_clean.os_utils'
+ '.delete_neutron_port',
+ return_value=False):
+ openstack_clean.force_remove_port(self.client, 'id')
+ mock_logger_error.assert_any_call("There has been a "
+ "problem removing "
+ "the port id...")
+ mock_logger_debug.assert_any_call(test_utils.
+ RegexMatch("Clearing device_"
+ "owner for port "
+ "\s*\S+ ..."))
+
+ @mock.patch('functest.utils.openstack_clean.logger.debug')
+ def test_remove_routers_missing_routers(self, mock_logger_debug):
+ with mock.patch('functest.utils.openstack_clean.os_utils'
+ '.delete_neutron_router',
+ return_value=True):
+ openstack_clean.remove_routers(self.client, self.test_dict_list,
+ self.remove_list)
+ mock_logger_debug.assert_any_call("Router is not connected"
+ " to anything."
+ "Ready to remove...")
+ mock_logger_debug.assert_any_call(" > Done!")
+ mock_logger_debug.assert_any_call(test_utils.
+ RegexMatch("Removing router "
+ "\s*\S+(\s*\S+) ..."))
+
+ @mock.patch('functest.utils.openstack_clean.logger.error')
+ @mock.patch('functest.utils.openstack_clean.logger.debug')
+ def test_remove_routers_failed(self, mock_logger_debug,
+ mock_logger_error):
+ with mock.patch('functest.utils.openstack_clean.os_utils'
+ '.delete_neutron_router',
+ return_value=False):
+ openstack_clean.remove_routers(self.client, self.test_dict_list,
+ self.remove_list)
+ mock_logger_debug.assert_any_call("Router is not connected"
+ " to anything."
+ "Ready to remove...")
+ mock_logger_debug.assert_any_call(test_utils.
+ RegexMatch("Removing router "
+ "\s*\S+(\s*\S+) ..."))
+ mock_logger_error.assert_any_call(test_utils.
+ RegexMatch("There has been "
+ "a problem"
+ " removing the "
+ "router \s*\S+("
+ "\s*\S+)..."))
+
+ @mock.patch('functest.utils.openstack_clean.logger.error')
+ @mock.patch('functest.utils.openstack_clean.logger.debug')
+ def test_remove_missing_external_gateway(self, mock_logger_debug,
+ mock_logger_error):
+ with mock.patch('functest.utils.openstack_clean.os_utils'
+ '.delete_neutron_router',
+ return_value=False), \
+ mock.patch('functest.utils.openstack_clean.os_utils'
+ '.remove_gateway_router',
+ return_value=False):
+ self.test_dict_list[0]['external_gateway_info'] = mock.Mock()
+ openstack_clean.remove_routers(self.client, self.test_dict_list,
+ self.remove_list)
+ mock_logger_debug.assert_any_call("Router has gateway to external"
+ " network.Removing link...")
+ mock_logger_error.assert_any_call("There has been a problem "
+ "removing the gateway...")
+ mock_logger_debug.assert_any_call(test_utils.
+ RegexMatch("Removing router "
+ "\s*\S+(\s*\S+) ..."))
+ mock_logger_error.assert_any_call(test_utils.
+ RegexMatch("There has been "
+ "a problem"
+ " removing the "
+ "router \s*\S+("
+ "\s*\S+)..."))
+
+ @mock.patch('functest.utils.openstack_clean.logger.debug')
+ def remove_security_groups(self, mock_logger_debug):
+ with mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_security_groups',
+ return_value=self.test_dict_list):
+ openstack_clean.remove_security_groups(self.client,
+ self.update_list)
+ mock_logger_debug.assert_any_call("Removing Security groups...")
+ mock_logger_debug.assert_any_call(" > this is a default "
+ "security group and will NOT "
+ "be deleted.")
+
+ @mock.patch('functest.utils.openstack_clean.logger.debug')
+ def test_remove_security_groups_missing_sec_group(self, mock_logger_debug):
+ with mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_security_groups', return_value=[]):
+ openstack_clean.remove_security_groups(self.client,
+ self.update_list)
+ mock_logger_debug.assert_any_call("Removing Security groups...")
+ mock_logger_debug.assert_any_call("No security groups found.")
+
+ @mock.patch('functest.utils.openstack_clean.logger.debug')
+ def test_remove_security_groups_delete_success(self, mock_logger_debug):
+ with mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_security_groups',
+ return_value=self.test_dict_list), \
+ mock.patch('functest.utils.openstack_clean.os_utils'
+ '.delete_security_group', return_value=True):
+ openstack_clean.remove_security_groups(self.client,
+ self.remove_list)
+ mock_logger_debug.assert_any_call("Removing Security groups...")
+ mock_logger_debug.assert_any_call(" > Done!")
+ mock_logger_debug.assert_any_call(test_utils.
+ RegexMatch(" Removing \s*\S+"
+ "..."))
+
+ @mock.patch('functest.utils.openstack_clean.logger.error')
+ @mock.patch('functest.utils.openstack_clean.logger.debug')
+ def test_remove_security_groups_delete_failed(self, mock_logger_debug,
+ mock_logger_error):
+ with mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_security_groups',
+ return_value=self.test_dict_list), \
+ mock.patch('functest.utils.openstack_clean.os_utils'
+ '.delete_security_group', return_value=False):
+ openstack_clean.remove_security_groups(self.client,
+ self.remove_list)
+ mock_logger_debug.assert_any_call("Removing Security groups...")
+ mock_logger_error.assert_any_call(test_utils.
+ RegexMatch("There has been a "
+ "problem removing "
+ "the security group"
+ " \s*\S+..."))
+ mock_logger_debug.assert_any_call(test_utils.
+ RegexMatch(" Removing \s*\S+"
+ "..."))
+
+ @mock.patch('functest.utils.openstack_clean.logger.debug')
+ def test_remove_users(self, mock_logger_debug):
+ with mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_users', return_value=self.test_list):
+ openstack_clean.remove_users(self.client, self.update_list)
+ mock_logger_debug.assert_any_call("Removing Users...")
+ mock_logger_debug.assert_any_call(" > this is a default "
+ "user and will "
+ "NOT be deleted.")
+
+ @mock.patch('functest.utils.openstack_clean.logger.debug')
+ def test_remove_users_missing_users(self, mock_logger_debug):
+ with mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_users', return_value=None):
+ openstack_clean.remove_users(self.client, self.update_list)
+ mock_logger_debug.assert_any_call("Removing Users...")
+ mock_logger_debug.assert_any_call("There are no users in"
+ " the deployment. ")
+
+ @mock.patch('functest.utils.openstack_clean.logger.debug')
+ def test_remove_users_delete_success(self, mock_logger_debug):
+ with mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_users', return_value=self.test_list), \
+ mock.patch('functest.utils.openstack_clean.os_utils'
+ '.delete_user', return_value=True):
+ openstack_clean.remove_users(self.client, self.remove_list)
+ mock_logger_debug.assert_any_call("Removing Users...")
+ mock_logger_debug.assert_any_call(" > Done!")
+ mock_logger_debug.assert_any_call(test_utils.
+ RegexMatch(" Removing "
+ "\s*\S+..."))
+
+ @mock.patch('functest.utils.openstack_clean.logger.error')
+ @mock.patch('functest.utils.openstack_clean.logger.debug')
+ def test_remove_users_delete_failed(self, mock_logger_debug,
+ mock_logger_error):
+ with mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_users', return_value=self.test_list), \
+ mock.patch('functest.utils.openstack_clean.os_utils'
+ '.delete_user', return_value=False):
+ openstack_clean.remove_users(self.client, self.remove_list)
+ mock_logger_debug.assert_any_call("Removing Users...")
+ mock_logger_error.assert_any_call(test_utils.
+ RegexMatch("There has been a "
+ "problem removing "
+ "the user \s*\S+"
+ "..."))
+ mock_logger_debug.assert_any_call(test_utils.
+ RegexMatch(" Removing "
+ "\s*\S+..."))
+
+ @mock.patch('functest.utils.openstack_clean.logger.debug')
+ def test_remove_tenants(self, mock_logger_debug):
+ with mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_tenants', return_value=self.test_list):
+ openstack_clean.remove_tenants(self.client, self.update_list)
+ mock_logger_debug.assert_any_call("Removing Tenants...")
+ mock_logger_debug.assert_any_call(" > this is a default"
+ " tenant and will "
+ "NOT be deleted.")
+
+ @mock.patch('functest.utils.openstack_clean.logger.debug')
+ def test_remove_tenants_missing_tenants(self, mock_logger_debug):
+ with mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_tenants', return_value=None):
+ openstack_clean.remove_tenants(self.client, self.update_list)
+ mock_logger_debug.assert_any_call("Removing Tenants...")
+ mock_logger_debug.assert_any_call("There are no tenants in"
+ " the deployment. ")
+
+ @mock.patch('functest.utils.openstack_clean.logger.debug')
+ def test_remove_tenants_delete_success(self, mock_logger_debug):
+ with mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_tenants', return_value=self.test_list), \
+ mock.patch('functest.utils.openstack_clean.os_utils'
+ '.delete_tenant', return_value=True):
+ openstack_clean.remove_tenants(self.client, self.remove_list)
+ mock_logger_debug.assert_any_call("Removing Tenants...")
+ mock_logger_debug.assert_any_call(" > Done!")
+ mock_logger_debug.assert_any_call(test_utils.
+ RegexMatch(" Removing "
+ "\s*\S+..."))
+
+ @mock.patch('functest.utils.openstack_clean.logger.error')
+ @mock.patch('functest.utils.openstack_clean.logger.debug')
+ def test_remove_tenants_delete_failed(self, mock_logger_debug,
+ mock_logger_error):
+ with mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_tenants', return_value=self.test_list), \
+ mock.patch('functest.utils.openstack_clean.os_utils'
+ '.delete_tenant', return_value=False):
+ openstack_clean.remove_tenants(self.client, self.remove_list)
+ mock_logger_debug.assert_any_call("Removing Tenants...")
+ mock_logger_error.assert_any_call(test_utils.
+ RegexMatch("There has been a "
+ "problem removing "
+ "the tenant \s*\S+"
+ "..."))
+ mock_logger_debug.assert_any_call(test_utils.
+ RegexMatch(" Removing "
+ "\s*\S+..."))
+
+ @mock.patch('functest.utils.openstack_clean.os_utils.get_cinder_client')
+ @mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_keystone_client')
+ @mock.patch('functest.utils.openstack_clean.os_utils'
+ '.get_neutron_client')
+ @mock.patch('functest.utils.openstack_clean.os_utils.get_nova_client')
+ @mock.patch('functest.utils.openstack_clean.os_utils.check_credentials',
+ return_value=True)
+ @mock.patch('functest.utils.openstack_clean.logger.info')
+ @mock.patch('functest.utils.openstack_clean.logger.debug')
+ def test_main_default(self, mock_logger_debug, mock_logger_info,
+ mock_creds, mock_nova, mock_neutron,
+ mock_keystone, mock_cinder):
+
+ with mock.patch('functest.utils.openstack_clean.remove_instances') \
+ as mock_remove_instances, \
+ mock.patch('functest.utils.openstack_clean.remove_images') \
+ as mock_remove_images, \
+ mock.patch('functest.utils.openstack_clean.remove_volumes') \
+ as mock_remove_volumes, \
+ mock.patch('functest.utils.openstack_clean.remove_floatingips') \
+ as mock_remove_floatingips, \
+ mock.patch('functest.utils.openstack_clean.remove_networks') \
+ as mock_remove_networks, \
+ mock.patch('functest.utils.openstack_clean.'
+ 'remove_security_groups') \
+ as mock_remove_security_groups, \
+ mock.patch('functest.utils.openstack_clean.remove_users') \
+ as mock_remove_users, \
+ mock.patch('functest.utils.openstack_clean.remove_tenants') \
+ as mock_remove_tenants, \
+ mock.patch('functest.utils.openstack_clean.yaml.safe_load',
+ return_value=mock.Mock()), \
+ mock.patch('__builtin__.open', mock.mock_open()) as m:
+ openstack_clean.main()
+ self.assertTrue(mock_remove_instances)
+ self.assertTrue(mock_remove_images)
+ self.assertTrue(mock_remove_volumes)
+ self.assertTrue(mock_remove_floatingips)
+ self.assertTrue(mock_remove_networks)
+ self.assertTrue(mock_remove_security_groups)
+ self.assertTrue(mock_remove_users)
+ self.assertTrue(mock_remove_tenants)
+ m.assert_called_once_with(openstack_clean.OS_SNAPSHOT_FILE)
+ mock_logger_info.assert_called_once_with("Cleaning OpenStack "
+ "resources...")
+
+
+if __name__ == "__main__":
+ unittest.main(verbosity=2)