summaryrefslogtreecommitdiff
path: root/troveclient/tests/test_backups.py
diff options
context:
space:
mode:
authorMorgan Jones <morgan@parelastic.com>2016-06-13 15:26:08 -0400
committerMorgan Jones <morgan@parelastic.com>2016-08-25 16:57:54 -0400
commit599171ade4475709ddd8544e7dfd7ee4ba4ba2a2 (patch)
tree69c1b3f3f50d99a5a34870c316075db44978ee94 /troveclient/tests/test_backups.py
parentf5616b7d5251200df753d7aff60185587ed1aada (diff)
downloadpython-troveclient-2.5.0.tar.gz
Implement scheduled backups2.5.0
Implements Trove client APIs to implement scheduled backups via Mistral workflow. Change-Id: I012eb88359e063adbb86979a8fbd2e2a1e83f816 Implements: blueprint scheduled-backups
Diffstat (limited to 'troveclient/tests/test_backups.py')
-rw-r--r--troveclient/tests/test_backups.py123
1 files changed, 123 insertions, 0 deletions
diff --git a/troveclient/tests/test_backups.py b/troveclient/tests/test_backups.py
index 85fb043..d3c44ec 100644
--- a/troveclient/tests/test_backups.py
+++ b/troveclient/tests/test_backups.py
@@ -14,6 +14,7 @@
# under the License.
import mock
+from mock import patch
import testtools
import uuid
@@ -147,3 +148,125 @@ class BackupManagerTest(testtools.TestCase):
resp.status_code = 422
self.backups.api.client.delete = mock.Mock(return_value=(resp, None))
self.assertRaises(Exception, self.backups.delete, 'backup1')
+
+ @patch('troveclient.v1.backups.mistral_client')
+ def test_auth_mistral_client(self, mistral_client):
+ with patch.object(self.backups.api.client, 'auth') as auth:
+ self.backups._get_mistral_client()
+ mistral_client.assert_called_with(
+ auth_url=auth.auth_url, username=auth._username,
+ api_key=auth._password,
+ project_name=auth._project_name)
+
+ def test_build_schedule(self):
+ cron_trigger = mock.Mock()
+ wf_input = {'name': 'foo', 'instance': 'myinst', 'parent_id': None}
+ sched = self.backups._build_schedule(cron_trigger, wf_input)
+ self.assertEqual(cron_trigger.name, sched.id)
+ self.assertEqual(wf_input['name'], sched.name)
+ self.assertEqual(wf_input['instance'], sched.instance)
+ self.assertEqual(cron_trigger.workflow_input, sched.input)
+
+ def test_schedule_create(self):
+ instance = mock.Mock()
+ pattern = mock.Mock()
+ name = 'myback'
+
+ def make_cron_trigger(name, wf, workflow_input=None, pattern=None):
+ return mock.Mock(name=name, pattern=pattern,
+ workflow_input=workflow_input)
+ cron_triggers = mock.Mock()
+ cron_triggers.create = mock.Mock(side_effect=make_cron_trigger)
+ mistral_client = mock.Mock(cron_triggers=cron_triggers)
+
+ sched = self.backups.schedule_create(instance, pattern, name,
+ mistral_client=mistral_client)
+ self.assertEqual(pattern, sched.pattern)
+ self.assertEqual(name, sched.name)
+ self.assertEqual(instance.id, sched.instance)
+
+ def test_schedule_list(self):
+ instance = mock.Mock(id='the_uuid')
+ backup_name = "wf2"
+
+ test_input = [('wf1', 'foo'), (backup_name, instance.id)]
+ cron_triggers = mock.Mock()
+ cron_triggers.list = mock.Mock(
+ return_value=[
+ mock.Mock(workflow_input='{"name": "%s", "instance": "%s"}'
+ % (name, inst), name=name)
+ for name, inst in test_input
+ ])
+ mistral_client = mock.Mock(cron_triggers=cron_triggers)
+
+ sched_list = self.backups.schedule_list(instance, mistral_client)
+ self.assertEqual(1, len(sched_list))
+ the_sched = sched_list.pop()
+ self.assertEqual(backup_name, the_sched.name)
+ self.assertEqual(instance.id, the_sched.instance)
+
+ def test_schedule_show(self):
+ instance = mock.Mock(id='the_uuid')
+ backup_name = "myback"
+
+ cron_triggers = mock.Mock()
+ cron_triggers.get = mock.Mock(
+ return_value=mock.Mock(
+ name=backup_name,
+ workflow_input='{"name": "%s", "instance": "%s"}'
+ % (backup_name, instance.id)))
+ mistral_client = mock.Mock(cron_triggers=cron_triggers)
+
+ sched = self.backups.schedule_show("dummy", mistral_client)
+ self.assertEqual(backup_name, sched.name)
+ self.assertEqual(instance.id, sched.instance)
+
+ def test_schedule_delete(self):
+ cron_triggers = mock.Mock()
+ cron_triggers.delete = mock.Mock()
+ mistral_client = mock.Mock(cron_triggers=cron_triggers)
+ self.backups.schedule_delete("dummy", mistral_client)
+ cron_triggers.delete.assert_called()
+
+ def test_execution_list(self):
+ instance = mock.Mock(id='the_uuid')
+ wf_input = '{"name": "wf2", "instance": "%s"}' % instance.id
+ wf_name = self.backups.backup_create_workflow
+
+ execution_list_result = [
+ [mock.Mock(id=1, input=wf_input, workflow_name=wf_name,
+ to_dict=mock.Mock(return_value={'id': 1})),
+ mock.Mock(id=2, input="{}", workflow_name=wf_name)],
+ [mock.Mock(id=3, input=wf_input, workflow_name=wf_name,
+ to_dict=mock.Mock(return_value={'id': 3})),
+ mock.Mock(id=4, input="{}", workflow_name=wf_name)],
+ [mock.Mock(id=5, input=wf_input, workflow_name=wf_name,
+ to_dict=mock.Mock(return_value={'id': 5})),
+ mock.Mock(id=6, input="{}", workflow_name=wf_name)],
+ [mock.Mock(id=7, input=wf_input, workflow_name="bar"),
+ mock.Mock(id=8, input="{}", workflow_name=wf_name)]
+ ]
+
+ cron_triggers = mock.Mock()
+ cron_triggers.get = mock.Mock(
+ return_value=mock.Mock(workflow_name=wf_name,
+ workflow_input=wf_input))
+
+ mistral_executions = mock.Mock()
+ mistral_executions.list = mock.Mock(side_effect=execution_list_result)
+ mistral_client = mock.Mock(cron_triggers=cron_triggers,
+ executions=mistral_executions)
+
+ el = self.backups.execution_list("dummy", mistral_client, limit=2)
+ self.assertEqual(2, len(el))
+ el = self.backups.execution_list("dummy", mistral_client, limit=2)
+ self.assertEqual(1, len(el))
+ the_exec = el.pop()
+ self.assertEqual(5, the_exec.id)
+
+ def test_execution_delete(self):
+ mistral_executions = mock.Mock()
+ mistral_executions.delete = mock.Mock()
+ mistral_client = mock.Mock(executions=mistral_executions)
+ self.backups.execution_delete("dummy", mistral_client)
+ mistral_executions.delete.assert_called()