diff --git a/docs/source/conf.py b/docs/source/conf.py index 6fbb2073..3647e094 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -1,3 +1,21 @@ +# Copyright 2011 OpenStack Foundation +# Copyright 2013 Rackspace Hosting +# Copyright 2013 Hewlett-Packard Development Company, L.P. +# Copyright 2013 Mirantis 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. +# # -*- coding: utf-8 -*- extensions = [ diff --git a/tox.ini b/tox.ini index 79475253..5e094584 100644 --- a/tox.ini +++ b/tox.ini @@ -36,6 +36,7 @@ commands = python setup.py testr --coverage --testr-args='{posargs}' sphinx-build -b html {toxinidir}/docs/source {envtmpdir}/html [flake8] -ignore = E125,F403,F811,F821,F841,H102,H103,H201,H202,H23,H301,H306,H401,H402,H403,H404,H702,H703 + +ignore = F401,F403,F821,H202,H306,H401,H402,H403,H404 show-source = True -exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,build +exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,build, diff --git a/troveclient/client.py b/troveclient/client.py index 72536fba..95dbfbf5 100644 --- a/troveclient/client.py +++ b/troveclient/client.py @@ -36,9 +36,9 @@ except ImportError: import urllib.parse as urlparse try: - from eventlet import sleep + import eventlet as sleep_lib except ImportError: - from time import sleep + import time as sleep_lib try: import json @@ -201,7 +201,7 @@ class HTTPClient(object): self._logger.debug( "Failed attempt(%s of %s), retrying in %s seconds" % (attempts, self.retries, backoff)) - sleep(backoff) + sleep_lib.sleep(backoff) backoff *= 2 def get(self, url, **kwargs): diff --git a/troveclient/compat/auth.py b/troveclient/compat/auth.py index ed9ddd9f..f7e0ea9c 100644 --- a/troveclient/compat/auth.py +++ b/troveclient/compat/auth.py @@ -13,7 +13,7 @@ # under the License. from __future__ import print_function -from six import string_types +import six from troveclient.compat import exceptions @@ -21,7 +21,7 @@ def get_authenticator_cls(cls_or_name): """Factory method to retrieve Authenticator class.""" if isinstance(cls_or_name, type): return cls_or_name - elif isinstance(cls_or_name, string_types): + elif isinstance(cls_or_name, six.string_types): if cls_or_name == "keystone": return KeyStoneV2Authenticator elif cls_or_name == "rax": diff --git a/troveclient/compat/cli.py b/troveclient/compat/cli.py index 85489c18..fcb1c6a3 100644 --- a/troveclient/compat/cli.py +++ b/troveclient/compat/cli.py @@ -64,7 +64,7 @@ class InstanceCommands(common.AuthedCommandsBase): def delete(self): """Delete the specified instance""" self._require('id') - print self.dbaas.instances.delete(self.id) + print(self.dbaas.instances.delete(self.id)) def get(self): """Get details for the specified instance""" @@ -126,12 +126,12 @@ class DatabaseCommands(common.AuthedCommandsBase): """Create a database""" self._require('id', 'name') databases = [{'name': self.name}] - print self.dbaas.databases.create(self.id, databases) + print(self.dbaas.databases.create(self.id, databases)) def delete(self): """Delete a database""" self._require('id', 'name') - print self.dbaas.databases.delete(self.id, self.name) + print(self.dbaas.databases.delete(self.id, self.name)) def list(self): """List the databases""" @@ -235,9 +235,9 @@ class RootCommands(common.AuthedCommandsBase): self._require('id') try: user, password = self.dbaas.root.create(self.id) - print "User:\t\t%s\nPassword:\t%s" % (user, password) - except: - print sys.exc_info()[1] + print("User:\t\t%s\nPassword:\t%s" % (user, password)) + except Exception: + print(sys.exc_info()[1]) def enabled(self): """Check the instance for root access""" @@ -387,7 +387,7 @@ def main(): except Exception as ex: if options.debug: raise - print ex + print(ex) else: getattr(command_object, action)() else: diff --git a/troveclient/compat/client.py b/troveclient/compat/client.py index f0f0ac45..2b4b7c4a 100644 --- a/troveclient/compat/client.py +++ b/troveclient/compat/client.py @@ -146,7 +146,7 @@ class TroveHTTPClient(httplib2.Http): try: req_body = json.dumps(json.loads(kwargs['body']), sort_keys=True, indent=4) - except: + except Exception: req_body = kwargs['body'] _logger.debug("BODY: %s\n" % (req_body)) else: @@ -154,7 +154,7 @@ class TroveHTTPClient(httplib2.Http): try: resp_body = json.dumps(json.loads(body), sort_keys=True, indent=4) - except: + except Exception: resp_body = body _logger.debug("RESPONSE HEADERS: %s" % resp) _logger.debug("RESPONSE BODY : %s" % resp_body) @@ -229,7 +229,7 @@ class TroveHTTPClient(httplib2.Http): # re-authenticate and try again. If it still fails, bail. try: return request() - except exceptions.Unauthorized as ex: + except exceptions.Unauthorized: self.authenticate() return request() @@ -296,26 +296,23 @@ class Dbaas(object): service_type='database', service_name=None, service_url=None, insecure=False, auth_strategy='keystone', region_name=None, client_cls=TroveHTTPClient): - from troveclient.compat.versions import Versions - from troveclient.v1.databases import Databases - from troveclient.v1.flavors import Flavors - from troveclient.v1.instances import Instances - from troveclient.v1.limits import Limits - from troveclient.v1.users import Users - from troveclient.v1.root import Root - from troveclient.v1.hosts import Hosts - from troveclient.v1.quota import Quotas - from troveclient.v1.backups import Backups - from troveclient.v1.security_groups import SecurityGroups - from troveclient.v1.security_groups import SecurityGroupRules - from troveclient.v1.datastores import Datastores - from troveclient.v1.datastores import DatastoreVersions - from troveclient.v1.storage import StorageInfo - from troveclient.v1.management import Management - from troveclient.v1.management import MgmtFlavors - from troveclient.v1.accounts import Accounts - from troveclient.v1.diagnostics import DiagnosticsInterrogator - from troveclient.v1.diagnostics import HwInfoInterrogator + + from troveclient.compat import versions + from troveclient.v1 import accounts + from troveclient.v1 import backups + from troveclient.v1 import databases + from troveclient.v1 import datastores + from troveclient.v1 import diagnostics + from troveclient.v1 import flavors + from troveclient.v1 import hosts + from troveclient.v1 import instances + from troveclient.v1 import limits + from troveclient.v1 import management + from troveclient.v1 import quota + from troveclient.v1 import root + from troveclient.v1 import security_groups + from troveclient.v1 import storage + from troveclient.v1 import users self.client = client_cls(username, api_key, tenant, auth_url, service_type=service_type, @@ -324,26 +321,26 @@ class Dbaas(object): insecure=insecure, auth_strategy=auth_strategy, region_name=region_name) - self.versions = Versions(self) - self.databases = Databases(self) - self.flavors = Flavors(self) - self.instances = Instances(self) - self.limits = Limits(self) - self.users = Users(self) - self.root = Root(self) - self.hosts = Hosts(self) - self.quota = Quotas(self) - self.backups = Backups(self) - self.security_groups = SecurityGroups(self) - self.security_group_rules = SecurityGroupRules(self) - self.datastores = Datastores(self) - self.datastore_versions = DatastoreVersions(self) - self.storage = StorageInfo(self) - self.management = Management(self) - self.mgmt_flavor = MgmtFlavors(self) - self.accounts = Accounts(self) - self.diagnostics = DiagnosticsInterrogator(self) - self.hwinfo = HwInfoInterrogator(self) + self.versions = versions.Versions(self) + self.databases = databases.Databases(self) + self.flavors = flavors.Flavors(self) + self.instances = instances.Instances(self) + self.limits = limits.Limits(self) + self.users = users.Users(self) + self.root = root.Root(self) + self.hosts = hosts.Hosts(self) + self.quota = quota.Quotas(self) + self.backups = backups.Backups(self) + self.security_groups = security_groups.SecurityGroups(self) + self.security_group_rules = security_groups.SecurityGroupRules(self) + self.datastores = datastores.Datastores(self) + self.datastore_versions = datastores.DatastoreVersions(self) + self.storage = storage.StorageInfo(self) + self.management = management.Management(self) + self.mgmt_flavor = management.MgmtFlavors(self) + self.accounts = accounts.Accounts(self) + self.diagnostics = diagnostics.DiagnosticsInterrogator(self) + self.hwinfo = diagnostics.HwInfoInterrogator(self) class Mgmt(object): def __init__(self, dbaas): diff --git a/troveclient/compat/common.py b/troveclient/compat/common.py index 92922a6d..a50914e7 100644 --- a/troveclient/compat/common.py +++ b/troveclient/compat/common.py @@ -21,7 +21,7 @@ import six import sys from troveclient.compat import client -from troveclient.compat.xml import TroveXmlClient +from troveclient.compat import xml from troveclient.compat import exceptions from troveclient.openstack.common.py3kcompat import urlutils @@ -44,7 +44,7 @@ def check_for_exceptions(resp, body): def print_actions(cmd, actions): """Print help for the command with list of options and description""" - print(("Available actions for '%s' cmd:") % cmd) + print("Available actions for '%s' cmd:" % cmd) for k, v in six.iteritems(actions): print("\t%-20s%s" % (k, v.__doc__)) sys.exit(2) @@ -119,7 +119,7 @@ class CliOptions(object): return pickle.load(token) except IOError: pass # File probably not found. - except: + except Exception: print("ERROR: Token file found at %s was corrupt." % cls.APITOKEN) return cls.default() @@ -217,7 +217,7 @@ class CommandsBase(object): """Creates the all important client object.""" try: if self.xml: - client_cls = TroveXmlClient + client_cls = xml.TroveXmlClient else: client_cls = client.TroveHTTPClient if self.verbose: @@ -232,7 +232,7 @@ class CommandsBase(object): service_url=self.service_url, insecure=self.insecure, client_cls=client_cls) - except: + except Exception: if self.debug: raise print(sys.exc_info()[1]) @@ -241,7 +241,7 @@ class CommandsBase(object): if not self.debug: try: return func(*args, **kwargs) - except: + except Exception: print(sys.exc_info()[1]) return None else: @@ -328,7 +328,7 @@ class CommandsBase(object): print(self._dumps((link))) else: print("OK") - except: + except Exception: if self.debug: raise print(sys.exc_info()[1]) @@ -366,7 +366,7 @@ class Auth(CommandsBase): print("Token aquired! Saving to %s..." % CliOptions.APITOKEN) print(" service_url = %s" % self.service_url) print(" token = %s" % self.token) - except: + except Exception: if self.debug: raise print(sys.exc_info()[1]) diff --git a/troveclient/compat/mcli.py b/troveclient/compat/mcli.py index baa096c6..7a597edb 100644 --- a/troveclient/compat/mcli.py +++ b/troveclient/compat/mcli.py @@ -39,7 +39,7 @@ oparser = None def _pretty_print(info): - print json.dumps(info, sort_keys=True, indent=4) + print(json.dumps(info, sort_keys=True, indent=4)) class HostCommands(common.AuthedCommandsBase): @@ -260,7 +260,7 @@ def main(): except Exception as ex: if options.debug: raise - print ex + print(ex) else: common.print_actions(cmd, actions) else: diff --git a/troveclient/compat/tests/test_auth.py b/troveclient/compat/tests/test_auth.py index cb3b6bc2..582e000b 100644 --- a/troveclient/compat/tests/test_auth.py +++ b/troveclient/compat/tests/test_auth.py @@ -17,9 +17,9 @@ # License for the specific language governing permissions and limitations # under the License. -from testtools import TestCase +import testtools from troveclient.compat import auth -from mock import Mock +import mock from troveclient.compat import exceptions @@ -39,7 +39,7 @@ def check_url_none(test_case, auth_class): pass -class AuthenticatorTest(TestCase): +class AuthenticatorTest(testtools.TestCase): def setUp(self): super(AuthenticatorTest, self).setUp() @@ -72,58 +72,62 @@ class AuthenticatorTest(TestCase): self.assertRaises(ValueError, auth.get_authenticator_cls, cls_or_name) def test__authenticate(self): - authObj = auth.Authenticator(Mock(), auth.KeyStoneV2Authenticator, - Mock(), Mock(), Mock(), Mock()) + authObj = auth.Authenticator(mock.Mock(), auth.KeyStoneV2Authenticator, + mock.Mock(), mock.Mock(), + mock.Mock(), mock.Mock()) # test response code 200 - resp = Mock() + resp = mock.Mock() resp.status = 200 body = "test_body" - auth.ServiceCatalog._load = Mock(return_value=1) - authObj.client._time_request = Mock(return_value=(resp, body)) + auth.ServiceCatalog._load = mock.Mock(return_value=1) + authObj.client._time_request = mock.Mock(return_value=(resp, body)) - sc = authObj._authenticate(Mock(), Mock()) + sc = authObj._authenticate(mock.Mock(), mock.Mock()) self.assertEqual(body, sc.catalog) # test AmbiguousEndpoints exception - auth.ServiceCatalog.__init__ = \ - Mock(side_effect=exceptions.AmbiguousEndpoints) + auth.ServiceCatalog.__init__ = mock.Mock( + side_effect=exceptions.AmbiguousEndpoints + ) self.assertRaises(exceptions.AmbiguousEndpoints, - authObj._authenticate, Mock(), Mock()) + authObj._authenticate, mock.Mock(), mock.Mock()) # test handling KeyError and raising AuthorizationFailure exception - auth.ServiceCatalog.__init__ = Mock(side_effect=KeyError) + auth.ServiceCatalog.__init__ = mock.Mock(side_effect=KeyError) self.assertRaises(exceptions.AuthorizationFailure, - authObj._authenticate, Mock(), Mock()) + authObj._authenticate, mock.Mock(), mock.Mock()) # test EndpointNotFound exception - mock = Mock(side_effect=exceptions.EndpointNotFound) - auth.ServiceCatalog.__init__ = mock + mock_obj = mock.Mock(side_effect=exceptions.EndpointNotFound) + auth.ServiceCatalog.__init__ = mock_obj self.assertRaises(exceptions.EndpointNotFound, - authObj._authenticate, Mock(), Mock()) - mock.side_effect = None + authObj._authenticate, mock.Mock(), mock.Mock()) + mock_obj.side_effect = None # test response code 305 - resp.__getitem__ = Mock(return_value='loc') + resp.__getitem__ = mock.Mock(return_value='loc') resp.status = 305 body = "test_body" - authObj.client._time_request = Mock(return_value=(resp, body)) + authObj.client._time_request = mock.Mock(return_value=(resp, body)) - l = authObj._authenticate(Mock(), Mock()) + l = authObj._authenticate(mock.Mock(), mock.Mock()) self.assertEqual('loc', l) # test any response code other than 200 and 305 resp.status = 404 - exceptions.from_response = Mock(side_effect=ValueError) - self.assertRaises(ValueError, authObj._authenticate, Mock(), Mock()) + exceptions.from_response = mock.Mock(side_effect=ValueError) + self.assertRaises(ValueError, authObj._authenticate, + mock.Mock(), mock.Mock()) def test_authenticate(self): - authObj = auth.Authenticator(Mock(), auth.KeyStoneV2Authenticator, - Mock(), Mock(), Mock(), Mock()) + authObj = auth.Authenticator(mock.Mock(), auth.KeyStoneV2Authenticator, + mock.Mock(), mock.Mock(), + mock.Mock(), mock.Mock()) self.assertRaises(NotImplementedError, authObj.authenticate) -class KeyStoneV2AuthenticatorTest(TestCase): +class KeyStoneV2AuthenticatorTest(testtools.TestCase): def test_authenticate(self): # url is None @@ -139,9 +143,9 @@ class KeyStoneV2AuthenticatorTest(TestCase): def side_effect_func(url): return url - mock = Mock() - mock.side_effect = side_effect_func - authObj._v2_auth = mock + mock_obj = mock.Mock() + mock_obj.side_effect = side_effect_func + authObj._v2_auth = mock_obj r = authObj.authenticate() self.assertEqual(url, r) @@ -158,10 +162,10 @@ class KeyStoneV2AuthenticatorTest(TestCase): def side_effect_func(url, body): return body - mock = Mock() - mock.side_effect = side_effect_func - authObj._authenticate = mock - body = authObj._v2_auth(Mock()) + mock_obj = mock.Mock() + mock_obj.side_effect = side_effect_func + authObj._authenticate = mock_obj + body = authObj._v2_auth(mock.Mock()) self.assertEqual(username, body['auth']['passwordCredentials']['username']) self.assertEqual(password, @@ -169,7 +173,7 @@ class KeyStoneV2AuthenticatorTest(TestCase): self.assertEqual(tenant, body['auth']['tenantName']) -class Auth1_1Test(TestCase): +class Auth1_1Test(testtools.TestCase): def test_authenticate(self): # handle when url is None @@ -187,9 +191,9 @@ class Auth1_1Test(TestCase): def side_effect_func(auth_url, body, root_key): return auth_url, body, root_key - mock = Mock() - mock.side_effect = side_effect_func - authObj._authenticate = mock + mock_obj = mock.Mock() + mock_obj.side_effect = side_effect_func + authObj._authenticate = mock_obj auth_url, body, root_key = authObj.authenticate() self.assertEqual(username, body['credentials']['username']) @@ -198,7 +202,7 @@ class Auth1_1Test(TestCase): self.assertEqual('auth', root_key) -class RaxAuthenticatorTest(TestCase): +class RaxAuthenticatorTest(testtools.TestCase): def test_authenticate(self): # url is None @@ -214,9 +218,9 @@ class RaxAuthenticatorTest(TestCase): def side_effect_func(url): return url - mock = Mock() - mock.side_effect = side_effect_func - authObj._rax_auth = mock + mock_obj = mock.Mock() + mock_obj.side_effect = side_effect_func + authObj._rax_auth = mock_obj r = authObj.authenticate() self.assertEqual(url, r) @@ -232,10 +236,10 @@ class RaxAuthenticatorTest(TestCase): def side_effect_func(url, body): return body - mock = Mock() - mock.side_effect = side_effect_func - authObj._authenticate = mock - body = authObj._rax_auth(Mock()) + mock_obj = mock.Mock() + mock_obj.side_effect = side_effect_func + authObj._authenticate = mock_obj + body = authObj._rax_auth(mock.Mock()) v = body['auth']['RAX-KSKEY:apiKeyCredentials']['username'] self.assertEqual(username, v) @@ -247,7 +251,7 @@ class RaxAuthenticatorTest(TestCase): self.assertEqual(tenant, v) -class FakeAuthTest(TestCase): +class FakeAuthTest(testtools.TestCase): def test_authenticate(self): tenant = "tenant" @@ -262,13 +266,13 @@ class FakeAuthTest(TestCase): self.assertEqual(tenant, fc.get_token()) -class ServiceCatalogTest(TestCase): +class ServiceCatalogTest(testtools.TestCase): def setUp(self): super(ServiceCatalogTest, self).setUp() self.orig_url_for = auth.ServiceCatalog._url_for self.orig__init__ = auth.ServiceCatalog.__init__ - auth.ServiceCatalog.__init__ = Mock(return_value=None) + auth.ServiceCatalog.__init__ = mock.Mock(return_value=None) self.test_url = "http://localhost:1234/test" def tearDown(self): @@ -278,7 +282,7 @@ class ServiceCatalogTest(TestCase): def test__load(self): url = "random_url" - auth.ServiceCatalog._url_for = Mock(return_value=url) + auth.ServiceCatalog._url_for = mock.Mock(return_value=url) # when service_url is None scObj = auth.ServiceCatalog() @@ -347,10 +351,10 @@ class ServiceCatalogTest(TestCase): return "test_attr_value" # simulating dict - endpoint = Mock() - mock = Mock() - mock.side_effect = side_effect_func_ep - endpoint.__getitem__ = mock + endpoint = mock.Mock() + mock_obj = mock.Mock() + mock_obj.side_effect = side_effect_func_ep + endpoint.__getitem__ = mock_obj scObj.catalog['endpoints'].append(endpoint) # not-empty list but not matching endpoint @@ -370,7 +374,7 @@ class ServiceCatalogTest(TestCase): scObj.catalog[scObj.root_key]['serviceCatalog'] = list() endpoint = scObj.catalog['endpoints'][0] - endpoint.get = Mock(return_value=self.test_url) + endpoint.get = mock.Mock(return_value=self.test_url) r_url = scObj._url_for(attr="test_attr", filter_value="test_attr_value") self.assertEqual(self.test_url, r_url) @@ -386,13 +390,13 @@ class ServiceCatalogTest(TestCase): return "test_service_name" return None - mock1 = Mock() + mock1 = mock.Mock() mock1.side_effect = side_effect_func_service - service1 = Mock() + service1 = mock.Mock() service1.get = mock1 endpoint2 = {"test_attr": "test_attr_value"} - service1.__getitem__ = Mock(return_value=[endpoint2]) + service1.__getitem__ = mock.Mock(return_value=[endpoint2]) scObj.catalog[scObj.root_key]['serviceCatalog'] = [service1] self.assertRaises(exceptions.AmbiguousEndpoints, scObj._url_for, attr="test_attr", filter_value="test_attr_value") diff --git a/troveclient/compat/tests/test_common.py b/troveclient/compat/tests/test_common.py index 1a12258e..8f0f6d0a 100644 --- a/troveclient/compat/tests/test_common.py +++ b/troveclient/compat/tests/test_common.py @@ -1,10 +1,25 @@ +# Copyright (c) 2011 OpenStack Foundation +# 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 sys import optparse import json import collections -from testtools import TestCase -from mock import Mock +import testtools +import mock from troveclient.compat import common @@ -13,12 +28,12 @@ from troveclient.compat import common """ -class CommonTest(TestCase): +class CommonTest(testtools.TestCase): def setUp(self): super(CommonTest, self).setUp() self.orig_sys_exit = sys.exit - sys.exit = Mock(return_value=None) + sys.exit = mock.Mock(return_value=None) def tearDown(self): super(CommonTest, self).tearDown() @@ -38,14 +53,14 @@ class CommonTest(TestCase): def test_check_for_exceptions(self): status = [400, 422, 500] for s in status: - resp = Mock() + resp = mock.Mock() #compat still uses status resp.status = s self.assertRaises(Exception, common.check_for_exceptions, resp, "body") # a no-exception case - resp = Mock() + resp = mock.Mock() resp.status_code = 200 common.check_for_exceptions(resp, "body") @@ -73,7 +88,7 @@ class CommonTest(TestCase): common.limit_url(url, limit=limit, marker=marker)) -class CliOptionsTest(TestCase): +class CliOptionsTest(testtools.TestCase): def check_default_options(self, co): self.assertEqual(None, co.username) @@ -125,7 +140,7 @@ class CliOptionsTest(TestCase): self.check_option(oparser, option_name) -class ArgumentRequiredTest(TestCase): +class ArgumentRequiredTest(testtools.TestCase): def setUp(self): super(ArgumentRequiredTest, self).setUp() @@ -140,12 +155,12 @@ class ArgumentRequiredTest(TestCase): self.assertEqual(expected, self.arg_req.__str__()) -class CommandsBaseTest(TestCase): +class CommandsBaseTest(testtools.TestCase): def setUp(self): super(CommandsBaseTest, self).setUp() self.orig_sys_exit = sys.exit - sys.exit = Mock(return_value=None) + sys.exit = mock.Mock(return_value=None) self.orig_sys_argv = sys.argv sys.argv = ['fakecmd'] parser = common.CliOptions().create_optparser(False) @@ -160,7 +175,7 @@ class CommandsBaseTest(TestCase): self.assertNotEqual(None, self.cmd_base) def test__safe_exec(self): - func = Mock(return_value="test") + func = mock.Mock(return_value="test") self.cmd_base.debug = True r = self.cmd_base._safe_exec(func) self.assertEqual("test", r) @@ -169,7 +184,7 @@ class CommandsBaseTest(TestCase): r = self.cmd_base._safe_exec(func) self.assertEqual("test", r) - func = Mock(side_effect=ValueError) # an arbitrary exception + func = mock.Mock(side_effect=ValueError) # an arbitrary exception r = self.cmd_base._safe_exec(func) self.assertEqual(None, r) @@ -209,30 +224,30 @@ class CommandsBaseTest(TestCase): self.assertEqual(["v3"], self.cmd_base.attr1) def test__pretty_print(self): - func = Mock(return_value=None) + func = mock.Mock(return_value=None) self.cmd_base.verbose = True self.assertEqual(None, self.cmd_base._pretty_print(func)) self.cmd_base.verbose = False self.assertEqual(None, self.cmd_base._pretty_print(func)) def test__dumps(self): - json.dumps = Mock(return_value="test-dump") + json.dumps = mock.Mock(return_value="test-dump") self.assertEqual("test-dump", self.cmd_base._dumps("item")) def test__pretty_list(self): - func = Mock(return_value=None) + func = mock.Mock(return_value=None) self.cmd_base.verbose = True self.assertEqual(None, self.cmd_base._pretty_list(func)) self.cmd_base.verbose = False self.assertEqual(None, self.cmd_base._pretty_list(func)) - item = Mock(return_value="test") + item = mock.Mock(return_value="test") item._info = "info" - func = Mock(return_value=[item]) + func = mock.Mock(return_value=[item]) self.assertEqual(None, self.cmd_base._pretty_list(func)) def test__pretty_paged(self): self.cmd_base.limit = "5" - func = Mock(return_value=None) + func = mock.Mock(return_value=None) self.cmd_base.verbose = True self.assertEqual(None, self.cmd_base._pretty_paged(func)) @@ -246,28 +261,28 @@ class CommandsBaseTest(TestCase): return ["item1"] def __len__(self): - return count + return self.count ret = MockIterable() - func = Mock(return_value=ret) + func = mock.Mock(return_value=ret) self.assertEqual(None, self.cmd_base._pretty_paged(func)) ret.count = 0 self.assertEqual(None, self.cmd_base._pretty_paged(func)) - func = Mock(side_effect=ValueError) + func = mock.Mock(side_effect=ValueError) self.assertEqual(None, self.cmd_base._pretty_paged(func)) self.cmd_base.debug = True - self.cmd_base.marker = Mock() + self.cmd_base.marker = mock.Mock() self.assertRaises(ValueError, self.cmd_base._pretty_paged, func) -class AuthTest(TestCase): +class AuthTest(testtools.TestCase): def setUp(self): super(AuthTest, self).setUp() self.orig_sys_exit = sys.exit - sys.exit = Mock(return_value=None) + sys.exit = mock.Mock(return_value=None) self.orig_sys_argv = sys.argv sys.argv = ['fakecmd'] self.parser = common.CliOptions().create_optparser(False) @@ -287,28 +302,28 @@ class AuthTest(TestCase): self.auth.apikey = "apikey" self.auth.tenant_id = "tenant_id" self.auth.auth_url = "auth_url" - dbaas = Mock() - dbaas.authenticate = Mock(return_value=None) - dbaas.client = Mock() - dbaas.client.auth_token = Mock() - dbaas.client.service_url = Mock() - self.auth._get_client = Mock(return_value=dbaas) + dbaas = mock.Mock() + dbaas.authenticate = mock.Mock(return_value=None) + dbaas.client = mock.Mock() + dbaas.client.auth_token = mock.Mock() + dbaas.client.service_url = mock.Mock() + self.auth._get_client = mock.Mock(return_value=dbaas) self.auth.login() self.auth.debug = True - self.auth._get_client = Mock(side_effect=ValueError) + self.auth._get_client = mock.Mock(side_effect=ValueError) self.assertRaises(ValueError, self.auth.login) self.auth.debug = False self.auth.login() -class AuthedCommandsBaseTest(TestCase): +class AuthedCommandsBaseTest(testtools.TestCase): def setUp(self): super(AuthedCommandsBaseTest, self).setUp() self.orig_sys_exit = sys.exit - sys.exit = Mock(return_value=None) + sys.exit = mock.Mock(return_value=None) self.orig_sys_argv = sys.argv sys.argv = ['fakecmd'] @@ -320,17 +335,17 @@ class AuthedCommandsBaseTest(TestCase): def test___init__(self): parser = common.CliOptions().create_optparser(False) common.AuthedCommandsBase.debug = True - dbaas = Mock() - dbaas.authenticate = Mock(return_value=None) - dbaas.client = Mock() - dbaas.client.auth_token = Mock() - dbaas.client.service_url = Mock() - dbaas.client.authenticate_with_token = Mock() - common.AuthedCommandsBase._get_client = Mock(return_value=dbaas) - authed_cmd = common.AuthedCommandsBase(parser) + dbaas = mock.Mock() + dbaas.authenticate = mock.Mock(return_value=None) + dbaas.client = mock.Mock() + dbaas.client.auth_token = mock.Mock() + dbaas.client.service_url = mock.Mock() + dbaas.client.authenticate_with_token = mock.Mock() + common.AuthedCommandsBase._get_client = mock.Mock(return_value=dbaas) + common.AuthedCommandsBase(parser) -class PaginatedTest(TestCase): +class PaginatedTest(testtools.TestCase): def setUp(self): super(PaginatedTest, self).setUp() @@ -372,7 +387,6 @@ class PaginatedTest(TestCase): def test___reversed__(self): itr = self.pgn.__reversed__() - expected = ["item2", "item1"] self.assertEqual("item2", next(itr)) self.assertEqual("item1", next(itr)) self.assertRaises(StopIteration, next, itr) diff --git a/troveclient/compat/tests/test_xml.py b/troveclient/compat/tests/test_xml.py index dfae68ac..73c798c1 100644 --- a/troveclient/compat/tests/test_xml.py +++ b/troveclient/compat/tests/test_xml.py @@ -1,9 +1,25 @@ +# Copyright (c) 2011 OpenStack Foundation +# 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 testtools from lxml import etree -#from troveclient import xml +from troveclient.compat import xml # Killing this until xml support is brought back. -#class XmlTest(TestCase): +#class XmlTest(testtools.TestCase): class XmlTest(object): ELEMENT = ''' diff --git a/troveclient/compat/xml.py b/troveclient/compat/xml.py index e01c23c2..546d8fbe 100644 --- a/troveclient/compat/xml.py +++ b/troveclient/compat/xml.py @@ -1,8 +1,23 @@ +# Copyright (c) 2011 OpenStack Foundation +# 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. + from lxml import etree -from numbers import Number +import numbers from troveclient.compat import exceptions -from troveclient.compat.client import TroveHTTPClient +from troveclient.compat import client XML_NS = {None: "http://docs.openstack.org/database/api/v1.0"} @@ -227,7 +242,7 @@ def populate_element_from_dict(element, dict): for key, value in dict.items(): if isinstance(value, basestring): element.set(key, value) - elif isinstance(value, Number): + elif isinstance(value, numbers.Number): element.set(key, str(value)) elif isinstance(value, None.__class__): element.set(key, '') @@ -263,7 +278,7 @@ def modify_response_types(value, type_translator): for element in value] -class TroveXmlClient(TroveHTTPClient): +class TroveXmlClient(client.TroveHTTPClient): @classmethod def morph_request(self, kwargs): diff --git a/troveclient/shell.py b/troveclient/shell.py index 72aacde5..8cbf5d4e 100644 --- a/troveclient/shell.py +++ b/troveclient/shell.py @@ -37,7 +37,7 @@ import troveclient from troveclient import client from troveclient.openstack.common import strutils from troveclient.openstack.common.apiclient import exceptions as exc -from troveclient.openstack.common.gettextutils import _ +from troveclient.openstack.common import gettextutils as gtu from troveclient import utils from troveclient.v1 import shell as shell_v1 @@ -548,7 +548,7 @@ class OpenStackHelpFormatter(argparse.HelpFormatter): 'trove create --databases ' """ if prefix is None: - prefix = _('usage: ') + prefix = gtu._('usage: ') # if usage is specified, use that if usage is not None: diff --git a/troveclient/tests/test_accounts.py b/troveclient/tests/test_accounts.py index d541e985..f93ea3d9 100644 --- a/troveclient/tests/test_accounts.py +++ b/troveclient/tests/test_accounts.py @@ -17,8 +17,8 @@ # License for the specific language governing permissions and limitations # under the License. -from testtools import TestCase -from mock import Mock +import testtools +import mock from troveclient.v1 import accounts from troveclient import base @@ -28,12 +28,12 @@ Unit tests for accounts.py """ -class AccountTest(TestCase): +class AccountTest(testtools.TestCase): def setUp(self): super(AccountTest, self).setUp() self.orig__init = accounts.Account.__init__ - accounts.Account.__init__ = Mock(return_value=None) + accounts.Account.__init__ = mock.Mock(return_value=None) self.account = accounts.Account() def tearDown(self): @@ -45,15 +45,15 @@ class AccountTest(TestCase): self.assertEqual('', self.account.__repr__()) -class AccountsTest(TestCase): +class AccountsTest(testtools.TestCase): def setUp(self): super(AccountsTest, self).setUp() self.orig__init = accounts.Accounts.__init__ - accounts.Accounts.__init__ = Mock(return_value=None) + accounts.Accounts.__init__ = mock.Mock(return_value=None) self.accounts = accounts.Accounts() - self.accounts.api = Mock() - self.accounts.api.client = Mock() + self.accounts.api = mock.Mock() + self.accounts.api.client = mock.Mock() def tearDown(self): super(AccountsTest, self).tearDown() @@ -63,33 +63,33 @@ class AccountsTest(TestCase): def side_effect_func(self, val): return val - self.accounts.resource_class = Mock(side_effect=side_effect_func) + self.accounts.resource_class = mock.Mock(side_effect=side_effect_func) key_ = 'key' body_ = {key_: "test-value"} - self.accounts.api.client.get = Mock(return_value=('resp', body_)) + self.accounts.api.client.get = mock.Mock(return_value=('resp', body_)) self.assertEqual("test-value", self.accounts._list('url', key_)) - self.accounts.api.client.get = Mock(return_value=('resp', None)) + self.accounts.api.client.get = mock.Mock(return_value=('resp', None)) self.assertRaises(Exception, self.accounts._list, 'url', None) def test_index(self): - resp = Mock() + resp = mock.Mock() resp.status_code = 400 body = {"Accounts": {}} - self.accounts.api.client.get = Mock(return_value=(resp, body)) + self.accounts.api.client.get = mock.Mock(return_value=(resp, body)) self.assertRaises(Exception, self.accounts.index) resp.status_code = 200 self.assertTrue(isinstance(self.accounts.index(), base.Resource)) - self.accounts.api.client.get = Mock(return_value=(resp, None)) + self.accounts.api.client.get = mock.Mock(return_value=(resp, None)) self.assertRaises(Exception, self.accounts.index) def test_show(self): def side_effect_func(acct_name, acct): return acct_name, acct - account_ = Mock() + account_ = mock.Mock() account_.name = "test-account" - self.accounts._list = Mock(side_effect=side_effect_func) + self.accounts._list = mock.Mock(side_effect=side_effect_func) self.assertEqual(('/mgmt/accounts/test-account', 'account'), self.accounts.show(account_)) @@ -97,7 +97,7 @@ class AccountsTest(TestCase): account_ = 'account with no name' self.assertEqual(account_, accounts.Accounts._get_account_name(account_)) - account_ = Mock() + account_ = mock.Mock() account_.name = "account-name" self.assertEqual("account-name", accounts.Accounts._get_account_name(account_)) diff --git a/troveclient/tests/test_base.py b/troveclient/tests/test_base.py index 64147538..898ce7f3 100644 --- a/troveclient/tests/test_base.py +++ b/troveclient/tests/test_base.py @@ -20,8 +20,8 @@ import contextlib import os -from testtools import TestCase -from mock import Mock +import testtools +import mock from troveclient import base from troveclient.openstack.common.apiclient import exceptions @@ -38,26 +38,24 @@ def obj_class(self, res, loaded=True): return res -class BaseTest(TestCase): - +class BaseTest(testtools.TestCase): def test_getid(self): obj = "test" r = base.getid(obj) self.assertEqual(obj, r) test_id = "test_id" - obj = Mock() + obj = mock.Mock() obj.id = test_id r = base.getid(obj) self.assertEqual(test_id, r) -class ManagerTest(TestCase): - +class ManagerTest(testtools.TestCase): def setUp(self): super(ManagerTest, self).setUp() self.orig__init = base.Manager.__init__ - base.Manager.__init__ = Mock(return_value=None) + base.Manager.__init__ = mock.Mock(return_value=None) self.orig_os_makedirs = os.makedirs def tearDown(self): @@ -66,7 +64,7 @@ class ManagerTest(TestCase): os.makedirs = self.orig_os_makedirs def test___init__(self): - api = Mock() + api = mock.Mock() base.Manager.__init__ = self.orig__init manager = base.Manager(api) self.assertEqual(api, manager.api) @@ -77,11 +75,11 @@ class ManagerTest(TestCase): # handling exceptions mode = "w" cache_type = "unittest" - obj_class = Mock + obj_class = mock.Mock with manager.completion_cache(cache_type, obj_class, mode): pass - os.makedirs = Mock(side_effect=OSError) + os.makedirs = mock.Mock(side_effect=OSError) with manager.completion_cache(cache_type, obj_class, mode): pass @@ -94,20 +92,20 @@ class ManagerTest(TestCase): def side_effect_func(val): return val - manager._mock_cache = Mock() - manager._mock_cache.write = Mock(return_value=None) + manager._mock_cache = mock.Mock() + manager._mock_cache.write = mock.Mock(return_value=None) manager.write_to_completion_cache("mock", "val") self.assertEqual(1, manager._mock_cache.write.call_count) def _get_mock(self): manager = base.Manager() - manager.api = Mock() - manager.api.client = Mock() + manager.api = mock.Mock() + manager.api.client = mock.Mock() def side_effect_func(self, body, loaded=True): return body - manager.resource_class = Mock(side_effect=side_effect_func) + manager.resource_class = mock.Mock(side_effect=side_effect_func) return manager def test__get_with_response_key_none(self): @@ -115,7 +113,7 @@ class ManagerTest(TestCase): url_ = "test-url" body_ = "test-body" resp_ = "test-resp" - manager.api.client.get = Mock(return_value=(resp_, body_)) + manager.api.client.get = mock.Mock(return_value=(resp_, body_)) r = manager._get(url=url_, response_key=None) self.assertEqual(body_, r) @@ -124,20 +122,20 @@ class ManagerTest(TestCase): response_key = "response_key" body_ = {response_key: "test-resp-key-body"} url_ = "test_url_get" - manager.api.client.get = Mock(return_value=(url_, body_)) + manager.api.client.get = mock.Mock(return_value=(url_, body_)) r = manager._get(url=url_, response_key=response_key) self.assertEqual(body_[response_key], r) def test__create(self): manager = base.Manager() - manager.api = Mock() - manager.api.client = Mock() + manager.api = mock.Mock() + manager.api.client = mock.Mock() response_key = "response_key" data_ = "test-data" body_ = {response_key: data_} url_ = "test_url_post" - manager.api.client.post = Mock(return_value=(url_, body_)) + manager.api.client.post = mock.Mock(return_value=(url_, body_)) return_raw = True r = manager._create(url_, body_, response_key, return_raw) @@ -149,18 +147,18 @@ class ManagerTest(TestCase): def completion_cache_mock(*arg, **kwargs): yield - mock = Mock() - mock.side_effect = completion_cache_mock - manager.completion_cache = mock + mockl = mock.Mock() + mockl.side_effect = completion_cache_mock + manager.completion_cache = mockl - manager.resource_class = Mock(return_value="test-class") + manager.resource_class = mock.Mock(return_value="test-class") r = manager._create(url_, body_, response_key, return_raw) self.assertEqual("test-class", r) def get_mock_mng_api_client(self): manager = base.Manager() - manager.api = Mock() - manager.api.client = Mock() + manager.api = mock.Mock() + manager.api.client = mock.Mock() return manager def test__delete(self): @@ -168,7 +166,7 @@ class ManagerTest(TestCase): body_ = "test-body" manager = self.get_mock_mng_api_client() - manager.api.client.delete = Mock(return_value=(resp_, body_)) + manager.api.client.delete = mock.Mock(return_value=(resp_, body_)) # _delete just calls api.client.delete, and does nothing # the correctness should be tested in api class manager._delete("test-url") @@ -179,13 +177,12 @@ class ManagerTest(TestCase): body_ = "test-body" manager = self.get_mock_mng_api_client() - manager.api.client.put = Mock(return_value=(resp_, body_)) + manager.api.client.put = mock.Mock(return_value=(resp_, body_)) body = manager._update("test-url", body_) self.assertEqual(body_, body) class ManagerListTest(ManagerTest): - def setUp(self): super(ManagerListTest, self).setUp() @@ -194,25 +191,26 @@ class ManagerListTest(ManagerTest): yield self.manager = base.Manager() - self.manager.api = Mock() - self.manager.api.client = Mock() + self.manager.api = mock.Mock() + self.manager.api.client = mock.Mock() self.response_key = "response_key" self.data_p = ["p1", "p2"] self.body_p = {self.response_key: self.data_p} self.url_p = "test_url_post" - self.manager.api.client.post = Mock(return_value=(self.url_p, - self.body_p)) - + self.manager.api.client.post = mock.Mock( + return_value=(self.url_p, self.body_p) + ) self.data_g = ["g1", "g2", "g3"] self.body_g = {self.response_key: self.data_g} self.url_g = "test_url_get" - self.manager.api.client.get = Mock(return_value=(self.url_g, - self.body_g)) + self.manager.api.client.get = mock.Mock( + return_value=(self.url_g, self.body_g) + ) - mock = Mock() - mock.side_effect = completion_cache_mock - self.manager.completion_cache = mock + mockl = mock.Mock() + mockl.side_effect = completion_cache_mock + self.manager.completion_cache = mockl def tearDown(self): super(ManagerListTest, self).tearDown() @@ -238,7 +236,7 @@ class ManagerListTest(ManagerTest): data_ = {"values": ["p1", "p2"]} body_ = {self.response_key: data_} url_ = "test_url_post" - self.manager.api.client.post = Mock(return_value=(url_, body_)) + self.manager.api.client.post = mock.Mock(return_value=(url_, body_)) l = self.manager._list("url", self.response_key, obj_class, "something") data = data_["values"] @@ -250,14 +248,13 @@ class ManagerListTest(ManagerTest): data_ = {"v1": "1", "v2": "2"} body_ = {self.response_key: data_} url_ = "test_url_post" - self.manager.api.client.post = Mock(return_value=(url_, body_)) + self.manager.api.client.post = mock.Mock(return_value=(url_, body_)) l = self.manager._list("url", self.response_key, obj_class, "something") self.assertEqual(len(data_), len(l)) class FakeResource(object): - def __init__(self, _id, properties): self.id = _id try: @@ -271,7 +268,6 @@ class FakeResource(object): class FakeManager(base.ManagerWithFind): - resource_class = FakeResource resources = [ @@ -291,8 +287,7 @@ class FakeManager(base.ManagerWithFind): return self.resources -class FindResourceTestCase(TestCase): - +class FindResourceTestCase(testtools.TestCase): def setUp(self): super(FindResourceTestCase, self).setUp() self.manager = FakeManager(None) @@ -324,8 +319,7 @@ class FindResourceTestCase(TestCase): self.assertEqual(output, self.manager.get('4242')) -class ResourceTest(TestCase): - +class ResourceTest(testtools.TestCase): def setUp(self): super(ResourceTest, self).setUp() self.orig___init__ = base.Resource.__init__ @@ -335,8 +329,8 @@ class ResourceTest(TestCase): base.Resource.__init__ = self.orig___init__ def test___init__(self): - manager = Mock() - manager.write_to_completion_cache = Mock(return_value=None) + manager = mock.Mock() + manager.write_to_completion_cache = mock.Mock(return_value=None) info_ = {} robj = base.Resource(manager, info_) @@ -370,8 +364,8 @@ class ResourceTest(TestCase): self.assertEqual(4, manager.write_to_completion_cache.call_count) def test_human_id(self): - manager = Mock() - manager.write_to_completion_cache = Mock(return_value=None) + manager = mock.Mock() + manager.write_to_completion_cache = mock.Mock(return_value=None) info_ = {"name": "test-human-id"} robj = base.Resource(manager, info_) @@ -384,7 +378,7 @@ class ResourceTest(TestCase): self.assertEqual("new-human-id", robj.human_id) def get_mock_resource_obj(self): - base.Resource.__init__ = Mock(return_value=None) + base.Resource.__init__ = mock.Mock(return_value=None) robj = base.Resource() return robj @@ -414,19 +408,19 @@ class ResourceTest(TestCase): def test_get(self): robj = self.get_mock_resource_obj() - manager = Mock() + manager = mock.Mock() manager.get = None robj.manager = object() robj.get() - manager = Mock() - robj.manager = Mock() + manager = mock.Mock() + robj.manager = mock.Mock() robj.id = "id" - new = Mock() + new = mock.Mock() new._info = {"name": "test-human-id", "test_attr": 5} - robj.manager.get = Mock(return_value=new) + robj.manager.get = mock.Mock(return_value=new) robj.get() self.assertEqual("test-human-id", robj.name) self.assertEqual(5, robj.test_attr) @@ -451,7 +445,7 @@ class ResourceTest(TestCase): self.assertTrue(robj.__eq__(other)) # not instance of the same class - other = Mock() + other = mock.Mock() self.assertNotTrue(robj.__eq__(other)) def test_is_loaded(self): diff --git a/troveclient/tests/test_client.py b/troveclient/tests/test_client.py index 5ae65376..ab86c0c3 100644 --- a/troveclient/tests/test_client.py +++ b/troveclient/tests/test_client.py @@ -17,24 +17,25 @@ # License for the specific language governing permissions and limitations # under the License. -from testtools import TestCase +import testtools import troveclient.v1.client -from troveclient.client import get_version_map + +from troveclient import client as other_client from troveclient.openstack.common.apiclient import client from troveclient.openstack.common.apiclient import exceptions -class ClientTest(TestCase): +class ClientTest(testtools.TestCase): def test_get_client_class_v1(self): - version_map = get_version_map() + version_map = other_client.get_version_map() output = client.BaseClient.get_class('database', '1.0', version_map) self.assertEqual(output, troveclient.v1.client.Client) def test_get_client_class_unknown(self): - version_map = get_version_map() + version_map = other_client.get_version_map() self.assertRaises(exceptions.UnsupportedVersion, client.BaseClient.get_class, 'database', '0', version_map) diff --git a/troveclient/tests/test_common.py b/troveclient/tests/test_common.py index d4631feb..888f0d4c 100644 --- a/troveclient/tests/test_common.py +++ b/troveclient/tests/test_common.py @@ -17,18 +17,18 @@ # License for the specific language governing permissions and limitations # under the License. -from testtools import TestCase -from mock import Mock +import testtools +import mock from troveclient import common -class CommonTest(TestCase): +class CommonTest(testtools.TestCase): def test_check_for_exceptions(self): status = [400, 422, 500] for s in status: - resp = Mock() + resp = mock.Mock() resp.status_code = s self.assertRaises(Exception, common.check_for_exceptions, resp, "body") @@ -46,7 +46,7 @@ class CommonTest(TestCase): common.limit_url(url, limit=limit, marker=marker)) -class PaginatedTest(TestCase): +class PaginatedTest(testtools.TestCase): def setUp(self): super(PaginatedTest, self).setUp() @@ -88,7 +88,6 @@ class PaginatedTest(TestCase): def test___reversed__(self): itr = self.pgn.__reversed__() - expected = ["item2", "item1"] self.assertEqual("item2", next(itr)) self.assertEqual("item1", next(itr)) self.assertRaises(StopIteration, next, itr) diff --git a/troveclient/tests/test_datastores.py b/troveclient/tests/test_datastores.py index b7ad1e09..df6d4541 100644 --- a/troveclient/tests/test_datastores.py +++ b/troveclient/tests/test_datastores.py @@ -17,8 +17,8 @@ # under the License. -from testtools import TestCase -from mock import Mock +import testtools +import mock from troveclient.v1 import datastores from troveclient import base @@ -29,14 +29,14 @@ Unit tests for datastores.py """ -class DatastoreTest(TestCase): +class DatastoreTest(testtools.TestCase): def setUp(self): super(DatastoreTest, self).setUp() self.orig__init = datastores.Datastore.__init__ - datastores.Datastore.__init__ = Mock(return_value=None) + datastores.Datastore.__init__ = mock.Mock(return_value=None) self.datastore = datastores.Datastore() - self.datastore.manager = Mock() + self.datastore.manager = mock.Mock() def tearDown(self): super(DatastoreTest, self).tearDown() @@ -48,19 +48,19 @@ class DatastoreTest(TestCase): self.datastore.__repr__()) -class DatastoresTest(TestCase): +class DatastoresTest(testtools.TestCase): def setUp(self): super(DatastoresTest, self).setUp() self.orig__init = datastores.Datastores.__init__ - datastores.Datastores.__init__ = Mock(return_value=None) + datastores.Datastores.__init__ = mock.Mock(return_value=None) self.datastores = datastores.Datastores() - self.datastores.api = Mock() - self.datastores.api.client = Mock() - self.datastores.resource_class = Mock(return_value="ds-1") + self.datastores.api = mock.Mock() + self.datastores.api.client = mock.Mock() + self.datastores.resource_class = mock.Mock(return_value="ds-1") self.orig_base_getid = base.getid - base.getid = Mock(return_value="datastore1") + base.getid = mock.Mock(return_value="datastore1") def tearDown(self): super(DatastoresTest, self).tearDown() @@ -71,7 +71,7 @@ class DatastoresTest(TestCase): def side_effect_func(path, inst, limit, marker): return path, inst, limit, marker - self.datastores._list = Mock(side_effect=side_effect_func) + self.datastores._list = mock.Mock(side_effect=side_effect_func) limit = "test-limit" marker = "test-marker" expected = ("/datastores", "datastores", limit, marker) @@ -81,26 +81,26 @@ class DatastoresTest(TestCase): def side_effect_func(path, inst): return path, inst - self.datastores._get = Mock(side_effect=side_effect_func) + self.datastores._get = mock.Mock(side_effect=side_effect_func) self.assertEqual(('/datastores/datastore1', 'datastore'), self.datastores.get(1)) -class DatastoreVersionsTest(TestCase): +class DatastoreVersionsTest(testtools.TestCase): def setUp(self): super(DatastoreVersionsTest, self).setUp() self.orig__init = datastores.DatastoreVersions.__init__ - datastores.DatastoreVersions.__init__ = Mock(return_value=None) + datastores.DatastoreVersions.__init__ = mock.Mock(return_value=None) self.datastore_versions = datastores.DatastoreVersions() - self.datastore_versions.api = Mock() - self.datastore_versions.api.client = Mock() - self.datastore_versions.resource_class = Mock( + self.datastore_versions.api = mock.Mock() + self.datastore_versions.api.client = mock.Mock() + self.datastore_versions.resource_class = mock.Mock( return_value="ds_version-1") self.orig_base_getid = base.getid - base.getid = Mock(return_value="datastore_version1") + base.getid = mock.Mock(return_value="datastore_version1") def tearDown(self): super(DatastoreVersionsTest, self).tearDown() @@ -111,7 +111,7 @@ class DatastoreVersionsTest(TestCase): def side_effect_func(path, inst, limit, marker): return path, inst, limit, marker - self.datastore_versions._list = Mock(side_effect=side_effect_func) + self.datastore_versions._list = mock.Mock(side_effect=side_effect_func) limit = "test-limit" marker = "test-marker" expected = ("/datastores/datastore1/versions", @@ -123,7 +123,7 @@ class DatastoreVersionsTest(TestCase): def side_effect_func(path, inst): return path, inst - self.datastore_versions._get = Mock(side_effect=side_effect_func) + self.datastore_versions._get = mock.Mock(side_effect=side_effect_func) self.assertEqual(('/datastores/datastore1/versions/' 'datastore_version1', 'version'), diff --git a/troveclient/tests/test_instances.py b/troveclient/tests/test_instances.py index 47a57e8a..b0cdb0a6 100644 --- a/troveclient/tests/test_instances.py +++ b/troveclient/tests/test_instances.py @@ -17,8 +17,8 @@ # License for the specific language governing permissions and limitations # under the License. -from testtools import TestCase -from mock import Mock +import testtools +import mock from troveclient.v1 import instances from troveclient import base @@ -28,14 +28,14 @@ Unit tests for instances.py """ -class InstanceTest(TestCase): +class InstanceTest(testtools.TestCase): def setUp(self): super(InstanceTest, self).setUp() self.orig__init = instances.Instance.__init__ - instances.Instance.__init__ = Mock(return_value=None) + instances.Instance.__init__ = mock.Mock(return_value=None) self.instance = instances.Instance() - self.instance.manager = Mock() + self.instance.manager = mock.Mock() def tearDown(self): super(InstanceTest, self).tearDown() @@ -47,37 +47,37 @@ class InstanceTest(TestCase): def test_list_databases(self): db_list = ['database1', 'database2'] - self.instance.manager.databases = Mock() - self.instance.manager.databases.list = Mock(return_value=db_list) + self.instance.manager.databases = mock.Mock() + self.instance.manager.databases.list = mock.Mock(return_value=db_list) self.assertEqual(db_list, self.instance.list_databases()) def test_delete(self): - db_delete_mock = Mock(return_value=None) + db_delete_mock = mock.Mock(return_value=None) self.instance.manager.delete = db_delete_mock self.instance.delete() self.assertEqual(1, db_delete_mock.call_count) def test_restart(self): - db_restart_mock = Mock(return_value=None) + db_restart_mock = mock.Mock(return_value=None) self.instance.manager.restart = db_restart_mock self.instance.id = 1 self.instance.restart() self.assertEqual(1, db_restart_mock.call_count) -class InstancesTest(TestCase): +class InstancesTest(testtools.TestCase): def setUp(self): super(InstancesTest, self).setUp() self.orig__init = instances.Instances.__init__ - instances.Instances.__init__ = Mock(return_value=None) + instances.Instances.__init__ = mock.Mock(return_value=None) self.instances = instances.Instances() - self.instances.api = Mock() - self.instances.api.client = Mock() - self.instances.resource_class = Mock(return_value="instance-1") + self.instances.api = mock.Mock() + self.instances.api.client = mock.Mock() + self.instances.resource_class = mock.Mock(return_value="instance-1") self.orig_base_getid = base.getid - base.getid = Mock(return_value="instance1") + base.getid = mock.Mock(return_value="instance1") def tearDown(self): super(InstancesTest, self).tearDown() @@ -88,7 +88,7 @@ class InstancesTest(TestCase): def side_effect_func(path, body, inst): return path, body, inst - self.instances._create = Mock(side_effect=side_effect_func) + self.instances._create = mock.Mock(side_effect=side_effect_func) p, b, i = self.instances.create("test-name", 103, "test-volume", ['db1', 'db2'], ['u1', 'u2'], datastore="datastore", @@ -105,15 +105,17 @@ class InstancesTest(TestCase): self.assertEqual(103, b["instance"]["flavorRef"]) def test__list(self): - self.instances.api.client.get = Mock(return_value=('resp', None)) + self.instances.api.client.get = mock.Mock(return_value=('resp', None)) self.assertRaises(Exception, self.instances._list, "url", None) - body = Mock() - body.get = Mock(return_value=[{'href': 'http://test.net/test_file', - 'rel': 'next'}]) - body.__getitem__ = Mock(return_value='instance1') - #self.instances.resource_class = Mock(return_value="instance-1") - self.instances.api.client.get = Mock(return_value=('resp', body)) + body = mock.Mock() + body.get = mock.Mock( + return_value=[{'href': 'http://test.net/test_file', + 'rel': 'next'}] + ) + body.__getitem__ = mock.Mock(return_value='instance1') + #self.instances.resource_class = mock.Mock(return_value="instance-1") + self.instances.api.client.get = mock.Mock(return_value=('resp', body)) _expected = [{'href': 'http://test.net/test_file', 'rel': 'next'}] self.assertEqual(_expected, self.instances._list("url", None).links) @@ -121,7 +123,7 @@ class InstancesTest(TestCase): def side_effect_func(path, inst, limit, marker): return path, inst, limit, marker - self.instances._list = Mock(side_effect=side_effect_func) + self.instances._list = mock.Mock(side_effect=side_effect_func) limit = "test-limit" marker = "test-marker" expected = ("/instances", "instances", limit, marker) @@ -131,27 +133,27 @@ class InstancesTest(TestCase): def side_effect_func(path, inst): return path, inst - self.instances._get = Mock(side_effect=side_effect_func) + self.instances._get = mock.Mock(side_effect=side_effect_func) self.assertEqual(('/instances/instance1', 'instance'), self.instances.get(1)) def test_delete(self): - resp = Mock() + resp = mock.Mock() resp.status_code = 200 body = None - self.instances.api.client.delete = Mock(return_value=(resp, body)) + self.instances.api.client.delete = mock.Mock(return_value=(resp, body)) self.instances.delete('instance1') resp.status_code = 500 self.assertRaises(Exception, self.instances.delete, 'instance1') def test__action(self): - body = Mock() - resp = Mock() + body = mock.Mock() + resp = mock.Mock() resp.status_code = 200 - self.instances.api.client.post = Mock(return_value=(resp, body)) + self.instances.api.client.post = mock.Mock(return_value=(resp, body)) self.assertEqual('instance-1', self.instances._action(1, body)) - self.instances.api.client.post = Mock(return_value=(resp, None)) + self.instances.api.client.post = mock.Mock(return_value=(resp, None)) self.assertEqual(None, self.instances._action(1, body)) def _set_action_mock(self): @@ -161,7 +163,7 @@ class InstancesTest(TestCase): self._instance_id = None self._body = None - self.instances._action = Mock(side_effect=side_effect_func) + self.instances._action = mock.Mock(side_effect=side_effect_func) def test_resize_volume(self): self._set_action_mock() @@ -182,7 +184,7 @@ class InstancesTest(TestCase): self.assertEqual({'restart': {}}, self._body) -class InstanceStatusTest(TestCase): +class InstanceStatusTest(testtools.TestCase): def test_constants(self): self.assertEqual("ACTIVE", instances.InstanceStatus.ACTIVE) diff --git a/troveclient/tests/test_limits.py b/troveclient/tests/test_limits.py index 0beb9429..2be404af 100644 --- a/troveclient/tests/test_limits.py +++ b/troveclient/tests/test_limits.py @@ -17,26 +17,26 @@ # License for the specific language governing permissions and limitations # under the License. -from testtools import TestCase -from mock import Mock +import testtools +import mock from troveclient.v1 import limits -class LimitsTest(TestCase): +class LimitsTest(testtools.TestCase): """ This class tests the calling code for the Limits API """ def setUp(self): super(LimitsTest, self).setUp() - self.limits = limits.Limits(Mock()) - self.limits.api.client = Mock() + self.limits = limits.Limits(mock.Mock()) + self.limits.api.client = mock.Mock() def tearDown(self): super(LimitsTest, self).tearDown() def test_list(self): - resp = Mock() + resp = mock.Mock() resp.status_code = 200 body = {"limits": [ @@ -71,7 +71,7 @@ class LimitsTest(TestCase): 'remaining': 2, 'unit': 'MINUTE'}]} response = (resp, body) - mock_get = Mock(return_value=response) + mock_get = mock.Mock(return_value=response) self.limits.api.client.get = mock_get self.assertIsNotNone(self.limits.list()) mock_get.assert_called_once_with("/limits") @@ -84,7 +84,7 @@ class LimitsTest(TestCase): def _check_error_response(self, status_code): RESPONSE_KEY = "limits" - resp = Mock() + resp = mock.Mock() resp.status_code = status_code body = {RESPONSE_KEY: { 'absolute': {}, @@ -92,6 +92,6 @@ class LimitsTest(TestCase): {'limit': []}]}} response = (resp, body) - mock_get = Mock(return_value=response) + mock_get = mock.Mock(return_value=response) self.limits.api.client.get = mock_get self.assertRaises(Exception, self.limits.list) diff --git a/troveclient/tests/test_management.py b/troveclient/tests/test_management.py index 60c7825e..7576c1a8 100644 --- a/troveclient/tests/test_management.py +++ b/troveclient/tests/test_management.py @@ -17,8 +17,8 @@ # License for the specific language governing permissions and limitations # under the License. -from testtools import TestCase -from mock import Mock +import testtools +import mock from troveclient.v1 import management from troveclient import base @@ -28,12 +28,12 @@ Unit tests for management.py """ -class RootHistoryTest(TestCase): +class RootHistoryTest(testtools.TestCase): def setUp(self): super(RootHistoryTest, self).setUp() self.orig__init = management.RootHistory.__init__ - management.RootHistory.__init__ = Mock(return_value=None) + management.RootHistory.__init__ = mock.Mock(return_value=None) def tearDown(self): super(RootHistoryTest, self).tearDown() @@ -48,19 +48,19 @@ class RootHistoryTest(TestCase): root_history.__repr__()) -class ManagementTest(TestCase): +class ManagementTest(testtools.TestCase): def setUp(self): super(ManagementTest, self).setUp() self.orig__init = management.Management.__init__ - management.Management.__init__ = Mock(return_value=None) + management.Management.__init__ = mock.Mock(return_value=None) self.management = management.Management() - self.management.api = Mock() - self.management.api.client = Mock() + self.management.api = mock.Mock() + self.management.api.client = mock.Mock() self.orig_hist__init = management.RootHistory.__init__ self.orig_base_getid = base.getid - base.getid = Mock(return_value="instance1") + base.getid = mock.Mock(return_value="instance1") def tearDown(self): super(ManagementTest, self).tearDown() @@ -69,22 +69,24 @@ class ManagementTest(TestCase): base.getid = self.orig_base_getid def test__list(self): - self.management.api.client.get = Mock(return_value=('resp', None)) + self.management.api.client.get = mock.Mock(return_value=('resp', None)) self.assertRaises(Exception, self.management._list, "url", None) - body = Mock() - body.get = Mock(return_value=[{'href': 'http://test.net/test_file', - 'rel': 'next'}]) - body.__getitem__ = Mock(return_value='instance1') - self.management.resource_class = Mock(return_value="instance-1") - self.management.api.client.get = Mock(return_value=('resp', body)) + body = mock.Mock() + body.get = mock.Mock( + return_value=[{'href': 'http://test.net/test_file', + 'rel': 'next'}] + ) + body.__getitem__ = mock.Mock(return_value='instance1') + self.management.resource_class = mock.Mock(return_value="instance-1") + self.management.api.client.get = mock.Mock(return_value=('resp', body)) _expected = [{'href': 'http://test.net/test_file', 'rel': 'next'}] self.assertEqual(_expected, self.management._list("url", None).links) def test_show(self): def side_effect_func(path, instance): return path, instance - self.management._get = Mock(side_effect=side_effect_func) + self.management._get = mock.Mock(side_effect=side_effect_func) p, i = self.management.show(1) self.assertEqual(('/mgmt/instances/instance1', 'instance'), (p, i)) @@ -92,25 +94,27 @@ class ManagementTest(TestCase): def side_effect_func(url, name, limit, marker): return url - self.management._list = Mock(side_effect=side_effect_func) + self.management._list = mock.Mock(side_effect=side_effect_func) self.assertEqual('/mgmt/instances?deleted=true', self.management.index(deleted=True)) self.assertEqual('/mgmt/instances?deleted=false', self.management.index(deleted=False)) def test_root_enabled_history(self): - self.management.api.client.get = Mock(return_value=('resp', None)) + self.management.api.client.get = mock.Mock(return_value=('resp', None)) self.assertRaises(Exception, self.management.root_enabled_history, "instance") body = {'root_history': 'rh'} - self.management.api.client.get = Mock(return_value=('resp', body)) - management.RootHistory.__init__ = Mock(return_value=None) + self.management.api.client.get = mock.Mock(return_value=('resp', body)) + management.RootHistory.__init__ = mock.Mock(return_value=None) rh = self.management.root_enabled_history("instance") self.assertTrue(isinstance(rh, management.RootHistory)) def test__action(self): - resp = Mock() - self.management.api.client.post = Mock(return_value=(resp, 'body')) + resp = mock.Mock() + self.management.api.client.post = mock.Mock( + return_value=(resp, 'body') + ) resp.status_code = 200 self.management._action(1, 'body') self.assertEqual(1, self.management.api.client.post.call_count) @@ -123,7 +127,7 @@ class ManagementTest(TestCase): def side_effect_func(instance_id, body): self.body_ = body - self.management._action = Mock(side_effect=side_effect_func) + self.management._action = mock.Mock(side_effect=side_effect_func) def test_stop(self): self._mock_action() @@ -163,18 +167,18 @@ class ManagementTest(TestCase): self.assertEqual({'reset-task-status': {}}, self.body_) -class MgmtFlavorsTest(TestCase): +class MgmtFlavorsTest(testtools.TestCase): def setUp(self): super(MgmtFlavorsTest, self).setUp() self.orig__init = management.MgmtFlavors.__init__ - management.MgmtFlavors.__init__ = Mock(return_value=None) + management.MgmtFlavors.__init__ = mock.Mock(return_value=None) self.flavors = management.MgmtFlavors() - self.flavors.api = Mock() - self.flavors.api.client = Mock() - self.flavors.resource_class = Mock(return_value="flavor-1") + self.flavors.api = mock.Mock() + self.flavors.api.client = mock.Mock() + self.flavors.resource_class = mock.Mock(return_value="flavor-1") self.orig_base_getid = base.getid - base.getid = Mock(return_value="flavor1") + base.getid = mock.Mock(return_value="flavor1") def tearDown(self): super(MgmtFlavorsTest, self).tearDown() @@ -185,7 +189,7 @@ class MgmtFlavorsTest(TestCase): def side_effect_func(path, body, inst): return path, body, inst - self.flavors._create = Mock(side_effect=side_effect_func) + self.flavors._create = mock.Mock(side_effect=side_effect_func) p, b, i = self.flavors.create("test-name", 1024, 30, 2, 1) self.assertEqual("/mgmt/flavors", p) self.assertEqual("flavor", i) diff --git a/troveclient/tests/test_secgroups.py b/troveclient/tests/test_secgroups.py index 20ab13bc..a0bfc51d 100644 --- a/troveclient/tests/test_secgroups.py +++ b/troveclient/tests/test_secgroups.py @@ -17,8 +17,8 @@ # License for the specific language governing permissions and limitations # under the License. -from testtools import TestCase -from mock import Mock +import testtools +import mock from troveclient.v1 import security_groups @@ -27,12 +27,12 @@ Unit tests for security_groups.py """ -class SecGroupTest(TestCase): +class SecGroupTest(testtools.TestCase): def setUp(self): super(SecGroupTest, self).setUp() self.orig__init = security_groups.SecurityGroup.__init__ - security_groups.SecurityGroup.__init__ = Mock(return_value=None) + security_groups.SecurityGroup.__init__ = mock.Mock(return_value=None) self.security_group = security_groups.SecurityGroup() self.security_groups = security_groups.SecurityGroups(1) @@ -47,26 +47,30 @@ class SecGroupTest(TestCase): def test_list(self): sec_group_list = ['secgroup1', 'secgroup2'] - self.security_groups.list = Mock(return_value=sec_group_list) + self.security_groups.list = mock.Mock(return_value=sec_group_list) self.assertEqual(sec_group_list, self.security_groups.list()) def test_get(self): def side_effect_func(path, inst): return path, inst - self.security_groups._get = Mock(side_effect=side_effect_func) + self.security_groups._get = mock.Mock(side_effect=side_effect_func) self.security_group.id = 1 self.assertEqual(('/security-groups/1', 'security_group'), self.security_groups.get(self.security_group)) -class SecGroupRuleTest(TestCase): +class SecGroupRuleTest(testtools.TestCase): def setUp(self): super(SecGroupRuleTest, self).setUp() self.orig__init = security_groups.SecurityGroupRule.__init__ - security_groups.SecurityGroupRule.__init__ = Mock(return_value=None) - security_groups.SecurityGroupRules.__init__ = Mock(return_value=None) + security_groups.SecurityGroupRule.__init__ = mock.Mock( + return_value=None + ) + security_groups.SecurityGroupRules.__init__ = mock.Mock( + return_value=None + ) self.security_group_rule = security_groups.SecurityGroupRule() self.security_group_rules = security_groups.SecurityGroupRules() @@ -95,7 +99,9 @@ class SecGroupRuleTest(TestCase): def side_effect_func(path, body, inst): return path, body, inst - self.security_group_rules._create = Mock(side_effect=side_effect_func) + self.security_group_rules._create = mock.Mock( + side_effect=side_effect_func + ) p, b, i = self.security_group_rules.create(1, "tcp", 80, 80, "0.0.0.0//0") self.assertEqual("/security-group-rules", p) @@ -107,13 +113,14 @@ class SecGroupRuleTest(TestCase): self.assertEqual("0.0.0.0//0", b["security_group_rule"]["cidr"]) def test_delete(self): - resp = Mock() + resp = mock.Mock() resp.status = 200 body = None - self.security_group_rules.api = Mock() - self.security_group_rules.api.client = Mock() - self.security_group_rules.api.client.delete = \ - Mock(return_value=(resp, body)) + self.security_group_rules.api = mock.Mock() + self.security_group_rules.api.client = mock.Mock() + self.security_group_rules.api.client.delete = mock.Mock( + return_value=(resp, body) + ) self.security_group_rules.delete(self.id) resp.status_code = 500 self.assertRaises(Exception, self.security_group_rules.delete, diff --git a/troveclient/tests/test_users.py b/troveclient/tests/test_users.py index 01290e27..d8846c04 100644 --- a/troveclient/tests/test_users.py +++ b/troveclient/tests/test_users.py @@ -17,8 +17,8 @@ # License for the specific language governing permissions and limitations # under the License. -from testtools import TestCase -from mock import Mock +import testtools +import mock from troveclient.v1 import users from troveclient import base @@ -28,11 +28,11 @@ Unit tests for users.py """ -class UserTest(TestCase): +class UserTest(testtools.TestCase): def setUp(self): super(UserTest, self).setUp() self.orig__init = users.User.__init__ - users.User.__init__ = Mock(return_value=None) + users.User.__init__ = mock.Mock(return_value=None) self.user = users.User() def tearDown(self): @@ -44,17 +44,17 @@ class UserTest(TestCase): self.assertEqual('', self.user.__repr__()) -class UsersTest(TestCase): +class UsersTest(testtools.TestCase): def setUp(self): super(UsersTest, self).setUp() self.orig__init = users.Users.__init__ - users.Users.__init__ = Mock(return_value=None) + users.Users.__init__ = mock.Mock(return_value=None) self.users = users.Users() - self.users.api = Mock() - self.users.api.client = Mock() + self.users.api = mock.Mock() + self.users.api.client = mock.Mock() self.orig_base_getid = base.getid - base.getid = Mock(return_value="instance1") + base.getid = mock.Mock(return_value="instance1") def tearDown(self): super(UsersTest, self).tearDown() @@ -62,7 +62,7 @@ class UsersTest(TestCase): base.getid = self.orig_base_getid def _get_mock_method(self): - self._resp = Mock() + self._resp = mock.Mock() self._body = None self._url = None @@ -71,7 +71,7 @@ class UsersTest(TestCase): self._url = url return (self._resp, body) - return Mock(side_effect=side_effect_func) + return mock.Mock(side_effect=side_effect_func) def _build_fake_user(self, name, hostname=None, password=None, databases=None): @@ -122,23 +122,25 @@ class UsersTest(TestCase): return val key = 'key' - body = Mock() - body.get = Mock(return_value=[{'href': 'http://test.net/test_file', - 'rel': 'next'}]) - body.__getitem__ = Mock(return_value=["test-value"]) + body = mock.Mock() + body.get = mock.Mock( + return_value=[{'href': 'http://test.net/test_file', + 'rel': 'next'}] + ) + body.__getitem__ = mock.Mock(return_value=["test-value"]) - resp = Mock() + resp = mock.Mock() resp.status_code = 200 - self.users.resource_class = Mock(side_effect=side_effect_func) - self.users.api.client.get = Mock(return_value=(resp, body)) + self.users.resource_class = mock.Mock(side_effect=side_effect_func) + self.users.api.client.get = mock.Mock(return_value=(resp, body)) self.assertEqual(["test-value"], self.users._list('url', key).items) - self.users.api.client.get = Mock(return_value=(resp, None)) + self.users.api.client.get = mock.Mock(return_value=(resp, None)) self.assertRaises(Exception, self.users._list, 'url', None) def test_list(self): def side_effect_func(path, user, limit, marker): return path - self.users._list = Mock(side_effect=side_effect_func) + self.users._list = mock.Mock(side_effect=side_effect_func) self.assertEqual('/instances/instance1/users', self.users.list(1)) diff --git a/troveclient/tests/test_utils.py b/troveclient/tests/test_utils.py index 3cb180f9..462be605 100644 --- a/troveclient/tests/test_utils.py +++ b/troveclient/tests/test_utils.py @@ -19,11 +19,11 @@ import os import six -from testtools import TestCase +import testtools from troveclient import utils -class UtilsTest(TestCase): +class UtilsTest(testtools.TestCase): def test_add_hookable_mixin(self): def func(): diff --git a/troveclient/v1/accounts.py b/troveclient/v1/accounts.py index 7d9bf07f..b0a606a4 100644 --- a/troveclient/v1/accounts.py +++ b/troveclient/v1/accounts.py @@ -17,7 +17,7 @@ # under the License. from troveclient import base -from troveclient.common import check_for_exceptions +from troveclient import common class Account(base.Resource): @@ -46,7 +46,7 @@ class Accounts(base.ManagerWithFind): url = "/mgmt/accounts" resp, body = self.api.client.get(url) - check_for_exceptions(resp, body) + common.check_for_exceptions(resp, body) if not body: raise Exception("Call to " + url + " did not return a body.") return base.Resource(self, body) diff --git a/troveclient/v1/client.py b/troveclient/v1/client.py index 18ddb887..c6eb5c7e 100644 --- a/troveclient/v1/client.py +++ b/troveclient/v1/client.py @@ -16,18 +16,16 @@ # License for the specific language governing permissions and limitations # under the License. -from troveclient import client -from troveclient.v1.databases import Databases -from troveclient.v1.flavors import Flavors -from troveclient.v1.limits import Limits -from troveclient.v1.users import Users -from troveclient.v1.root import Root -from troveclient.v1.backups import Backups -from troveclient.v1.security_groups import SecurityGroups -from troveclient.v1.security_groups import SecurityGroupRules -from troveclient.v1.datastores import Datastores -from troveclient.v1.datastores import DatastoreVersions -from troveclient.v1.instances import Instances +from troveclient import client as trove_client +from troveclient.v1 import backups +from troveclient.v1 import databases +from troveclient.v1 import datastores +from troveclient.v1 import flavors +from troveclient.v1 import instances +from troveclient.v1 import limits +from troveclient.v1 import root +from troveclient.v1 import security_groups +from troveclient.v1 import users class Client(object): @@ -56,17 +54,17 @@ class Client(object): # self.limits = limits.LimitsManager(self) # extensions - self.flavors = Flavors(self) - self.users = Users(self) - self.databases = Databases(self) - self.backups = Backups(self) - self.instances = Instances(self) - self.limits = Limits(self) - self.root = Root(self) - self.security_group_rules = SecurityGroupRules(self) - self.security_groups = SecurityGroups(self) - self.datastores = Datastores(self) - self.datastore_versions = DatastoreVersions(self) + self.flavors = flavors.Flavors(self) + self.users = users.Users(self) + self.databases = databases.Databases(self) + self.backups = backups.Backups(self) + self.instances = instances.Instances(self) + self.limits = limits.Limits(self) + self.root = root.Root(self) + self.security_group_rules = security_groups.SecurityGroupRules(self) + self.security_groups = security_groups.SecurityGroups(self) + self.datastores = datastores.Datastores(self) + self.datastore_versions = datastores.DatastoreVersions(self) #self.hosts = Hosts(self) #self.quota = Quotas(self) @@ -84,7 +82,7 @@ class Client(object): setattr(self, extension.name, extension.manager_class(self)) - self.client = client.HTTPClient( + self.client = trove_client.client.HTTPClient( username, password, project_id, diff --git a/troveclient/v1/databases.py b/troveclient/v1/databases.py index 3674c452..af1688ca 100644 --- a/troveclient/v1/databases.py +++ b/troveclient/v1/databases.py @@ -17,9 +17,7 @@ # under the License. from troveclient import base -from troveclient.common import check_for_exceptions -from troveclient.common import limit_url -from troveclient.common import Paginated +from troveclient import common from troveclient.openstack.common.py3kcompat import urlutils @@ -46,17 +44,17 @@ class Databases(base.ManagerWithFind): body = {"databases": databases} url = "/instances/%s/databases" % instance_id resp, body = self.api.client.post(url, body=body) - check_for_exceptions(resp, body) + common.check_for_exceptions(resp, body) def delete(self, instance_id, dbname): """Delete an existing database in the specified instance""" url = "/instances/%s/databases/%s" % (instance_id, dbname) resp, body = self.api.client.delete(url) - check_for_exceptions(resp, body) + common.check_for_exceptions(resp, body) def _list(self, url, response_key, limit=None, marker=None): - resp, body = self.api.client.get(limit_url(url, limit, marker)) - check_for_exceptions(resp, body) + resp, body = self.api.client.get(common.limit_url(url, limit, marker)) + common.check_for_exceptions(resp, body) if not body: raise Exception("Call to " + url + " did not return a body.") @@ -70,7 +68,9 @@ class Databases(base.ManagerWithFind): next_marker = query_dict.get('marker', None) databases = body[response_key] databases = [self.resource_class(self, res) for res in databases] - return Paginated(databases, next_marker=next_marker, links=links) + return common.Paginated( + databases, next_marker=next_marker, links=links + ) def list(self, instance, limit=None, marker=None): """ diff --git a/troveclient/v1/hosts.py b/troveclient/v1/hosts.py index 8a3e5832..98897993 100644 --- a/troveclient/v1/hosts.py +++ b/troveclient/v1/hosts.py @@ -17,8 +17,7 @@ # under the License. from troveclient import base - -from troveclient.common import check_for_exceptions +from troveclient import common class Host(base.Resource): @@ -47,7 +46,7 @@ class Hosts(base.ManagerWithFind): """ url = "/mgmt/hosts/%s/instances/action" % host_id resp, body = self.api.client.post(url, body=body) - check_for_exceptions(resp, body) + common.check_for_exceptions(resp, body) def update_all(self, host_id): """ diff --git a/troveclient/v1/instances.py b/troveclient/v1/instances.py index 035f9576..033f03b8 100644 --- a/troveclient/v1/instances.py +++ b/troveclient/v1/instances.py @@ -18,10 +18,7 @@ # under the License. from troveclient import base - -from troveclient.common import check_for_exceptions -from troveclient.common import limit_url -from troveclient.common import Paginated +from troveclient import common from troveclient.openstack.common.apiclient import exceptions from troveclient.openstack.common.py3kcompat import urlutils @@ -89,7 +86,7 @@ class Instances(base.ManagerWithFind): return self._create("/instances", body, "instance") def _list(self, url, response_key, limit=None, marker=None): - resp, body = self.api.client.get(limit_url(url, limit, marker)) + resp, body = self.api.client.get(common.limit_url(url, limit, marker)) if not body: raise Exception("Call to " + url + " did not return a body.") links = body.get('links', []) @@ -102,7 +99,9 @@ class Instances(base.ManagerWithFind): next_marker = query_dict.get('marker', None) instances = body[response_key] instances = [self.resource_class(self, res) for res in instances] - return Paginated(instances, next_marker=next_marker, links=links) + return common.Paginated( + instances, next_marker=next_marker, links=links + ) def list(self, limit=None, marker=None): """ @@ -147,7 +146,7 @@ class Instances(base.ManagerWithFind): """ url = "/instances/%s/action" % instance_id resp, body = self.api.client.post(url, body=body) - check_for_exceptions(resp, body) + common.check_for_exceptions(resp, body) if body: return self.resource_class(self, body, loaded=True) return body diff --git a/troveclient/v1/management.py b/troveclient/v1/management.py index 32cf5a1a..2831abb8 100644 --- a/troveclient/v1/management.py +++ b/troveclient/v1/management.py @@ -17,13 +17,10 @@ # under the License. from troveclient import base - -from troveclient.common import check_for_exceptions -from troveclient.common import limit_url -from troveclient.common import Paginated +from troveclient import common from troveclient.openstack.common.py3kcompat import urlutils -from troveclient.v1.instances import Instance -from troveclient.v1.flavors import Flavor +from troveclient.v1 import instances +from troveclient.v1 import flavors class RootHistory(base.Resource): @@ -36,14 +33,14 @@ class Management(base.ManagerWithFind): """ Manage :class:`Instances` resources. """ - resource_class = Instance + resource_class = instances.Instance # Appease the abc gods def list(self): pass def _list(self, url, response_key, limit=None, marker=None): - resp, body = self.api.client.get(limit_url(url, limit, marker)) + resp, body = self.api.client.get(common.limit_url(url, limit, marker)) if not body: raise Exception("Call to " + url + " did not return a body.") links = body.get('links', []) @@ -56,7 +53,9 @@ class Management(base.ManagerWithFind): next_marker = query_dict.get('marker', None) instances = body[response_key] instances = [self.resource_class(self, res) for res in instances] - return Paginated(instances, next_marker=next_marker, links=links) + return common.Paginated( + instances, next_marker=next_marker, links=links + ) def show(self, instance): """ @@ -102,7 +101,7 @@ class Management(base.ManagerWithFind): """ url = "/mgmt/instances/%s/action" % instance_id resp, body = self.api.client.post(url, body=body) - check_for_exceptions(resp, body) + common.check_for_exceptions(resp, body) def stop(self, instance_id): body = {'stop': {}} @@ -148,7 +147,7 @@ class MgmtFlavors(base.ManagerWithFind): """ Manage :class:`Flavor` resources. """ - resource_class = Flavor + resource_class = flavors.Flavor def __repr__(self): return "" % id(self) diff --git a/troveclient/v1/quota.py b/troveclient/v1/quota.py index b076e64a..46c10300 100644 --- a/troveclient/v1/quota.py +++ b/troveclient/v1/quota.py @@ -18,7 +18,7 @@ # under the License. from troveclient import base -from troveclient.common import check_for_exceptions +from troveclient import common class Quotas(base.ManagerWithFind): @@ -33,7 +33,7 @@ class Quotas(base.ManagerWithFind): url = "/mgmt/quotas/%s" % tenant_id resp, body = self.api.client.get(url) - check_for_exceptions(resp, body) + common.check_for_exceptions(resp, body) if not body: raise Exception("Call to " + url + " did not return a body.") if 'quotas' not in body: @@ -47,7 +47,7 @@ class Quotas(base.ManagerWithFind): url = "/mgmt/quotas/%s" % id body = {"quotas": quotas} resp, body = self.api.client.put(url, body=body) - check_for_exceptions(resp, body) + common.check_for_exceptions(resp, body) if not body: raise Exception("Call to " + url + " did not return a body.") if 'quotas' not in body: diff --git a/troveclient/v1/root.py b/troveclient/v1/root.py index 8e66bed2..4ceaa92c 100644 --- a/troveclient/v1/root.py +++ b/troveclient/v1/root.py @@ -17,9 +17,8 @@ # under the License. from troveclient import base - from troveclient.v1 import users -from troveclient.common import check_for_exceptions +from troveclient import common class Root(base.ManagerWithFind): @@ -35,14 +34,14 @@ class Root(base.ManagerWithFind): sepcified db instance """ resp, body = self.api.client.post(self.url % instance_id) - check_for_exceptions(resp, body) + common.check_for_exceptions(resp, body) return body['user']['name'], body['user']['password'] def is_root_enabled(self, instance_id): """ Return True if root is enabled for the instance; False otherwise""" resp, body = self.api.client.get(self.url % instance_id) - check_for_exceptions(resp, body) + common.check_for_exceptions(resp, body) return self.resource_class(self, body, loaded=True) # Appease the abc gods diff --git a/troveclient/v1/security_groups.py b/troveclient/v1/security_groups.py index cbfb9cb6..6a9e1c63 100644 --- a/troveclient/v1/security_groups.py +++ b/troveclient/v1/security_groups.py @@ -18,9 +18,7 @@ # under the License. from troveclient import base - -from troveclient.common import limit_url -from troveclient.common import Paginated +from troveclient import common from troveclient.openstack.common.apiclient import exceptions from troveclient.openstack.common.py3kcompat import urlutils @@ -40,7 +38,7 @@ class SecurityGroups(base.ManagerWithFind): resource_class = SecurityGroup def _list(self, url, response_key, limit=None, marker=None): - resp, body = self.api.client.get(limit_url(url, limit, marker)) + resp, body = self.api.client.get(common.limit_url(url, limit, marker)) if not body: raise Exception("Call to " + url + " did not return a body.") links = body.get('links', []) @@ -53,7 +51,9 @@ class SecurityGroups(base.ManagerWithFind): next_marker = query_dict.get('marker', None) instances = body[response_key] instances = [self.resource_class(self, res) for res in instances] - return Paginated(instances, next_marker=next_marker, links=links) + return common.Paginated( + instances, next_marker=next_marker, links=links + ) def list(self, limit=None, marker=None): """ diff --git a/troveclient/v1/users.py b/troveclient/v1/users.py index a6960a52..c7ed5b53 100644 --- a/troveclient/v1/users.py +++ b/troveclient/v1/users.py @@ -18,10 +18,7 @@ from troveclient import base from troveclient.v1 import databases -from troveclient.common import check_for_exceptions -from troveclient.common import limit_url -from troveclient.common import Paginated -from troveclient.common import quote_user_host +from troveclient import common from troveclient.openstack.common.py3kcompat import urlutils @@ -46,18 +43,18 @@ class Users(base.ManagerWithFind): body = {"users": users} url = "/instances/%s/users" % instance_id resp, body = self.api.client.post(url, body=body) - check_for_exceptions(resp, body) + common.check_for_exceptions(resp, body) def delete(self, instance_id, username, hostname=None): """Delete an existing user in the specified instance""" - user = quote_user_host(username, hostname) + user = common.quote_user_host(username, hostname) url = "/instances/%s/users/%s" % (instance_id, user) resp, body = self.api.client.delete(url) - check_for_exceptions(resp, body) + common.check_for_exceptions(resp, body) def _list(self, url, response_key, limit=None, marker=None): - resp, body = self.api.client.get(limit_url(url, limit, marker)) - check_for_exceptions(resp, body) + resp, body = self.api.client.get(common.limit_url(url, limit, marker)) + common.check_for_exceptions(resp, body) if not body: raise Exception("Call to " + url + " did not return a body.") @@ -70,7 +67,9 @@ class Users(base.ManagerWithFind): query_dict = dict(urlutils.parse_qsl(parsed_url.query)) next_marker = query_dict.get('marker', None) users = [self.resource_class(self, res) for res in body[response_key]] - return Paginated(users, next_marker=next_marker, links=links) + return common.Paginated( + users, next_marker=next_marker, links=links + ) def list(self, instance, limit=None, marker=None): """ @@ -87,7 +86,7 @@ class Users(base.ManagerWithFind): :rtype: :class:`User`. """ - user = quote_user_host(username, hostname) + user = common.quote_user_host(username, hostname) url = "/instances/%s/users/%s" % (instance_id, user) return self._get(url, "user") @@ -99,7 +98,7 @@ class Users(base.ManagerWithFind): :rtype: :class:`User`. """ instance_id = base.getid(instance) - user = quote_user_host(username, hostname) + user = common.quote_user_host(username, hostname) user_dict = {} if not newuserattr: newuserattr = {} @@ -107,16 +106,16 @@ class Users(base.ManagerWithFind): user_dict['user'] = newuserattr url = "/instances/%s/users/%s" % (instance_id, user) resp, body = self.api.client.put(url, body=user_dict) - check_for_exceptions(resp, body) + common.check_for_exceptions(resp, body) def list_access(self, instance, username, hostname=None): """Show all databases the given user has access to. """ instance_id = base.getid(instance) - user = quote_user_host(username, hostname) + user = common.quote_user_host(username, hostname) url = "/instances/%(instance_id)s/users/%(user)s/databases" local_vars = locals() resp, body = self.api.client.get(url % local_vars) - check_for_exceptions(resp, body) + common.check_for_exceptions(resp, body) if not body: raise Exception("Call to %s did not return to a body" % url) return [databases.Database(self, db) for db in body['databases']] @@ -124,22 +123,22 @@ class Users(base.ManagerWithFind): def grant(self, instance, username, databases, hostname=None): """Allow an existing user permissions to access a database.""" instance_id = base.getid(instance) - user = quote_user_host(username, hostname) + user = common.quote_user_host(username, hostname) url = "/instances/%(instance_id)s/users/%(user)s/databases" dbs = {'databases': [{'name': db} for db in databases]} local_vars = locals() resp, body = self.api.client.put(url % local_vars, body=dbs) - check_for_exceptions(resp, body) + common.check_for_exceptions(resp, body) def revoke(self, instance, username, database, hostname=None): """Revoke from an existing user access permissions to a database.""" instance_id = base.getid(instance) - user = quote_user_host(username, hostname) + user = common.quote_user_host(username, hostname) url = ("/instances/%(instance_id)s/users/%(user)s/" "databases/%(database)s") local_vars = locals() resp, body = self.api.client.delete(url % local_vars) - check_for_exceptions(resp, body) + common.check_for_exceptions(resp, body) def change_passwords(self, instance, users): """Change the password for one or more users.""" @@ -147,4 +146,4 @@ class Users(base.ManagerWithFind): user_dict = {"users": users} url = "/instances/%s/users" % instance_id resp, body = self.api.client.put(url, body=user_dict) - check_for_exceptions(resp, body) + common.check_for_exceptions(resp, body)