summaryrefslogtreecommitdiff
path: root/troveclient/tests/test_databases.py
diff options
context:
space:
mode:
authorDoug Shelley <doug@parelastic.com>2014-12-04 12:27:57 -0500
committerDoug Shelley <doug@parelastic.com>2014-12-08 14:29:06 -0500
commitdf3afb2abc0d3e7efb1057884e84d8f9a8813881 (patch)
tree403bb07580b5fc5a2e7ef19c3760618a80e9748b /troveclient/tests/test_databases.py
parent4d67c84df6447232266573707a1a413fb4a676c0 (diff)
downloadpython-troveclient-df3afb2abc0d3e7efb1057884e84d8f9a8813881.tar.gz
Add instance name as parameter to CLI
Allow CLI to take instance name as well as instance id for sub-commands where instance can be specified. This commit does not include the metadata-* commands as the backend for that feature isn't merged. The spec will be adjusted to reflect that they commands will be out of scope. Affected sub-commands are: backup-create backup-list-instance configuration-attach configuration-default configuration-detach create (just for --replica_of) database-create database-delete database-list detach-replica delete resize-flavor resize-instance resize-volume restart root-enable root-show update user-create user-delete user-grant-access user-list user-revoke-access user-show user-show-access user-update-attributes Unit tests were added to test passing in an instance object for the affected sub-commands. A new set of unit tests were added for databases.py (doesn't look like any existed before). Change-Id: I5554a7d423990ff9cb24437a893d90d212b022b1 blueprint: add-instance-name-to-cli
Diffstat (limited to 'troveclient/tests/test_databases.py')
-rw-r--r--troveclient/tests/test_databases.py108
1 files changed, 108 insertions, 0 deletions
diff --git a/troveclient/tests/test_databases.py b/troveclient/tests/test_databases.py
new file mode 100644
index 0000000..51fdd6e
--- /dev/null
+++ b/troveclient/tests/test_databases.py
@@ -0,0 +1,108 @@
+# Copyright 2014 Tesora Inc.
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+import mock
+import testtools
+
+from troveclient.v1 import databases
+
+"""
+Unit tests for databases.py
+"""
+
+
+class DatabaseTest(testtools.TestCase):
+ def setUp(self):
+ super(DatabaseTest, self).setUp()
+ self.orig__init = databases.Database.__init__
+ databases.Database.__init__ = mock.Mock(return_value=None)
+ self.database = databases.Database()
+
+ def tearDown(self):
+ super(DatabaseTest, self).tearDown()
+ databases.Database.__init__ = self.orig__init
+
+
+class DatabasesTest(testtools.TestCase):
+ def setUp(self):
+ super(DatabasesTest, self).setUp()
+ self.orig__init = databases.Databases.__init__
+ databases.Databases.__init__ = mock.Mock(return_value=None)
+ self.databases = databases.Databases()
+ self.databases.api = mock.Mock()
+ self.databases.api.client = mock.Mock()
+
+ self.instance_with_id = mock.Mock()
+ self.instance_with_id.id = 215
+
+ self.fakedb1 = ['db1']
+ self.fakedb2 = ['db1', 'db2']
+
+ def tearDown(self):
+ super(DatabasesTest, self).tearDown()
+ databases.Databases.__init__ = self.orig__init
+
+ def _get_mock_method(self):
+ self._resp = mock.Mock()
+ self._body = None
+ self._url = None
+
+ def side_effect_func(url, body=None):
+ self._body = body
+ self._url = url
+ return (self._resp, body)
+
+ return mock.Mock(side_effect=side_effect_func)
+
+ def test_create(self):
+ self.databases.api.client.post = self._get_mock_method()
+ self._resp.status_code = 200
+
+ self.databases.create(23, self.fakedb1)
+ self.assertEqual('/instances/23/databases', self._url)
+ self.assertEqual({"databases": self.fakedb1}, self._body)
+
+ self.databases.create(23, self.fakedb2)
+ self.assertEqual('/instances/23/databases', self._url)
+ self.assertEqual({"databases": self.fakedb2}, self._body)
+
+ # test creation with the instance as an object
+ self.databases.create(self.instance_with_id, self.fakedb1)
+ self.assertEqual({"databases": self.fakedb1}, self._body)
+
+ def test_delete(self):
+ self.databases.api.client.delete = self._get_mock_method()
+ self._resp.status_code = 200
+ self.databases.delete(27, self.fakedb1[0])
+ self.assertEqual('/instances/27/databases/%s' % self.fakedb1[0],
+ self._url)
+ self.databases.delete(self.instance_with_id, self.fakedb1[0])
+ self.assertEqual('/instances/%s/databases/%s' %
+ (self.instance_with_id.id, self.fakedb1[0]),
+ self._url)
+ self._resp.status_code = 400
+ self.assertRaises(Exception, self.databases.delete, 34, self.fakedb1)
+
+ def test_list(self):
+ page_mock = mock.Mock()
+ self.databases._paginated = page_mock
+ self.databases.list('instance1')
+ page_mock.assert_called_with('/instances/instance1/databases',
+ 'databases', None, None)
+ limit = 'test-limit'
+ marker = 'test-marker'
+ self.databases.list('instance1', limit, marker)
+ page_mock.assert_called_with('/instances/instance1/databases',
+ 'databases', limit, marker)