diff options
| author | Doug Shelley <doug@parelastic.com> | 2014-12-04 12:27:57 -0500 |
|---|---|---|
| committer | Doug Shelley <doug@parelastic.com> | 2014-12-08 14:29:06 -0500 |
| commit | df3afb2abc0d3e7efb1057884e84d8f9a8813881 (patch) | |
| tree | 403bb07580b5fc5a2e7ef19c3760618a80e9748b /troveclient/tests/test_databases.py | |
| parent | 4d67c84df6447232266573707a1a413fb4a676c0 (diff) | |
| download | python-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.py | 108 |
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) |
