summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test-requirements.txt1
-rw-r--r--trove/common/strategies/cluster/experimental/galera_common/api.py2
-rw-r--r--trove/tests/unittests/cluster/test_galera_cluster.py34
3 files changed, 36 insertions, 1 deletions
diff --git a/test-requirements.txt b/test-requirements.txt
index 87fb7fbe..db7b528b 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 034b46ad..edaf9a38 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 75b0d934..aea712d8 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])