diff --git a/test-requirements.txt b/test-requirements.txt index 865e6fa9a3..419d91cb83 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -25,7 +25,6 @@ pymongo!=3.1,>=3.0.2 # Apache-2.0 redis>=2.10.0 # MIT psycopg2>=2.5 # LGPL/ZPL cassandra-driver!=3.6.0,>=2.1.4 # Apache-2.0 -pycrypto>=2.6 # Public Domain couchdb>=0.8 # Apache-2.0 os-testr>=0.8.0 # Apache-2.0 astroid<1.4.0 # LGPLv2.1 # breaks pylint 1.4.4 diff --git a/trove/common/strategies/cluster/experimental/galera_common/api.py b/trove/common/strategies/cluster/experimental/galera_common/api.py index 034b46ad83..edaf9a3861 100644 --- a/trove/common/strategies/cluster/experimental/galera_common/api.py +++ b/trove/common/strategies/cluster/experimental/galera_common/api.py @@ -168,6 +168,7 @@ class GaleraCommonCluster(cluster_models.Cluster): db_info.id, [instance.id for instance in new_instances]) except Exception: db_info.update(task_status=ClusterTasks.NONE) + raise return self.__class__(context, db_info, datastore, datastore_version) @@ -191,6 +192,7 @@ class GaleraCommonCluster(cluster_models.Cluster): for instance in removal_instances]) except Exception: self.db_info.update(task_status=ClusterTasks.NONE) + raise return self.__class__(self.context, self.db_info, self.ds, self.ds_version) diff --git a/trove/tests/unittests/cluster/test_galera_cluster.py b/trove/tests/unittests/cluster/test_galera_cluster.py index 75b0d934fe..aea712d827 100644 --- a/trove/tests/unittests/cluster/test_galera_cluster.py +++ b/trove/tests/unittests/cluster/test_galera_cluster.py @@ -25,6 +25,8 @@ from trove.common import exception from trove.common import remote from trove.common.strategies.cluster.experimental.galera_common import ( api as galera_api) +from trove.common.strategies.cluster.experimental.galera_common import ( + taskmanager as galera_task) from trove.instance import models as inst_models from trove.quota.quota import QUOTAS from trove.taskmanager import api as task_api @@ -327,6 +329,20 @@ class ClusterTest(trove_testtools.TestCase): [mock_inst_create.return_value.id] * 3) self.assertEqual(3, mock_inst_create.call_count) + @patch.object(DBCluster, 'update') + @patch.object(galera_api, 'CONF') + @patch.object(inst_models.Instance, 'create') + @patch.object(QUOTAS, 'check_quotas') + @patch.object(remote, 'create_nova_client') + def test_grow_exception(self, mock_client, mock_check_quotas, + mock_inst_create, mock_conf, mock_update): + mock_client.return_value.flavors = Mock() + with patch.object(task_api, 'load') as mock_load: + mock_load.return_value.grow_cluster = Mock( + side_effect=exception.BadRequest) + self.assertRaises(exception.BadRequest, self.cluster.grow, + self.instances) + @patch.object(inst_models.DBInstance, 'find_all') @patch.object(inst_models.Instance, 'load') @patch.object(Cluster, 'validate_cluster_available') @@ -356,3 +372,21 @@ class ClusterTest(trove_testtools.TestCase): self.db_info.id, [mock_load.return_value.id]) mock_init.assert_called_with(self.context, self.db_info, self.datastore, self.datastore_version) + + @patch.object(galera_task.GaleraCommonClusterTasks, 'shrink_cluster') + @patch.object(galera_api.GaleraCommonCluster, '__init__') + @patch.object(DBCluster, 'update') + @patch.object(inst_models.DBInstance, 'find_all') + @patch.object(inst_models.Instance, 'load') + @patch.object(Cluster, 'validate_cluster_available') + def test_shrink_exception(self, mock_validate, mock_load, mock_find_all, + mock_update, mock_init, mock_shrink): + mock_init.return_value = None + existing_instances = [Mock(), Mock()] + mock_find_all.return_value.all.return_value = existing_instances + instance = Mock() + with patch.object(task_api, 'load') as mock_load: + mock_load.return_value.shrink_cluster = Mock( + side_effect=exception.BadRequest) + self.assertRaises(exception.BadRequest, self.cluster.shrink, + [instance])