Ignore fewer PEP8/flake8 rules

Reasons:
- code should be pythonicaly clean,
  that is why number of ignored rules should reduced

Changes:
- E125, F811, H102, H103, F201, H23,
  H302, F841, H301, H702, H703 rules are now enabled

Change-Id: Ibf4025162244d3c2f1278b49a76ec1527a729042
This commit is contained in:
Denis Makogon
2013-12-10 18:49:20 +02:00
parent 7499015e51
commit 69c865695f
34 changed files with 547 additions and 480 deletions

View File

@@ -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 -*- # -*- coding: utf-8 -*-
extensions = [ extensions = [

View File

@@ -36,6 +36,7 @@ commands = python setup.py testr --coverage --testr-args='{posargs}'
sphinx-build -b html {toxinidir}/docs/source {envtmpdir}/html sphinx-build -b html {toxinidir}/docs/source {envtmpdir}/html
[flake8] [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 show-source = True
exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,build exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,build,

View File

@@ -36,9 +36,9 @@ except ImportError:
import urllib.parse as urlparse import urllib.parse as urlparse
try: try:
from eventlet import sleep import eventlet as sleep_lib
except ImportError: except ImportError:
from time import sleep import time as sleep_lib
try: try:
import json import json
@@ -201,7 +201,7 @@ class HTTPClient(object):
self._logger.debug( self._logger.debug(
"Failed attempt(%s of %s), retrying in %s seconds" % "Failed attempt(%s of %s), retrying in %s seconds" %
(attempts, self.retries, backoff)) (attempts, self.retries, backoff))
sleep(backoff) sleep_lib.sleep(backoff)
backoff *= 2 backoff *= 2
def get(self, url, **kwargs): def get(self, url, **kwargs):

View File

@@ -13,7 +13,7 @@
# under the License. # under the License.
from __future__ import print_function from __future__ import print_function
from six import string_types import six
from troveclient.compat import exceptions from troveclient.compat import exceptions
@@ -21,7 +21,7 @@ def get_authenticator_cls(cls_or_name):
"""Factory method to retrieve Authenticator class.""" """Factory method to retrieve Authenticator class."""
if isinstance(cls_or_name, type): if isinstance(cls_or_name, type):
return cls_or_name return cls_or_name
elif isinstance(cls_or_name, string_types): elif isinstance(cls_or_name, six.string_types):
if cls_or_name == "keystone": if cls_or_name == "keystone":
return KeyStoneV2Authenticator return KeyStoneV2Authenticator
elif cls_or_name == "rax": elif cls_or_name == "rax":

View File

@@ -64,7 +64,7 @@ class InstanceCommands(common.AuthedCommandsBase):
def delete(self): def delete(self):
"""Delete the specified instance""" """Delete the specified instance"""
self._require('id') self._require('id')
print self.dbaas.instances.delete(self.id) print(self.dbaas.instances.delete(self.id))
def get(self): def get(self):
"""Get details for the specified instance""" """Get details for the specified instance"""
@@ -126,12 +126,12 @@ class DatabaseCommands(common.AuthedCommandsBase):
"""Create a database""" """Create a database"""
self._require('id', 'name') self._require('id', 'name')
databases = [{'name': self.name}] databases = [{'name': self.name}]
print self.dbaas.databases.create(self.id, databases) print(self.dbaas.databases.create(self.id, databases))
def delete(self): def delete(self):
"""Delete a database""" """Delete a database"""
self._require('id', 'name') 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): def list(self):
"""List the databases""" """List the databases"""
@@ -235,9 +235,9 @@ class RootCommands(common.AuthedCommandsBase):
self._require('id') self._require('id')
try: try:
user, password = self.dbaas.root.create(self.id) user, password = self.dbaas.root.create(self.id)
print "User:\t\t%s\nPassword:\t%s" % (user, password) print("User:\t\t%s\nPassword:\t%s" % (user, password))
except: except Exception:
print sys.exc_info()[1] print(sys.exc_info()[1])
def enabled(self): def enabled(self):
"""Check the instance for root access""" """Check the instance for root access"""
@@ -387,7 +387,7 @@ def main():
except Exception as ex: except Exception as ex:
if options.debug: if options.debug:
raise raise
print ex print(ex)
else: else:
getattr(command_object, action)() getattr(command_object, action)()
else: else:

View File

@@ -146,7 +146,7 @@ class TroveHTTPClient(httplib2.Http):
try: try:
req_body = json.dumps(json.loads(kwargs['body']), req_body = json.dumps(json.loads(kwargs['body']),
sort_keys=True, indent=4) sort_keys=True, indent=4)
except: except Exception:
req_body = kwargs['body'] req_body = kwargs['body']
_logger.debug("BODY: %s\n" % (req_body)) _logger.debug("BODY: %s\n" % (req_body))
else: else:
@@ -154,7 +154,7 @@ class TroveHTTPClient(httplib2.Http):
try: try:
resp_body = json.dumps(json.loads(body), sort_keys=True, indent=4) resp_body = json.dumps(json.loads(body), sort_keys=True, indent=4)
except: except Exception:
resp_body = body resp_body = body
_logger.debug("RESPONSE HEADERS: %s" % resp) _logger.debug("RESPONSE HEADERS: %s" % resp)
_logger.debug("RESPONSE BODY : %s" % resp_body) _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. # re-authenticate and try again. If it still fails, bail.
try: try:
return request() return request()
except exceptions.Unauthorized as ex: except exceptions.Unauthorized:
self.authenticate() self.authenticate()
return request() return request()
@@ -296,26 +296,23 @@ class Dbaas(object):
service_type='database', service_name=None, service_type='database', service_name=None,
service_url=None, insecure=False, auth_strategy='keystone', service_url=None, insecure=False, auth_strategy='keystone',
region_name=None, client_cls=TroveHTTPClient): region_name=None, client_cls=TroveHTTPClient):
from troveclient.compat.versions import Versions
from troveclient.v1.databases import Databases from troveclient.compat import versions
from troveclient.v1.flavors import Flavors from troveclient.v1 import accounts
from troveclient.v1.instances import Instances from troveclient.v1 import backups
from troveclient.v1.limits import Limits from troveclient.v1 import databases
from troveclient.v1.users import Users from troveclient.v1 import datastores
from troveclient.v1.root import Root from troveclient.v1 import diagnostics
from troveclient.v1.hosts import Hosts from troveclient.v1 import flavors
from troveclient.v1.quota import Quotas from troveclient.v1 import hosts
from troveclient.v1.backups import Backups from troveclient.v1 import instances
from troveclient.v1.security_groups import SecurityGroups from troveclient.v1 import limits
from troveclient.v1.security_groups import SecurityGroupRules from troveclient.v1 import management
from troveclient.v1.datastores import Datastores from troveclient.v1 import quota
from troveclient.v1.datastores import DatastoreVersions from troveclient.v1 import root
from troveclient.v1.storage import StorageInfo from troveclient.v1 import security_groups
from troveclient.v1.management import Management from troveclient.v1 import storage
from troveclient.v1.management import MgmtFlavors from troveclient.v1 import users
from troveclient.v1.accounts import Accounts
from troveclient.v1.diagnostics import DiagnosticsInterrogator
from troveclient.v1.diagnostics import HwInfoInterrogator
self.client = client_cls(username, api_key, tenant, auth_url, self.client = client_cls(username, api_key, tenant, auth_url,
service_type=service_type, service_type=service_type,
@@ -324,26 +321,26 @@ class Dbaas(object):
insecure=insecure, insecure=insecure,
auth_strategy=auth_strategy, auth_strategy=auth_strategy,
region_name=region_name) region_name=region_name)
self.versions = Versions(self) self.versions = versions.Versions(self)
self.databases = Databases(self) self.databases = databases.Databases(self)
self.flavors = Flavors(self) self.flavors = flavors.Flavors(self)
self.instances = Instances(self) self.instances = instances.Instances(self)
self.limits = Limits(self) self.limits = limits.Limits(self)
self.users = Users(self) self.users = users.Users(self)
self.root = Root(self) self.root = root.Root(self)
self.hosts = Hosts(self) self.hosts = hosts.Hosts(self)
self.quota = Quotas(self) self.quota = quota.Quotas(self)
self.backups = Backups(self) self.backups = backups.Backups(self)
self.security_groups = SecurityGroups(self) self.security_groups = security_groups.SecurityGroups(self)
self.security_group_rules = SecurityGroupRules(self) self.security_group_rules = security_groups.SecurityGroupRules(self)
self.datastores = Datastores(self) self.datastores = datastores.Datastores(self)
self.datastore_versions = DatastoreVersions(self) self.datastore_versions = datastores.DatastoreVersions(self)
self.storage = StorageInfo(self) self.storage = storage.StorageInfo(self)
self.management = Management(self) self.management = management.Management(self)
self.mgmt_flavor = MgmtFlavors(self) self.mgmt_flavor = management.MgmtFlavors(self)
self.accounts = Accounts(self) self.accounts = accounts.Accounts(self)
self.diagnostics = DiagnosticsInterrogator(self) self.diagnostics = diagnostics.DiagnosticsInterrogator(self)
self.hwinfo = HwInfoInterrogator(self) self.hwinfo = diagnostics.HwInfoInterrogator(self)
class Mgmt(object): class Mgmt(object):
def __init__(self, dbaas): def __init__(self, dbaas):

View File

@@ -21,7 +21,7 @@ import six
import sys import sys
from troveclient.compat import client from troveclient.compat import client
from troveclient.compat.xml import TroveXmlClient from troveclient.compat import xml
from troveclient.compat import exceptions from troveclient.compat import exceptions
from troveclient.openstack.common.py3kcompat import urlutils from troveclient.openstack.common.py3kcompat import urlutils
@@ -44,7 +44,7 @@ def check_for_exceptions(resp, body):
def print_actions(cmd, actions): def print_actions(cmd, actions):
"""Print help for the command with list of options and description""" """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): for k, v in six.iteritems(actions):
print("\t%-20s%s" % (k, v.__doc__)) print("\t%-20s%s" % (k, v.__doc__))
sys.exit(2) sys.exit(2)
@@ -119,7 +119,7 @@ class CliOptions(object):
return pickle.load(token) return pickle.load(token)
except IOError: except IOError:
pass # File probably not found. pass # File probably not found.
except: except Exception:
print("ERROR: Token file found at %s was corrupt." % cls.APITOKEN) print("ERROR: Token file found at %s was corrupt." % cls.APITOKEN)
return cls.default() return cls.default()
@@ -217,7 +217,7 @@ class CommandsBase(object):
"""Creates the all important client object.""" """Creates the all important client object."""
try: try:
if self.xml: if self.xml:
client_cls = TroveXmlClient client_cls = xml.TroveXmlClient
else: else:
client_cls = client.TroveHTTPClient client_cls = client.TroveHTTPClient
if self.verbose: if self.verbose:
@@ -232,7 +232,7 @@ class CommandsBase(object):
service_url=self.service_url, service_url=self.service_url,
insecure=self.insecure, insecure=self.insecure,
client_cls=client_cls) client_cls=client_cls)
except: except Exception:
if self.debug: if self.debug:
raise raise
print(sys.exc_info()[1]) print(sys.exc_info()[1])
@@ -241,7 +241,7 @@ class CommandsBase(object):
if not self.debug: if not self.debug:
try: try:
return func(*args, **kwargs) return func(*args, **kwargs)
except: except Exception:
print(sys.exc_info()[1]) print(sys.exc_info()[1])
return None return None
else: else:
@@ -328,7 +328,7 @@ class CommandsBase(object):
print(self._dumps((link))) print(self._dumps((link)))
else: else:
print("OK") print("OK")
except: except Exception:
if self.debug: if self.debug:
raise raise
print(sys.exc_info()[1]) print(sys.exc_info()[1])
@@ -366,7 +366,7 @@ class Auth(CommandsBase):
print("Token aquired! Saving to %s..." % CliOptions.APITOKEN) print("Token aquired! Saving to %s..." % CliOptions.APITOKEN)
print(" service_url = %s" % self.service_url) print(" service_url = %s" % self.service_url)
print(" token = %s" % self.token) print(" token = %s" % self.token)
except: except Exception:
if self.debug: if self.debug:
raise raise
print(sys.exc_info()[1]) print(sys.exc_info()[1])

View File

@@ -39,7 +39,7 @@ oparser = None
def _pretty_print(info): 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): class HostCommands(common.AuthedCommandsBase):
@@ -260,7 +260,7 @@ def main():
except Exception as ex: except Exception as ex:
if options.debug: if options.debug:
raise raise
print ex print(ex)
else: else:
common.print_actions(cmd, actions) common.print_actions(cmd, actions)
else: else:

View File

@@ -17,9 +17,9 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from testtools import TestCase import testtools
from troveclient.compat import auth from troveclient.compat import auth
from mock import Mock import mock
from troveclient.compat import exceptions from troveclient.compat import exceptions
@@ -39,7 +39,7 @@ def check_url_none(test_case, auth_class):
pass pass
class AuthenticatorTest(TestCase): class AuthenticatorTest(testtools.TestCase):
def setUp(self): def setUp(self):
super(AuthenticatorTest, self).setUp() super(AuthenticatorTest, self).setUp()
@@ -72,58 +72,62 @@ class AuthenticatorTest(TestCase):
self.assertRaises(ValueError, auth.get_authenticator_cls, cls_or_name) self.assertRaises(ValueError, auth.get_authenticator_cls, cls_or_name)
def test__authenticate(self): def test__authenticate(self):
authObj = auth.Authenticator(Mock(), auth.KeyStoneV2Authenticator, authObj = auth.Authenticator(mock.Mock(), auth.KeyStoneV2Authenticator,
Mock(), Mock(), Mock(), Mock()) mock.Mock(), mock.Mock(),
mock.Mock(), mock.Mock())
# test response code 200 # test response code 200
resp = Mock() resp = mock.Mock()
resp.status = 200 resp.status = 200
body = "test_body" body = "test_body"
auth.ServiceCatalog._load = Mock(return_value=1) auth.ServiceCatalog._load = mock.Mock(return_value=1)
authObj.client._time_request = Mock(return_value=(resp, body)) 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) self.assertEqual(body, sc.catalog)
# test AmbiguousEndpoints exception # test AmbiguousEndpoints exception
auth.ServiceCatalog.__init__ = \ auth.ServiceCatalog.__init__ = mock.Mock(
Mock(side_effect=exceptions.AmbiguousEndpoints) side_effect=exceptions.AmbiguousEndpoints
)
self.assertRaises(exceptions.AmbiguousEndpoints, self.assertRaises(exceptions.AmbiguousEndpoints,
authObj._authenticate, Mock(), Mock()) authObj._authenticate, mock.Mock(), mock.Mock())
# test handling KeyError and raising AuthorizationFailure exception # 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, self.assertRaises(exceptions.AuthorizationFailure,
authObj._authenticate, Mock(), Mock()) authObj._authenticate, mock.Mock(), mock.Mock())
# test EndpointNotFound exception # test EndpointNotFound exception
mock = Mock(side_effect=exceptions.EndpointNotFound) mock_obj = mock.Mock(side_effect=exceptions.EndpointNotFound)
auth.ServiceCatalog.__init__ = mock auth.ServiceCatalog.__init__ = mock_obj
self.assertRaises(exceptions.EndpointNotFound, self.assertRaises(exceptions.EndpointNotFound,
authObj._authenticate, Mock(), Mock()) authObj._authenticate, mock.Mock(), mock.Mock())
mock.side_effect = None mock_obj.side_effect = None
# test response code 305 # test response code 305
resp.__getitem__ = Mock(return_value='loc') resp.__getitem__ = mock.Mock(return_value='loc')
resp.status = 305 resp.status = 305
body = "test_body" 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) self.assertEqual('loc', l)
# test any response code other than 200 and 305 # test any response code other than 200 and 305
resp.status = 404 resp.status = 404
exceptions.from_response = Mock(side_effect=ValueError) exceptions.from_response = mock.Mock(side_effect=ValueError)
self.assertRaises(ValueError, authObj._authenticate, Mock(), Mock()) self.assertRaises(ValueError, authObj._authenticate,
mock.Mock(), mock.Mock())
def test_authenticate(self): def test_authenticate(self):
authObj = auth.Authenticator(Mock(), auth.KeyStoneV2Authenticator, authObj = auth.Authenticator(mock.Mock(), auth.KeyStoneV2Authenticator,
Mock(), Mock(), Mock(), Mock()) mock.Mock(), mock.Mock(),
mock.Mock(), mock.Mock())
self.assertRaises(NotImplementedError, authObj.authenticate) self.assertRaises(NotImplementedError, authObj.authenticate)
class KeyStoneV2AuthenticatorTest(TestCase): class KeyStoneV2AuthenticatorTest(testtools.TestCase):
def test_authenticate(self): def test_authenticate(self):
# url is None # url is None
@@ -139,9 +143,9 @@ class KeyStoneV2AuthenticatorTest(TestCase):
def side_effect_func(url): def side_effect_func(url):
return url return url
mock = Mock() mock_obj = mock.Mock()
mock.side_effect = side_effect_func mock_obj.side_effect = side_effect_func
authObj._v2_auth = mock authObj._v2_auth = mock_obj
r = authObj.authenticate() r = authObj.authenticate()
self.assertEqual(url, r) self.assertEqual(url, r)
@@ -158,10 +162,10 @@ class KeyStoneV2AuthenticatorTest(TestCase):
def side_effect_func(url, body): def side_effect_func(url, body):
return body return body
mock = Mock() mock_obj = mock.Mock()
mock.side_effect = side_effect_func mock_obj.side_effect = side_effect_func
authObj._authenticate = mock authObj._authenticate = mock_obj
body = authObj._v2_auth(Mock()) body = authObj._v2_auth(mock.Mock())
self.assertEqual(username, self.assertEqual(username,
body['auth']['passwordCredentials']['username']) body['auth']['passwordCredentials']['username'])
self.assertEqual(password, self.assertEqual(password,
@@ -169,7 +173,7 @@ class KeyStoneV2AuthenticatorTest(TestCase):
self.assertEqual(tenant, body['auth']['tenantName']) self.assertEqual(tenant, body['auth']['tenantName'])
class Auth1_1Test(TestCase): class Auth1_1Test(testtools.TestCase):
def test_authenticate(self): def test_authenticate(self):
# handle when url is None # handle when url is None
@@ -187,9 +191,9 @@ class Auth1_1Test(TestCase):
def side_effect_func(auth_url, body, root_key): def side_effect_func(auth_url, body, root_key):
return auth_url, body, root_key return auth_url, body, root_key
mock = Mock() mock_obj = mock.Mock()
mock.side_effect = side_effect_func mock_obj.side_effect = side_effect_func
authObj._authenticate = mock authObj._authenticate = mock_obj
auth_url, body, root_key = authObj.authenticate() auth_url, body, root_key = authObj.authenticate()
self.assertEqual(username, body['credentials']['username']) self.assertEqual(username, body['credentials']['username'])
@@ -198,7 +202,7 @@ class Auth1_1Test(TestCase):
self.assertEqual('auth', root_key) self.assertEqual('auth', root_key)
class RaxAuthenticatorTest(TestCase): class RaxAuthenticatorTest(testtools.TestCase):
def test_authenticate(self): def test_authenticate(self):
# url is None # url is None
@@ -214,9 +218,9 @@ class RaxAuthenticatorTest(TestCase):
def side_effect_func(url): def side_effect_func(url):
return url return url
mock = Mock() mock_obj = mock.Mock()
mock.side_effect = side_effect_func mock_obj.side_effect = side_effect_func
authObj._rax_auth = mock authObj._rax_auth = mock_obj
r = authObj.authenticate() r = authObj.authenticate()
self.assertEqual(url, r) self.assertEqual(url, r)
@@ -232,10 +236,10 @@ class RaxAuthenticatorTest(TestCase):
def side_effect_func(url, body): def side_effect_func(url, body):
return body return body
mock = Mock() mock_obj = mock.Mock()
mock.side_effect = side_effect_func mock_obj.side_effect = side_effect_func
authObj._authenticate = mock authObj._authenticate = mock_obj
body = authObj._rax_auth(Mock()) body = authObj._rax_auth(mock.Mock())
v = body['auth']['RAX-KSKEY:apiKeyCredentials']['username'] v = body['auth']['RAX-KSKEY:apiKeyCredentials']['username']
self.assertEqual(username, v) self.assertEqual(username, v)
@@ -247,7 +251,7 @@ class RaxAuthenticatorTest(TestCase):
self.assertEqual(tenant, v) self.assertEqual(tenant, v)
class FakeAuthTest(TestCase): class FakeAuthTest(testtools.TestCase):
def test_authenticate(self): def test_authenticate(self):
tenant = "tenant" tenant = "tenant"
@@ -262,13 +266,13 @@ class FakeAuthTest(TestCase):
self.assertEqual(tenant, fc.get_token()) self.assertEqual(tenant, fc.get_token())
class ServiceCatalogTest(TestCase): class ServiceCatalogTest(testtools.TestCase):
def setUp(self): def setUp(self):
super(ServiceCatalogTest, self).setUp() super(ServiceCatalogTest, self).setUp()
self.orig_url_for = auth.ServiceCatalog._url_for self.orig_url_for = auth.ServiceCatalog._url_for
self.orig__init__ = auth.ServiceCatalog.__init__ 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" self.test_url = "http://localhost:1234/test"
def tearDown(self): def tearDown(self):
@@ -278,7 +282,7 @@ class ServiceCatalogTest(TestCase):
def test__load(self): def test__load(self):
url = "random_url" 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 # when service_url is None
scObj = auth.ServiceCatalog() scObj = auth.ServiceCatalog()
@@ -347,10 +351,10 @@ class ServiceCatalogTest(TestCase):
return "test_attr_value" return "test_attr_value"
# simulating dict # simulating dict
endpoint = Mock() endpoint = mock.Mock()
mock = Mock() mock_obj = mock.Mock()
mock.side_effect = side_effect_func_ep mock_obj.side_effect = side_effect_func_ep
endpoint.__getitem__ = mock endpoint.__getitem__ = mock_obj
scObj.catalog['endpoints'].append(endpoint) scObj.catalog['endpoints'].append(endpoint)
# not-empty list but not matching endpoint # not-empty list but not matching endpoint
@@ -370,7 +374,7 @@ class ServiceCatalogTest(TestCase):
scObj.catalog[scObj.root_key]['serviceCatalog'] = list() scObj.catalog[scObj.root_key]['serviceCatalog'] = list()
endpoint = scObj.catalog['endpoints'][0] 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", r_url = scObj._url_for(attr="test_attr",
filter_value="test_attr_value") filter_value="test_attr_value")
self.assertEqual(self.test_url, r_url) self.assertEqual(self.test_url, r_url)
@@ -386,13 +390,13 @@ class ServiceCatalogTest(TestCase):
return "test_service_name" return "test_service_name"
return None return None
mock1 = Mock() mock1 = mock.Mock()
mock1.side_effect = side_effect_func_service mock1.side_effect = side_effect_func_service
service1 = Mock() service1 = mock.Mock()
service1.get = mock1 service1.get = mock1
endpoint2 = {"test_attr": "test_attr_value"} 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] scObj.catalog[scObj.root_key]['serviceCatalog'] = [service1]
self.assertRaises(exceptions.AmbiguousEndpoints, scObj._url_for, self.assertRaises(exceptions.AmbiguousEndpoints, scObj._url_for,
attr="test_attr", filter_value="test_attr_value") attr="test_attr", filter_value="test_attr_value")

View File

@@ -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 sys
import optparse import optparse
import json import json
import collections import collections
from testtools import TestCase import testtools
from mock import Mock import mock
from troveclient.compat import common from troveclient.compat import common
@@ -13,12 +28,12 @@ from troveclient.compat import common
""" """
class CommonTest(TestCase): class CommonTest(testtools.TestCase):
def setUp(self): def setUp(self):
super(CommonTest, self).setUp() super(CommonTest, self).setUp()
self.orig_sys_exit = sys.exit self.orig_sys_exit = sys.exit
sys.exit = Mock(return_value=None) sys.exit = mock.Mock(return_value=None)
def tearDown(self): def tearDown(self):
super(CommonTest, self).tearDown() super(CommonTest, self).tearDown()
@@ -38,14 +53,14 @@ class CommonTest(TestCase):
def test_check_for_exceptions(self): def test_check_for_exceptions(self):
status = [400, 422, 500] status = [400, 422, 500]
for s in status: for s in status:
resp = Mock() resp = mock.Mock()
#compat still uses status #compat still uses status
resp.status = s resp.status = s
self.assertRaises(Exception, self.assertRaises(Exception,
common.check_for_exceptions, resp, "body") common.check_for_exceptions, resp, "body")
# a no-exception case # a no-exception case
resp = Mock() resp = mock.Mock()
resp.status_code = 200 resp.status_code = 200
common.check_for_exceptions(resp, "body") common.check_for_exceptions(resp, "body")
@@ -73,7 +88,7 @@ class CommonTest(TestCase):
common.limit_url(url, limit=limit, marker=marker)) common.limit_url(url, limit=limit, marker=marker))
class CliOptionsTest(TestCase): class CliOptionsTest(testtools.TestCase):
def check_default_options(self, co): def check_default_options(self, co):
self.assertEqual(None, co.username) self.assertEqual(None, co.username)
@@ -125,7 +140,7 @@ class CliOptionsTest(TestCase):
self.check_option(oparser, option_name) self.check_option(oparser, option_name)
class ArgumentRequiredTest(TestCase): class ArgumentRequiredTest(testtools.TestCase):
def setUp(self): def setUp(self):
super(ArgumentRequiredTest, self).setUp() super(ArgumentRequiredTest, self).setUp()
@@ -140,12 +155,12 @@ class ArgumentRequiredTest(TestCase):
self.assertEqual(expected, self.arg_req.__str__()) self.assertEqual(expected, self.arg_req.__str__())
class CommandsBaseTest(TestCase): class CommandsBaseTest(testtools.TestCase):
def setUp(self): def setUp(self):
super(CommandsBaseTest, self).setUp() super(CommandsBaseTest, self).setUp()
self.orig_sys_exit = sys.exit 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 self.orig_sys_argv = sys.argv
sys.argv = ['fakecmd'] sys.argv = ['fakecmd']
parser = common.CliOptions().create_optparser(False) parser = common.CliOptions().create_optparser(False)
@@ -160,7 +175,7 @@ class CommandsBaseTest(TestCase):
self.assertNotEqual(None, self.cmd_base) self.assertNotEqual(None, self.cmd_base)
def test__safe_exec(self): def test__safe_exec(self):
func = Mock(return_value="test") func = mock.Mock(return_value="test")
self.cmd_base.debug = True self.cmd_base.debug = True
r = self.cmd_base._safe_exec(func) r = self.cmd_base._safe_exec(func)
self.assertEqual("test", r) self.assertEqual("test", r)
@@ -169,7 +184,7 @@ class CommandsBaseTest(TestCase):
r = self.cmd_base._safe_exec(func) r = self.cmd_base._safe_exec(func)
self.assertEqual("test", r) 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) r = self.cmd_base._safe_exec(func)
self.assertEqual(None, r) self.assertEqual(None, r)
@@ -209,30 +224,30 @@ class CommandsBaseTest(TestCase):
self.assertEqual(["v3"], self.cmd_base.attr1) self.assertEqual(["v3"], self.cmd_base.attr1)
def test__pretty_print(self): def test__pretty_print(self):
func = Mock(return_value=None) func = mock.Mock(return_value=None)
self.cmd_base.verbose = True self.cmd_base.verbose = True
self.assertEqual(None, self.cmd_base._pretty_print(func)) self.assertEqual(None, self.cmd_base._pretty_print(func))
self.cmd_base.verbose = False self.cmd_base.verbose = False
self.assertEqual(None, self.cmd_base._pretty_print(func)) self.assertEqual(None, self.cmd_base._pretty_print(func))
def test__dumps(self): 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")) self.assertEqual("test-dump", self.cmd_base._dumps("item"))
def test__pretty_list(self): def test__pretty_list(self):
func = Mock(return_value=None) func = mock.Mock(return_value=None)
self.cmd_base.verbose = True self.cmd_base.verbose = True
self.assertEqual(None, self.cmd_base._pretty_list(func)) self.assertEqual(None, self.cmd_base._pretty_list(func))
self.cmd_base.verbose = False self.cmd_base.verbose = False
self.assertEqual(None, self.cmd_base._pretty_list(func)) self.assertEqual(None, self.cmd_base._pretty_list(func))
item = Mock(return_value="test") item = mock.Mock(return_value="test")
item._info = "info" item._info = "info"
func = Mock(return_value=[item]) func = mock.Mock(return_value=[item])
self.assertEqual(None, self.cmd_base._pretty_list(func)) self.assertEqual(None, self.cmd_base._pretty_list(func))
def test__pretty_paged(self): def test__pretty_paged(self):
self.cmd_base.limit = "5" self.cmd_base.limit = "5"
func = Mock(return_value=None) func = mock.Mock(return_value=None)
self.cmd_base.verbose = True self.cmd_base.verbose = True
self.assertEqual(None, self.cmd_base._pretty_paged(func)) self.assertEqual(None, self.cmd_base._pretty_paged(func))
@@ -246,28 +261,28 @@ class CommandsBaseTest(TestCase):
return ["item1"] return ["item1"]
def __len__(self): def __len__(self):
return count return self.count
ret = MockIterable() ret = MockIterable()
func = Mock(return_value=ret) func = mock.Mock(return_value=ret)
self.assertEqual(None, self.cmd_base._pretty_paged(func)) self.assertEqual(None, self.cmd_base._pretty_paged(func))
ret.count = 0 ret.count = 0
self.assertEqual(None, self.cmd_base._pretty_paged(func)) 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.assertEqual(None, self.cmd_base._pretty_paged(func))
self.cmd_base.debug = True 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) self.assertRaises(ValueError, self.cmd_base._pretty_paged, func)
class AuthTest(TestCase): class AuthTest(testtools.TestCase):
def setUp(self): def setUp(self):
super(AuthTest, self).setUp() super(AuthTest, self).setUp()
self.orig_sys_exit = sys.exit 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 self.orig_sys_argv = sys.argv
sys.argv = ['fakecmd'] sys.argv = ['fakecmd']
self.parser = common.CliOptions().create_optparser(False) self.parser = common.CliOptions().create_optparser(False)
@@ -287,28 +302,28 @@ class AuthTest(TestCase):
self.auth.apikey = "apikey" self.auth.apikey = "apikey"
self.auth.tenant_id = "tenant_id" self.auth.tenant_id = "tenant_id"
self.auth.auth_url = "auth_url" self.auth.auth_url = "auth_url"
dbaas = Mock() dbaas = mock.Mock()
dbaas.authenticate = Mock(return_value=None) dbaas.authenticate = mock.Mock(return_value=None)
dbaas.client = Mock() dbaas.client = mock.Mock()
dbaas.client.auth_token = Mock() dbaas.client.auth_token = mock.Mock()
dbaas.client.service_url = Mock() dbaas.client.service_url = mock.Mock()
self.auth._get_client = Mock(return_value=dbaas) self.auth._get_client = mock.Mock(return_value=dbaas)
self.auth.login() self.auth.login()
self.auth.debug = True 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.assertRaises(ValueError, self.auth.login)
self.auth.debug = False self.auth.debug = False
self.auth.login() self.auth.login()
class AuthedCommandsBaseTest(TestCase): class AuthedCommandsBaseTest(testtools.TestCase):
def setUp(self): def setUp(self):
super(AuthedCommandsBaseTest, self).setUp() super(AuthedCommandsBaseTest, self).setUp()
self.orig_sys_exit = sys.exit 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 self.orig_sys_argv = sys.argv
sys.argv = ['fakecmd'] sys.argv = ['fakecmd']
@@ -320,17 +335,17 @@ class AuthedCommandsBaseTest(TestCase):
def test___init__(self): def test___init__(self):
parser = common.CliOptions().create_optparser(False) parser = common.CliOptions().create_optparser(False)
common.AuthedCommandsBase.debug = True common.AuthedCommandsBase.debug = True
dbaas = Mock() dbaas = mock.Mock()
dbaas.authenticate = Mock(return_value=None) dbaas.authenticate = mock.Mock(return_value=None)
dbaas.client = Mock() dbaas.client = mock.Mock()
dbaas.client.auth_token = Mock() dbaas.client.auth_token = mock.Mock()
dbaas.client.service_url = Mock() dbaas.client.service_url = mock.Mock()
dbaas.client.authenticate_with_token = Mock() dbaas.client.authenticate_with_token = mock.Mock()
common.AuthedCommandsBase._get_client = Mock(return_value=dbaas) common.AuthedCommandsBase._get_client = mock.Mock(return_value=dbaas)
authed_cmd = common.AuthedCommandsBase(parser) common.AuthedCommandsBase(parser)
class PaginatedTest(TestCase): class PaginatedTest(testtools.TestCase):
def setUp(self): def setUp(self):
super(PaginatedTest, self).setUp() super(PaginatedTest, self).setUp()
@@ -372,7 +387,6 @@ class PaginatedTest(TestCase):
def test___reversed__(self): def test___reversed__(self):
itr = self.pgn.__reversed__() itr = self.pgn.__reversed__()
expected = ["item2", "item1"]
self.assertEqual("item2", next(itr)) self.assertEqual("item2", next(itr))
self.assertEqual("item1", next(itr)) self.assertEqual("item1", next(itr))
self.assertRaises(StopIteration, next, itr) self.assertRaises(StopIteration, next, itr)

View File

@@ -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 lxml import etree
#from troveclient import xml from troveclient.compat import xml
# Killing this until xml support is brought back. # Killing this until xml support is brought back.
#class XmlTest(TestCase): #class XmlTest(testtools.TestCase):
class XmlTest(object): class XmlTest(object):
ELEMENT = ''' ELEMENT = '''
<instances> <instances>

View File

@@ -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 lxml import etree
from numbers import Number import numbers
from troveclient.compat import exceptions 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"} 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(): for key, value in dict.items():
if isinstance(value, basestring): if isinstance(value, basestring):
element.set(key, value) element.set(key, value)
elif isinstance(value, Number): elif isinstance(value, numbers.Number):
element.set(key, str(value)) element.set(key, str(value))
elif isinstance(value, None.__class__): elif isinstance(value, None.__class__):
element.set(key, '') element.set(key, '')
@@ -263,7 +278,7 @@ def modify_response_types(value, type_translator):
for element in value] for element in value]
class TroveXmlClient(TroveHTTPClient): class TroveXmlClient(client.TroveHTTPClient):
@classmethod @classmethod
def morph_request(self, kwargs): def morph_request(self, kwargs):

View File

@@ -37,7 +37,7 @@ import troveclient
from troveclient import client from troveclient import client
from troveclient.openstack.common import strutils from troveclient.openstack.common import strutils
from troveclient.openstack.common.apiclient import exceptions as exc 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 import utils
from troveclient.v1 import shell as shell_v1 from troveclient.v1 import shell as shell_v1
@@ -548,7 +548,7 @@ class OpenStackHelpFormatter(argparse.HelpFormatter):
'trove create <name> <flavor_id> --databases <db_name>' 'trove create <name> <flavor_id> --databases <db_name>'
""" """
if prefix is None: if prefix is None:
prefix = _('usage: ') prefix = gtu._('usage: ')
# if usage is specified, use that # if usage is specified, use that
if usage is not None: if usage is not None:

View File

@@ -17,8 +17,8 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from testtools import TestCase import testtools
from mock import Mock import mock
from troveclient.v1 import accounts from troveclient.v1 import accounts
from troveclient import base from troveclient import base
@@ -28,12 +28,12 @@ Unit tests for accounts.py
""" """
class AccountTest(TestCase): class AccountTest(testtools.TestCase):
def setUp(self): def setUp(self):
super(AccountTest, self).setUp() super(AccountTest, self).setUp()
self.orig__init = accounts.Account.__init__ 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() self.account = accounts.Account()
def tearDown(self): def tearDown(self):
@@ -45,15 +45,15 @@ class AccountTest(TestCase):
self.assertEqual('<Account: account-1>', self.account.__repr__()) self.assertEqual('<Account: account-1>', self.account.__repr__())
class AccountsTest(TestCase): class AccountsTest(testtools.TestCase):
def setUp(self): def setUp(self):
super(AccountsTest, self).setUp() super(AccountsTest, self).setUp()
self.orig__init = accounts.Accounts.__init__ 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 = accounts.Accounts()
self.accounts.api = Mock() self.accounts.api = mock.Mock()
self.accounts.api.client = Mock() self.accounts.api.client = mock.Mock()
def tearDown(self): def tearDown(self):
super(AccountsTest, self).tearDown() super(AccountsTest, self).tearDown()
@@ -63,33 +63,33 @@ class AccountsTest(TestCase):
def side_effect_func(self, val): def side_effect_func(self, val):
return 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' key_ = 'key'
body_ = {key_: "test-value"} 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.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) self.assertRaises(Exception, self.accounts._list, 'url', None)
def test_index(self): def test_index(self):
resp = Mock() resp = mock.Mock()
resp.status_code = 400 resp.status_code = 400
body = {"Accounts": {}} 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) self.assertRaises(Exception, self.accounts.index)
resp.status_code = 200 resp.status_code = 200
self.assertTrue(isinstance(self.accounts.index(), base.Resource)) 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) self.assertRaises(Exception, self.accounts.index)
def test_show(self): def test_show(self):
def side_effect_func(acct_name, acct): def side_effect_func(acct_name, acct):
return acct_name, acct return acct_name, acct
account_ = Mock() account_ = mock.Mock()
account_.name = "test-account" 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.assertEqual(('/mgmt/accounts/test-account', 'account'),
self.accounts.show(account_)) self.accounts.show(account_))
@@ -97,7 +97,7 @@ class AccountsTest(TestCase):
account_ = 'account with no name' account_ = 'account with no name'
self.assertEqual(account_, self.assertEqual(account_,
accounts.Accounts._get_account_name(account_)) accounts.Accounts._get_account_name(account_))
account_ = Mock() account_ = mock.Mock()
account_.name = "account-name" account_.name = "account-name"
self.assertEqual("account-name", self.assertEqual("account-name",
accounts.Accounts._get_account_name(account_)) accounts.Accounts._get_account_name(account_))

View File

@@ -20,8 +20,8 @@
import contextlib import contextlib
import os import os
from testtools import TestCase import testtools
from mock import Mock import mock
from troveclient import base from troveclient import base
from troveclient.openstack.common.apiclient import exceptions from troveclient.openstack.common.apiclient import exceptions
@@ -38,26 +38,24 @@ def obj_class(self, res, loaded=True):
return res return res
class BaseTest(TestCase): class BaseTest(testtools.TestCase):
def test_getid(self): def test_getid(self):
obj = "test" obj = "test"
r = base.getid(obj) r = base.getid(obj)
self.assertEqual(obj, r) self.assertEqual(obj, r)
test_id = "test_id" test_id = "test_id"
obj = Mock() obj = mock.Mock()
obj.id = test_id obj.id = test_id
r = base.getid(obj) r = base.getid(obj)
self.assertEqual(test_id, r) self.assertEqual(test_id, r)
class ManagerTest(TestCase): class ManagerTest(testtools.TestCase):
def setUp(self): def setUp(self):
super(ManagerTest, self).setUp() super(ManagerTest, self).setUp()
self.orig__init = base.Manager.__init__ 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 self.orig_os_makedirs = os.makedirs
def tearDown(self): def tearDown(self):
@@ -66,7 +64,7 @@ class ManagerTest(TestCase):
os.makedirs = self.orig_os_makedirs os.makedirs = self.orig_os_makedirs
def test___init__(self): def test___init__(self):
api = Mock() api = mock.Mock()
base.Manager.__init__ = self.orig__init base.Manager.__init__ = self.orig__init
manager = base.Manager(api) manager = base.Manager(api)
self.assertEqual(api, manager.api) self.assertEqual(api, manager.api)
@@ -77,11 +75,11 @@ class ManagerTest(TestCase):
# handling exceptions # handling exceptions
mode = "w" mode = "w"
cache_type = "unittest" cache_type = "unittest"
obj_class = Mock obj_class = mock.Mock
with manager.completion_cache(cache_type, obj_class, mode): with manager.completion_cache(cache_type, obj_class, mode):
pass pass
os.makedirs = Mock(side_effect=OSError) os.makedirs = mock.Mock(side_effect=OSError)
with manager.completion_cache(cache_type, obj_class, mode): with manager.completion_cache(cache_type, obj_class, mode):
pass pass
@@ -94,20 +92,20 @@ class ManagerTest(TestCase):
def side_effect_func(val): def side_effect_func(val):
return val return val
manager._mock_cache = Mock() manager._mock_cache = mock.Mock()
manager._mock_cache.write = Mock(return_value=None) manager._mock_cache.write = mock.Mock(return_value=None)
manager.write_to_completion_cache("mock", "val") manager.write_to_completion_cache("mock", "val")
self.assertEqual(1, manager._mock_cache.write.call_count) self.assertEqual(1, manager._mock_cache.write.call_count)
def _get_mock(self): def _get_mock(self):
manager = base.Manager() manager = base.Manager()
manager.api = Mock() manager.api = mock.Mock()
manager.api.client = Mock() manager.api.client = mock.Mock()
def side_effect_func(self, body, loaded=True): def side_effect_func(self, body, loaded=True):
return body return body
manager.resource_class = Mock(side_effect=side_effect_func) manager.resource_class = mock.Mock(side_effect=side_effect_func)
return manager return manager
def test__get_with_response_key_none(self): def test__get_with_response_key_none(self):
@@ -115,7 +113,7 @@ class ManagerTest(TestCase):
url_ = "test-url" url_ = "test-url"
body_ = "test-body" body_ = "test-body"
resp_ = "test-resp" 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) r = manager._get(url=url_, response_key=None)
self.assertEqual(body_, r) self.assertEqual(body_, r)
@@ -124,20 +122,20 @@ class ManagerTest(TestCase):
response_key = "response_key" response_key = "response_key"
body_ = {response_key: "test-resp-key-body"} body_ = {response_key: "test-resp-key-body"}
url_ = "test_url_get" 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) r = manager._get(url=url_, response_key=response_key)
self.assertEqual(body_[response_key], r) self.assertEqual(body_[response_key], r)
def test__create(self): def test__create(self):
manager = base.Manager() manager = base.Manager()
manager.api = Mock() manager.api = mock.Mock()
manager.api.client = Mock() manager.api.client = mock.Mock()
response_key = "response_key" response_key = "response_key"
data_ = "test-data" data_ = "test-data"
body_ = {response_key: data_} body_ = {response_key: data_}
url_ = "test_url_post" 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 return_raw = True
r = manager._create(url_, body_, response_key, return_raw) r = manager._create(url_, body_, response_key, return_raw)
@@ -149,18 +147,18 @@ class ManagerTest(TestCase):
def completion_cache_mock(*arg, **kwargs): def completion_cache_mock(*arg, **kwargs):
yield yield
mock = Mock() mockl = mock.Mock()
mock.side_effect = completion_cache_mock mockl.side_effect = completion_cache_mock
manager.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) r = manager._create(url_, body_, response_key, return_raw)
self.assertEqual("test-class", r) self.assertEqual("test-class", r)
def get_mock_mng_api_client(self): def get_mock_mng_api_client(self):
manager = base.Manager() manager = base.Manager()
manager.api = Mock() manager.api = mock.Mock()
manager.api.client = Mock() manager.api.client = mock.Mock()
return manager return manager
def test__delete(self): def test__delete(self):
@@ -168,7 +166,7 @@ class ManagerTest(TestCase):
body_ = "test-body" body_ = "test-body"
manager = self.get_mock_mng_api_client() 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 # _delete just calls api.client.delete, and does nothing
# the correctness should be tested in api class # the correctness should be tested in api class
manager._delete("test-url") manager._delete("test-url")
@@ -179,13 +177,12 @@ class ManagerTest(TestCase):
body_ = "test-body" body_ = "test-body"
manager = self.get_mock_mng_api_client() 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_) body = manager._update("test-url", body_)
self.assertEqual(body_, body) self.assertEqual(body_, body)
class ManagerListTest(ManagerTest): class ManagerListTest(ManagerTest):
def setUp(self): def setUp(self):
super(ManagerListTest, self).setUp() super(ManagerListTest, self).setUp()
@@ -194,25 +191,26 @@ class ManagerListTest(ManagerTest):
yield yield
self.manager = base.Manager() self.manager = base.Manager()
self.manager.api = Mock() self.manager.api = mock.Mock()
self.manager.api.client = Mock() self.manager.api.client = mock.Mock()
self.response_key = "response_key" self.response_key = "response_key"
self.data_p = ["p1", "p2"] self.data_p = ["p1", "p2"]
self.body_p = {self.response_key: self.data_p} self.body_p = {self.response_key: self.data_p}
self.url_p = "test_url_post" self.url_p = "test_url_post"
self.manager.api.client.post = Mock(return_value=(self.url_p, self.manager.api.client.post = mock.Mock(
self.body_p)) return_value=(self.url_p, self.body_p)
)
self.data_g = ["g1", "g2", "g3"] self.data_g = ["g1", "g2", "g3"]
self.body_g = {self.response_key: self.data_g} self.body_g = {self.response_key: self.data_g}
self.url_g = "test_url_get" self.url_g = "test_url_get"
self.manager.api.client.get = Mock(return_value=(self.url_g, self.manager.api.client.get = mock.Mock(
self.body_g)) return_value=(self.url_g, self.body_g)
)
mock = Mock() mockl = mock.Mock()
mock.side_effect = completion_cache_mock mockl.side_effect = completion_cache_mock
self.manager.completion_cache = mock self.manager.completion_cache = mockl
def tearDown(self): def tearDown(self):
super(ManagerListTest, self).tearDown() super(ManagerListTest, self).tearDown()
@@ -238,7 +236,7 @@ class ManagerListTest(ManagerTest):
data_ = {"values": ["p1", "p2"]} data_ = {"values": ["p1", "p2"]}
body_ = {self.response_key: data_} body_ = {self.response_key: data_}
url_ = "test_url_post" 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, l = self.manager._list("url", self.response_key,
obj_class, "something") obj_class, "something")
data = data_["values"] data = data_["values"]
@@ -250,14 +248,13 @@ class ManagerListTest(ManagerTest):
data_ = {"v1": "1", "v2": "2"} data_ = {"v1": "1", "v2": "2"}
body_ = {self.response_key: data_} body_ = {self.response_key: data_}
url_ = "test_url_post" 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, l = self.manager._list("url", self.response_key,
obj_class, "something") obj_class, "something")
self.assertEqual(len(data_), len(l)) self.assertEqual(len(data_), len(l))
class FakeResource(object): class FakeResource(object):
def __init__(self, _id, properties): def __init__(self, _id, properties):
self.id = _id self.id = _id
try: try:
@@ -271,7 +268,6 @@ class FakeResource(object):
class FakeManager(base.ManagerWithFind): class FakeManager(base.ManagerWithFind):
resource_class = FakeResource resource_class = FakeResource
resources = [ resources = [
@@ -291,8 +287,7 @@ class FakeManager(base.ManagerWithFind):
return self.resources return self.resources
class FindResourceTestCase(TestCase): class FindResourceTestCase(testtools.TestCase):
def setUp(self): def setUp(self):
super(FindResourceTestCase, self).setUp() super(FindResourceTestCase, self).setUp()
self.manager = FakeManager(None) self.manager = FakeManager(None)
@@ -324,8 +319,7 @@ class FindResourceTestCase(TestCase):
self.assertEqual(output, self.manager.get('4242')) self.assertEqual(output, self.manager.get('4242'))
class ResourceTest(TestCase): class ResourceTest(testtools.TestCase):
def setUp(self): def setUp(self):
super(ResourceTest, self).setUp() super(ResourceTest, self).setUp()
self.orig___init__ = base.Resource.__init__ self.orig___init__ = base.Resource.__init__
@@ -335,8 +329,8 @@ class ResourceTest(TestCase):
base.Resource.__init__ = self.orig___init__ base.Resource.__init__ = self.orig___init__
def test___init__(self): def test___init__(self):
manager = Mock() manager = mock.Mock()
manager.write_to_completion_cache = Mock(return_value=None) manager.write_to_completion_cache = mock.Mock(return_value=None)
info_ = {} info_ = {}
robj = base.Resource(manager, info_) robj = base.Resource(manager, info_)
@@ -370,8 +364,8 @@ class ResourceTest(TestCase):
self.assertEqual(4, manager.write_to_completion_cache.call_count) self.assertEqual(4, manager.write_to_completion_cache.call_count)
def test_human_id(self): def test_human_id(self):
manager = Mock() manager = mock.Mock()
manager.write_to_completion_cache = Mock(return_value=None) manager.write_to_completion_cache = mock.Mock(return_value=None)
info_ = {"name": "test-human-id"} info_ = {"name": "test-human-id"}
robj = base.Resource(manager, info_) robj = base.Resource(manager, info_)
@@ -384,7 +378,7 @@ class ResourceTest(TestCase):
self.assertEqual("new-human-id", robj.human_id) self.assertEqual("new-human-id", robj.human_id)
def get_mock_resource_obj(self): def get_mock_resource_obj(self):
base.Resource.__init__ = Mock(return_value=None) base.Resource.__init__ = mock.Mock(return_value=None)
robj = base.Resource() robj = base.Resource()
return robj return robj
@@ -414,19 +408,19 @@ class ResourceTest(TestCase):
def test_get(self): def test_get(self):
robj = self.get_mock_resource_obj() robj = self.get_mock_resource_obj()
manager = Mock() manager = mock.Mock()
manager.get = None manager.get = None
robj.manager = object() robj.manager = object()
robj.get() robj.get()
manager = Mock() manager = mock.Mock()
robj.manager = Mock() robj.manager = mock.Mock()
robj.id = "id" robj.id = "id"
new = Mock() new = mock.Mock()
new._info = {"name": "test-human-id", "test_attr": 5} 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() robj.get()
self.assertEqual("test-human-id", robj.name) self.assertEqual("test-human-id", robj.name)
self.assertEqual(5, robj.test_attr) self.assertEqual(5, robj.test_attr)
@@ -451,7 +445,7 @@ class ResourceTest(TestCase):
self.assertTrue(robj.__eq__(other)) self.assertTrue(robj.__eq__(other))
# not instance of the same class # not instance of the same class
other = Mock() other = mock.Mock()
self.assertNotTrue(robj.__eq__(other)) self.assertNotTrue(robj.__eq__(other))
def test_is_loaded(self): def test_is_loaded(self):

View File

@@ -17,24 +17,25 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from testtools import TestCase import testtools
import troveclient.v1.client 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 client
from troveclient.openstack.common.apiclient import exceptions from troveclient.openstack.common.apiclient import exceptions
class ClientTest(TestCase): class ClientTest(testtools.TestCase):
def test_get_client_class_v1(self): 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', output = client.BaseClient.get_class('database',
'1.0', version_map) '1.0', version_map)
self.assertEqual(output, troveclient.v1.client.Client) self.assertEqual(output, troveclient.v1.client.Client)
def test_get_client_class_unknown(self): def test_get_client_class_unknown(self):
version_map = get_version_map() version_map = other_client.get_version_map()
self.assertRaises(exceptions.UnsupportedVersion, self.assertRaises(exceptions.UnsupportedVersion,
client.BaseClient.get_class, 'database', client.BaseClient.get_class, 'database',
'0', version_map) '0', version_map)

View File

@@ -17,18 +17,18 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from testtools import TestCase import testtools
from mock import Mock import mock
from troveclient import common from troveclient import common
class CommonTest(TestCase): class CommonTest(testtools.TestCase):
def test_check_for_exceptions(self): def test_check_for_exceptions(self):
status = [400, 422, 500] status = [400, 422, 500]
for s in status: for s in status:
resp = Mock() resp = mock.Mock()
resp.status_code = s resp.status_code = s
self.assertRaises(Exception, self.assertRaises(Exception,
common.check_for_exceptions, resp, "body") common.check_for_exceptions, resp, "body")
@@ -46,7 +46,7 @@ class CommonTest(TestCase):
common.limit_url(url, limit=limit, marker=marker)) common.limit_url(url, limit=limit, marker=marker))
class PaginatedTest(TestCase): class PaginatedTest(testtools.TestCase):
def setUp(self): def setUp(self):
super(PaginatedTest, self).setUp() super(PaginatedTest, self).setUp()
@@ -88,7 +88,6 @@ class PaginatedTest(TestCase):
def test___reversed__(self): def test___reversed__(self):
itr = self.pgn.__reversed__() itr = self.pgn.__reversed__()
expected = ["item2", "item1"]
self.assertEqual("item2", next(itr)) self.assertEqual("item2", next(itr))
self.assertEqual("item1", next(itr)) self.assertEqual("item1", next(itr))
self.assertRaises(StopIteration, next, itr) self.assertRaises(StopIteration, next, itr)

View File

@@ -17,8 +17,8 @@
# under the License. # under the License.
from testtools import TestCase import testtools
from mock import Mock import mock
from troveclient.v1 import datastores from troveclient.v1 import datastores
from troveclient import base from troveclient import base
@@ -29,14 +29,14 @@ Unit tests for datastores.py
""" """
class DatastoreTest(TestCase): class DatastoreTest(testtools.TestCase):
def setUp(self): def setUp(self):
super(DatastoreTest, self).setUp() super(DatastoreTest, self).setUp()
self.orig__init = datastores.Datastore.__init__ 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 = datastores.Datastore()
self.datastore.manager = Mock() self.datastore.manager = mock.Mock()
def tearDown(self): def tearDown(self):
super(DatastoreTest, self).tearDown() super(DatastoreTest, self).tearDown()
@@ -48,19 +48,19 @@ class DatastoreTest(TestCase):
self.datastore.__repr__()) self.datastore.__repr__())
class DatastoresTest(TestCase): class DatastoresTest(testtools.TestCase):
def setUp(self): def setUp(self):
super(DatastoresTest, self).setUp() super(DatastoresTest, self).setUp()
self.orig__init = datastores.Datastores.__init__ 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 = datastores.Datastores()
self.datastores.api = Mock() self.datastores.api = mock.Mock()
self.datastores.api.client = Mock() self.datastores.api.client = mock.Mock()
self.datastores.resource_class = Mock(return_value="ds-1") self.datastores.resource_class = mock.Mock(return_value="ds-1")
self.orig_base_getid = base.getid self.orig_base_getid = base.getid
base.getid = Mock(return_value="datastore1") base.getid = mock.Mock(return_value="datastore1")
def tearDown(self): def tearDown(self):
super(DatastoresTest, self).tearDown() super(DatastoresTest, self).tearDown()
@@ -71,7 +71,7 @@ class DatastoresTest(TestCase):
def side_effect_func(path, inst, limit, marker): def side_effect_func(path, inst, limit, marker):
return 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" limit = "test-limit"
marker = "test-marker" marker = "test-marker"
expected = ("/datastores", "datastores", limit, marker) expected = ("/datastores", "datastores", limit, marker)
@@ -81,26 +81,26 @@ class DatastoresTest(TestCase):
def side_effect_func(path, inst): def side_effect_func(path, inst):
return 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', self.assertEqual(('/datastores/datastore1',
'datastore'), 'datastore'),
self.datastores.get(1)) self.datastores.get(1))
class DatastoreVersionsTest(TestCase): class DatastoreVersionsTest(testtools.TestCase):
def setUp(self): def setUp(self):
super(DatastoreVersionsTest, self).setUp() super(DatastoreVersionsTest, self).setUp()
self.orig__init = datastores.DatastoreVersions.__init__ 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 = datastores.DatastoreVersions()
self.datastore_versions.api = Mock() self.datastore_versions.api = mock.Mock()
self.datastore_versions.api.client = Mock() self.datastore_versions.api.client = mock.Mock()
self.datastore_versions.resource_class = Mock( self.datastore_versions.resource_class = mock.Mock(
return_value="ds_version-1") return_value="ds_version-1")
self.orig_base_getid = base.getid self.orig_base_getid = base.getid
base.getid = Mock(return_value="datastore_version1") base.getid = mock.Mock(return_value="datastore_version1")
def tearDown(self): def tearDown(self):
super(DatastoreVersionsTest, self).tearDown() super(DatastoreVersionsTest, self).tearDown()
@@ -111,7 +111,7 @@ class DatastoreVersionsTest(TestCase):
def side_effect_func(path, inst, limit, marker): def side_effect_func(path, inst, limit, marker):
return 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" limit = "test-limit"
marker = "test-marker" marker = "test-marker"
expected = ("/datastores/datastore1/versions", expected = ("/datastores/datastore1/versions",
@@ -123,7 +123,7 @@ class DatastoreVersionsTest(TestCase):
def side_effect_func(path, inst): def side_effect_func(path, inst):
return 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/' self.assertEqual(('/datastores/datastore1/versions/'
'datastore_version1', 'datastore_version1',
'version'), 'version'),

View File

@@ -17,8 +17,8 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from testtools import TestCase import testtools
from mock import Mock import mock
from troveclient.v1 import instances from troveclient.v1 import instances
from troveclient import base from troveclient import base
@@ -28,14 +28,14 @@ Unit tests for instances.py
""" """
class InstanceTest(TestCase): class InstanceTest(testtools.TestCase):
def setUp(self): def setUp(self):
super(InstanceTest, self).setUp() super(InstanceTest, self).setUp()
self.orig__init = instances.Instance.__init__ 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 = instances.Instance()
self.instance.manager = Mock() self.instance.manager = mock.Mock()
def tearDown(self): def tearDown(self):
super(InstanceTest, self).tearDown() super(InstanceTest, self).tearDown()
@@ -47,37 +47,37 @@ class InstanceTest(TestCase):
def test_list_databases(self): def test_list_databases(self):
db_list = ['database1', 'database2'] db_list = ['database1', 'database2']
self.instance.manager.databases = Mock() self.instance.manager.databases = mock.Mock()
self.instance.manager.databases.list = Mock(return_value=db_list) self.instance.manager.databases.list = mock.Mock(return_value=db_list)
self.assertEqual(db_list, self.instance.list_databases()) self.assertEqual(db_list, self.instance.list_databases())
def test_delete(self): 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.manager.delete = db_delete_mock
self.instance.delete() self.instance.delete()
self.assertEqual(1, db_delete_mock.call_count) self.assertEqual(1, db_delete_mock.call_count)
def test_restart(self): 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.manager.restart = db_restart_mock
self.instance.id = 1 self.instance.id = 1
self.instance.restart() self.instance.restart()
self.assertEqual(1, db_restart_mock.call_count) self.assertEqual(1, db_restart_mock.call_count)
class InstancesTest(TestCase): class InstancesTest(testtools.TestCase):
def setUp(self): def setUp(self):
super(InstancesTest, self).setUp() super(InstancesTest, self).setUp()
self.orig__init = instances.Instances.__init__ 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 = instances.Instances()
self.instances.api = Mock() self.instances.api = mock.Mock()
self.instances.api.client = Mock() self.instances.api.client = mock.Mock()
self.instances.resource_class = Mock(return_value="instance-1") self.instances.resource_class = mock.Mock(return_value="instance-1")
self.orig_base_getid = base.getid self.orig_base_getid = base.getid
base.getid = Mock(return_value="instance1") base.getid = mock.Mock(return_value="instance1")
def tearDown(self): def tearDown(self):
super(InstancesTest, self).tearDown() super(InstancesTest, self).tearDown()
@@ -88,7 +88,7 @@ class InstancesTest(TestCase):
def side_effect_func(path, body, inst): def side_effect_func(path, body, inst):
return 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", p, b, i = self.instances.create("test-name", 103, "test-volume",
['db1', 'db2'], ['u1', 'u2'], ['db1', 'db2'], ['u1', 'u2'],
datastore="datastore", datastore="datastore",
@@ -105,15 +105,17 @@ class InstancesTest(TestCase):
self.assertEqual(103, b["instance"]["flavorRef"]) self.assertEqual(103, b["instance"]["flavorRef"])
def test__list(self): 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) self.assertRaises(Exception, self.instances._list, "url", None)
body = Mock() body = mock.Mock()
body.get = Mock(return_value=[{'href': 'http://test.net/test_file', body.get = mock.Mock(
'rel': 'next'}]) return_value=[{'href': 'http://test.net/test_file',
body.__getitem__ = Mock(return_value='instance1') 'rel': 'next'}]
#self.instances.resource_class = Mock(return_value="instance-1") )
self.instances.api.client.get = Mock(return_value=('resp', body)) 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'}] _expected = [{'href': 'http://test.net/test_file', 'rel': 'next'}]
self.assertEqual(_expected, self.instances._list("url", None).links) self.assertEqual(_expected, self.instances._list("url", None).links)
@@ -121,7 +123,7 @@ class InstancesTest(TestCase):
def side_effect_func(path, inst, limit, marker): def side_effect_func(path, inst, limit, marker):
return 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" limit = "test-limit"
marker = "test-marker" marker = "test-marker"
expected = ("/instances", "instances", limit, marker) expected = ("/instances", "instances", limit, marker)
@@ -131,27 +133,27 @@ class InstancesTest(TestCase):
def side_effect_func(path, inst): def side_effect_func(path, inst):
return 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.assertEqual(('/instances/instance1', 'instance'),
self.instances.get(1)) self.instances.get(1))
def test_delete(self): def test_delete(self):
resp = Mock() resp = mock.Mock()
resp.status_code = 200 resp.status_code = 200
body = None 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') self.instances.delete('instance1')
resp.status_code = 500 resp.status_code = 500
self.assertRaises(Exception, self.instances.delete, 'instance1') self.assertRaises(Exception, self.instances.delete, 'instance1')
def test__action(self): def test__action(self):
body = Mock() body = mock.Mock()
resp = Mock() resp = mock.Mock()
resp.status_code = 200 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.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)) self.assertEqual(None, self.instances._action(1, body))
def _set_action_mock(self): def _set_action_mock(self):
@@ -161,7 +163,7 @@ class InstancesTest(TestCase):
self._instance_id = None self._instance_id = None
self._body = 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): def test_resize_volume(self):
self._set_action_mock() self._set_action_mock()
@@ -182,7 +184,7 @@ class InstancesTest(TestCase):
self.assertEqual({'restart': {}}, self._body) self.assertEqual({'restart': {}}, self._body)
class InstanceStatusTest(TestCase): class InstanceStatusTest(testtools.TestCase):
def test_constants(self): def test_constants(self):
self.assertEqual("ACTIVE", instances.InstanceStatus.ACTIVE) self.assertEqual("ACTIVE", instances.InstanceStatus.ACTIVE)

View File

@@ -17,26 +17,26 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from testtools import TestCase import testtools
from mock import Mock import mock
from troveclient.v1 import limits from troveclient.v1 import limits
class LimitsTest(TestCase): class LimitsTest(testtools.TestCase):
""" """
This class tests the calling code for the Limits API This class tests the calling code for the Limits API
""" """
def setUp(self): def setUp(self):
super(LimitsTest, self).setUp() super(LimitsTest, self).setUp()
self.limits = limits.Limits(Mock()) self.limits = limits.Limits(mock.Mock())
self.limits.api.client = Mock() self.limits.api.client = mock.Mock()
def tearDown(self): def tearDown(self):
super(LimitsTest, self).tearDown() super(LimitsTest, self).tearDown()
def test_list(self): def test_list(self):
resp = Mock() resp = mock.Mock()
resp.status_code = 200 resp.status_code = 200
body = {"limits": body = {"limits":
[ [
@@ -71,7 +71,7 @@ class LimitsTest(TestCase):
'remaining': 2, 'unit': 'MINUTE'}]} 'remaining': 2, 'unit': 'MINUTE'}]}
response = (resp, body) response = (resp, body)
mock_get = Mock(return_value=response) mock_get = mock.Mock(return_value=response)
self.limits.api.client.get = mock_get self.limits.api.client.get = mock_get
self.assertIsNotNone(self.limits.list()) self.assertIsNotNone(self.limits.list())
mock_get.assert_called_once_with("/limits") mock_get.assert_called_once_with("/limits")
@@ -84,7 +84,7 @@ class LimitsTest(TestCase):
def _check_error_response(self, status_code): def _check_error_response(self, status_code):
RESPONSE_KEY = "limits" RESPONSE_KEY = "limits"
resp = Mock() resp = mock.Mock()
resp.status_code = status_code resp.status_code = status_code
body = {RESPONSE_KEY: { body = {RESPONSE_KEY: {
'absolute': {}, 'absolute': {},
@@ -92,6 +92,6 @@ class LimitsTest(TestCase):
{'limit': []}]}} {'limit': []}]}}
response = (resp, body) response = (resp, body)
mock_get = Mock(return_value=response) mock_get = mock.Mock(return_value=response)
self.limits.api.client.get = mock_get self.limits.api.client.get = mock_get
self.assertRaises(Exception, self.limits.list) self.assertRaises(Exception, self.limits.list)

View File

@@ -17,8 +17,8 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from testtools import TestCase import testtools
from mock import Mock import mock
from troveclient.v1 import management from troveclient.v1 import management
from troveclient import base from troveclient import base
@@ -28,12 +28,12 @@ Unit tests for management.py
""" """
class RootHistoryTest(TestCase): class RootHistoryTest(testtools.TestCase):
def setUp(self): def setUp(self):
super(RootHistoryTest, self).setUp() super(RootHistoryTest, self).setUp()
self.orig__init = management.RootHistory.__init__ self.orig__init = management.RootHistory.__init__
management.RootHistory.__init__ = Mock(return_value=None) management.RootHistory.__init__ = mock.Mock(return_value=None)
def tearDown(self): def tearDown(self):
super(RootHistoryTest, self).tearDown() super(RootHistoryTest, self).tearDown()
@@ -48,19 +48,19 @@ class RootHistoryTest(TestCase):
root_history.__repr__()) root_history.__repr__())
class ManagementTest(TestCase): class ManagementTest(testtools.TestCase):
def setUp(self): def setUp(self):
super(ManagementTest, self).setUp() super(ManagementTest, self).setUp()
self.orig__init = management.Management.__init__ 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 = management.Management()
self.management.api = Mock() self.management.api = mock.Mock()
self.management.api.client = Mock() self.management.api.client = mock.Mock()
self.orig_hist__init = management.RootHistory.__init__ self.orig_hist__init = management.RootHistory.__init__
self.orig_base_getid = base.getid self.orig_base_getid = base.getid
base.getid = Mock(return_value="instance1") base.getid = mock.Mock(return_value="instance1")
def tearDown(self): def tearDown(self):
super(ManagementTest, self).tearDown() super(ManagementTest, self).tearDown()
@@ -69,22 +69,24 @@ class ManagementTest(TestCase):
base.getid = self.orig_base_getid base.getid = self.orig_base_getid
def test__list(self): 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) self.assertRaises(Exception, self.management._list, "url", None)
body = Mock() body = mock.Mock()
body.get = Mock(return_value=[{'href': 'http://test.net/test_file', body.get = mock.Mock(
'rel': 'next'}]) return_value=[{'href': 'http://test.net/test_file',
body.__getitem__ = Mock(return_value='instance1') 'rel': 'next'}]
self.management.resource_class = Mock(return_value="instance-1") )
self.management.api.client.get = Mock(return_value=('resp', body)) 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'}] _expected = [{'href': 'http://test.net/test_file', 'rel': 'next'}]
self.assertEqual(_expected, self.management._list("url", None).links) self.assertEqual(_expected, self.management._list("url", None).links)
def test_show(self): def test_show(self):
def side_effect_func(path, instance): def side_effect_func(path, instance):
return 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) p, i = self.management.show(1)
self.assertEqual(('/mgmt/instances/instance1', 'instance'), (p, i)) self.assertEqual(('/mgmt/instances/instance1', 'instance'), (p, i))
@@ -92,25 +94,27 @@ class ManagementTest(TestCase):
def side_effect_func(url, name, limit, marker): def side_effect_func(url, name, limit, marker):
return url 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.assertEqual('/mgmt/instances?deleted=true',
self.management.index(deleted=True)) self.management.index(deleted=True))
self.assertEqual('/mgmt/instances?deleted=false', self.assertEqual('/mgmt/instances?deleted=false',
self.management.index(deleted=False)) self.management.index(deleted=False))
def test_root_enabled_history(self): 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.assertRaises(Exception,
self.management.root_enabled_history, "instance") self.management.root_enabled_history, "instance")
body = {'root_history': 'rh'} body = {'root_history': 'rh'}
self.management.api.client.get = Mock(return_value=('resp', body)) self.management.api.client.get = mock.Mock(return_value=('resp', body))
management.RootHistory.__init__ = Mock(return_value=None) management.RootHistory.__init__ = mock.Mock(return_value=None)
rh = self.management.root_enabled_history("instance") rh = self.management.root_enabled_history("instance")
self.assertTrue(isinstance(rh, management.RootHistory)) self.assertTrue(isinstance(rh, management.RootHistory))
def test__action(self): def test__action(self):
resp = Mock() resp = mock.Mock()
self.management.api.client.post = Mock(return_value=(resp, 'body')) self.management.api.client.post = mock.Mock(
return_value=(resp, 'body')
)
resp.status_code = 200 resp.status_code = 200
self.management._action(1, 'body') self.management._action(1, 'body')
self.assertEqual(1, self.management.api.client.post.call_count) self.assertEqual(1, self.management.api.client.post.call_count)
@@ -123,7 +127,7 @@ class ManagementTest(TestCase):
def side_effect_func(instance_id, body): def side_effect_func(instance_id, body):
self.body_ = 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): def test_stop(self):
self._mock_action() self._mock_action()
@@ -163,18 +167,18 @@ class ManagementTest(TestCase):
self.assertEqual({'reset-task-status': {}}, self.body_) self.assertEqual({'reset-task-status': {}}, self.body_)
class MgmtFlavorsTest(TestCase): class MgmtFlavorsTest(testtools.TestCase):
def setUp(self): def setUp(self):
super(MgmtFlavorsTest, self).setUp() super(MgmtFlavorsTest, self).setUp()
self.orig__init = management.MgmtFlavors.__init__ 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 = management.MgmtFlavors()
self.flavors.api = Mock() self.flavors.api = mock.Mock()
self.flavors.api.client = Mock() self.flavors.api.client = mock.Mock()
self.flavors.resource_class = Mock(return_value="flavor-1") self.flavors.resource_class = mock.Mock(return_value="flavor-1")
self.orig_base_getid = base.getid self.orig_base_getid = base.getid
base.getid = Mock(return_value="flavor1") base.getid = mock.Mock(return_value="flavor1")
def tearDown(self): def tearDown(self):
super(MgmtFlavorsTest, self).tearDown() super(MgmtFlavorsTest, self).tearDown()
@@ -185,7 +189,7 @@ class MgmtFlavorsTest(TestCase):
def side_effect_func(path, body, inst): def side_effect_func(path, body, inst):
return 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) p, b, i = self.flavors.create("test-name", 1024, 30, 2, 1)
self.assertEqual("/mgmt/flavors", p) self.assertEqual("/mgmt/flavors", p)
self.assertEqual("flavor", i) self.assertEqual("flavor", i)

View File

@@ -17,8 +17,8 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from testtools import TestCase import testtools
from mock import Mock import mock
from troveclient.v1 import security_groups 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): def setUp(self):
super(SecGroupTest, self).setUp() super(SecGroupTest, self).setUp()
self.orig__init = security_groups.SecurityGroup.__init__ 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_group = security_groups.SecurityGroup()
self.security_groups = security_groups.SecurityGroups(1) self.security_groups = security_groups.SecurityGroups(1)
@@ -47,26 +47,30 @@ class SecGroupTest(TestCase):
def test_list(self): def test_list(self):
sec_group_list = ['secgroup1', 'secgroup2'] 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()) self.assertEqual(sec_group_list, self.security_groups.list())
def test_get(self): def test_get(self):
def side_effect_func(path, inst): def side_effect_func(path, inst):
return 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.security_group.id = 1
self.assertEqual(('/security-groups/1', 'security_group'), self.assertEqual(('/security-groups/1', 'security_group'),
self.security_groups.get(self.security_group)) self.security_groups.get(self.security_group))
class SecGroupRuleTest(TestCase): class SecGroupRuleTest(testtools.TestCase):
def setUp(self): def setUp(self):
super(SecGroupRuleTest, self).setUp() super(SecGroupRuleTest, self).setUp()
self.orig__init = security_groups.SecurityGroupRule.__init__ self.orig__init = security_groups.SecurityGroupRule.__init__
security_groups.SecurityGroupRule.__init__ = Mock(return_value=None) security_groups.SecurityGroupRule.__init__ = mock.Mock(
security_groups.SecurityGroupRules.__init__ = Mock(return_value=None) return_value=None
)
security_groups.SecurityGroupRules.__init__ = mock.Mock(
return_value=None
)
self.security_group_rule = security_groups.SecurityGroupRule() self.security_group_rule = security_groups.SecurityGroupRule()
self.security_group_rules = security_groups.SecurityGroupRules() self.security_group_rules = security_groups.SecurityGroupRules()
@@ -95,7 +99,9 @@ class SecGroupRuleTest(TestCase):
def side_effect_func(path, body, inst): def side_effect_func(path, body, inst):
return 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", p, b, i = self.security_group_rules.create(1, "tcp",
80, 80, "0.0.0.0//0") 80, 80, "0.0.0.0//0")
self.assertEqual("/security-group-rules", p) 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"]) self.assertEqual("0.0.0.0//0", b["security_group_rule"]["cidr"])
def test_delete(self): def test_delete(self):
resp = Mock() resp = mock.Mock()
resp.status = 200 resp.status = 200
body = None body = None
self.security_group_rules.api = Mock() self.security_group_rules.api = mock.Mock()
self.security_group_rules.api.client = Mock() self.security_group_rules.api.client = mock.Mock()
self.security_group_rules.api.client.delete = \ self.security_group_rules.api.client.delete = mock.Mock(
Mock(return_value=(resp, body)) return_value=(resp, body)
)
self.security_group_rules.delete(self.id) self.security_group_rules.delete(self.id)
resp.status_code = 500 resp.status_code = 500
self.assertRaises(Exception, self.security_group_rules.delete, self.assertRaises(Exception, self.security_group_rules.delete,

View File

@@ -17,8 +17,8 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from testtools import TestCase import testtools
from mock import Mock import mock
from troveclient.v1 import users from troveclient.v1 import users
from troveclient import base from troveclient import base
@@ -28,11 +28,11 @@ Unit tests for users.py
""" """
class UserTest(TestCase): class UserTest(testtools.TestCase):
def setUp(self): def setUp(self):
super(UserTest, self).setUp() super(UserTest, self).setUp()
self.orig__init = users.User.__init__ 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() self.user = users.User()
def tearDown(self): def tearDown(self):
@@ -44,17 +44,17 @@ class UserTest(TestCase):
self.assertEqual('<User: user-1>', self.user.__repr__()) self.assertEqual('<User: user-1>', self.user.__repr__())
class UsersTest(TestCase): class UsersTest(testtools.TestCase):
def setUp(self): def setUp(self):
super(UsersTest, self).setUp() super(UsersTest, self).setUp()
self.orig__init = users.Users.__init__ 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 = users.Users()
self.users.api = Mock() self.users.api = mock.Mock()
self.users.api.client = Mock() self.users.api.client = mock.Mock()
self.orig_base_getid = base.getid self.orig_base_getid = base.getid
base.getid = Mock(return_value="instance1") base.getid = mock.Mock(return_value="instance1")
def tearDown(self): def tearDown(self):
super(UsersTest, self).tearDown() super(UsersTest, self).tearDown()
@@ -62,7 +62,7 @@ class UsersTest(TestCase):
base.getid = self.orig_base_getid base.getid = self.orig_base_getid
def _get_mock_method(self): def _get_mock_method(self):
self._resp = Mock() self._resp = mock.Mock()
self._body = None self._body = None
self._url = None self._url = None
@@ -71,7 +71,7 @@ class UsersTest(TestCase):
self._url = url self._url = url
return (self._resp, body) 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, def _build_fake_user(self, name, hostname=None, password=None,
databases=None): databases=None):
@@ -122,23 +122,25 @@ class UsersTest(TestCase):
return val return val
key = 'key' key = 'key'
body = Mock() body = mock.Mock()
body.get = Mock(return_value=[{'href': 'http://test.net/test_file', body.get = mock.Mock(
'rel': 'next'}]) return_value=[{'href': 'http://test.net/test_file',
body.__getitem__ = Mock(return_value=["test-value"]) 'rel': 'next'}]
)
body.__getitem__ = mock.Mock(return_value=["test-value"])
resp = Mock() resp = mock.Mock()
resp.status_code = 200 resp.status_code = 200
self.users.resource_class = Mock(side_effect=side_effect_func) self.users.resource_class = mock.Mock(side_effect=side_effect_func)
self.users.api.client.get = Mock(return_value=(resp, body)) self.users.api.client.get = mock.Mock(return_value=(resp, body))
self.assertEqual(["test-value"], self.users._list('url', key).items) 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) self.assertRaises(Exception, self.users._list, 'url', None)
def test_list(self): def test_list(self):
def side_effect_func(path, user, limit, marker): def side_effect_func(path, user, limit, marker):
return path 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)) self.assertEqual('/instances/instance1/users', self.users.list(1))

View File

@@ -19,11 +19,11 @@
import os import os
import six import six
from testtools import TestCase import testtools
from troveclient import utils from troveclient import utils
class UtilsTest(TestCase): class UtilsTest(testtools.TestCase):
def test_add_hookable_mixin(self): def test_add_hookable_mixin(self):
def func(): def func():

View File

@@ -17,7 +17,7 @@
# under the License. # under the License.
from troveclient import base from troveclient import base
from troveclient.common import check_for_exceptions from troveclient import common
class Account(base.Resource): class Account(base.Resource):
@@ -46,7 +46,7 @@ class Accounts(base.ManagerWithFind):
url = "/mgmt/accounts" url = "/mgmt/accounts"
resp, body = self.api.client.get(url) resp, body = self.api.client.get(url)
check_for_exceptions(resp, body) common.check_for_exceptions(resp, body)
if not body: if not body:
raise Exception("Call to " + url + " did not return a body.") raise Exception("Call to " + url + " did not return a body.")
return base.Resource(self, body) return base.Resource(self, body)

View File

@@ -16,18 +16,16 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from troveclient import client from troveclient import client as trove_client
from troveclient.v1.databases import Databases from troveclient.v1 import backups
from troveclient.v1.flavors import Flavors from troveclient.v1 import databases
from troveclient.v1.limits import Limits from troveclient.v1 import datastores
from troveclient.v1.users import Users from troveclient.v1 import flavors
from troveclient.v1.root import Root from troveclient.v1 import instances
from troveclient.v1.backups import Backups from troveclient.v1 import limits
from troveclient.v1.security_groups import SecurityGroups from troveclient.v1 import root
from troveclient.v1.security_groups import SecurityGroupRules from troveclient.v1 import security_groups
from troveclient.v1.datastores import Datastores from troveclient.v1 import users
from troveclient.v1.datastores import DatastoreVersions
from troveclient.v1.instances import Instances
class Client(object): class Client(object):
@@ -56,17 +54,17 @@ class Client(object):
# self.limits = limits.LimitsManager(self) # self.limits = limits.LimitsManager(self)
# extensions # extensions
self.flavors = Flavors(self) self.flavors = flavors.Flavors(self)
self.users = Users(self) self.users = users.Users(self)
self.databases = Databases(self) self.databases = databases.Databases(self)
self.backups = Backups(self) self.backups = backups.Backups(self)
self.instances = Instances(self) self.instances = instances.Instances(self)
self.limits = Limits(self) self.limits = limits.Limits(self)
self.root = Root(self) self.root = root.Root(self)
self.security_group_rules = SecurityGroupRules(self) self.security_group_rules = security_groups.SecurityGroupRules(self)
self.security_groups = SecurityGroups(self) self.security_groups = security_groups.SecurityGroups(self)
self.datastores = Datastores(self) self.datastores = datastores.Datastores(self)
self.datastore_versions = DatastoreVersions(self) self.datastore_versions = datastores.DatastoreVersions(self)
#self.hosts = Hosts(self) #self.hosts = Hosts(self)
#self.quota = Quotas(self) #self.quota = Quotas(self)
@@ -84,7 +82,7 @@ class Client(object):
setattr(self, extension.name, setattr(self, extension.name,
extension.manager_class(self)) extension.manager_class(self))
self.client = client.HTTPClient( self.client = trove_client.client.HTTPClient(
username, username,
password, password,
project_id, project_id,

View File

@@ -17,9 +17,7 @@
# under the License. # under the License.
from troveclient import base from troveclient import base
from troveclient.common import check_for_exceptions from troveclient import common
from troveclient.common import limit_url
from troveclient.common import Paginated
from troveclient.openstack.common.py3kcompat import urlutils from troveclient.openstack.common.py3kcompat import urlutils
@@ -46,17 +44,17 @@ class Databases(base.ManagerWithFind):
body = {"databases": databases} body = {"databases": databases}
url = "/instances/%s/databases" % instance_id url = "/instances/%s/databases" % instance_id
resp, body = self.api.client.post(url, body=body) 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): def delete(self, instance_id, dbname):
"""Delete an existing database in the specified instance""" """Delete an existing database in the specified instance"""
url = "/instances/%s/databases/%s" % (instance_id, dbname) url = "/instances/%s/databases/%s" % (instance_id, dbname)
resp, body = self.api.client.delete(url) 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): 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))
check_for_exceptions(resp, body) common.check_for_exceptions(resp, body)
if not body: if not body:
raise Exception("Call to " + url + raise Exception("Call to " + url +
" did not return a body.") " did not return a body.")
@@ -70,7 +68,9 @@ class Databases(base.ManagerWithFind):
next_marker = query_dict.get('marker', None) next_marker = query_dict.get('marker', None)
databases = body[response_key] databases = body[response_key]
databases = [self.resource_class(self, res) for res in databases] 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): def list(self, instance, limit=None, marker=None):
""" """

View File

@@ -17,8 +17,7 @@
# under the License. # under the License.
from troveclient import base from troveclient import base
from troveclient import common
from troveclient.common import check_for_exceptions
class Host(base.Resource): class Host(base.Resource):
@@ -47,7 +46,7 @@ class Hosts(base.ManagerWithFind):
""" """
url = "/mgmt/hosts/%s/instances/action" % host_id url = "/mgmt/hosts/%s/instances/action" % host_id
resp, body = self.api.client.post(url, body=body) 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): def update_all(self, host_id):
""" """

View File

@@ -18,10 +18,7 @@
# under the License. # under the License.
from troveclient import base from troveclient import base
from troveclient import common
from troveclient.common import check_for_exceptions
from troveclient.common import limit_url
from troveclient.common import Paginated
from troveclient.openstack.common.apiclient import exceptions from troveclient.openstack.common.apiclient import exceptions
from troveclient.openstack.common.py3kcompat import urlutils from troveclient.openstack.common.py3kcompat import urlutils
@@ -89,7 +86,7 @@ class Instances(base.ManagerWithFind):
return self._create("/instances", body, "instance") return self._create("/instances", body, "instance")
def _list(self, url, response_key, limit=None, marker=None): 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: if not body:
raise Exception("Call to " + url + " did not return a body.") raise Exception("Call to " + url + " did not return a body.")
links = body.get('links', []) links = body.get('links', [])
@@ -102,7 +99,9 @@ class Instances(base.ManagerWithFind):
next_marker = query_dict.get('marker', None) next_marker = query_dict.get('marker', None)
instances = body[response_key] instances = body[response_key]
instances = [self.resource_class(self, res) for res in instances] 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): def list(self, limit=None, marker=None):
""" """
@@ -147,7 +146,7 @@ class Instances(base.ManagerWithFind):
""" """
url = "/instances/%s/action" % instance_id url = "/instances/%s/action" % instance_id
resp, body = self.api.client.post(url, body=body) resp, body = self.api.client.post(url, body=body)
check_for_exceptions(resp, body) common.check_for_exceptions(resp, body)
if body: if body:
return self.resource_class(self, body, loaded=True) return self.resource_class(self, body, loaded=True)
return body return body

View File

@@ -17,13 +17,10 @@
# under the License. # under the License.
from troveclient import base from troveclient import base
from troveclient import common
from troveclient.common import check_for_exceptions
from troveclient.common import limit_url
from troveclient.common import Paginated
from troveclient.openstack.common.py3kcompat import urlutils from troveclient.openstack.common.py3kcompat import urlutils
from troveclient.v1.instances import Instance from troveclient.v1 import instances
from troveclient.v1.flavors import Flavor from troveclient.v1 import flavors
class RootHistory(base.Resource): class RootHistory(base.Resource):
@@ -36,14 +33,14 @@ class Management(base.ManagerWithFind):
""" """
Manage :class:`Instances` resources. Manage :class:`Instances` resources.
""" """
resource_class = Instance resource_class = instances.Instance
# Appease the abc gods # Appease the abc gods
def list(self): def list(self):
pass pass
def _list(self, url, response_key, limit=None, marker=None): 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: if not body:
raise Exception("Call to " + url + " did not return a body.") raise Exception("Call to " + url + " did not return a body.")
links = body.get('links', []) links = body.get('links', [])
@@ -56,7 +53,9 @@ class Management(base.ManagerWithFind):
next_marker = query_dict.get('marker', None) next_marker = query_dict.get('marker', None)
instances = body[response_key] instances = body[response_key]
instances = [self.resource_class(self, res) for res in instances] 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): def show(self, instance):
""" """
@@ -102,7 +101,7 @@ class Management(base.ManagerWithFind):
""" """
url = "/mgmt/instances/%s/action" % instance_id url = "/mgmt/instances/%s/action" % instance_id
resp, body = self.api.client.post(url, body=body) 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): def stop(self, instance_id):
body = {'stop': {}} body = {'stop': {}}
@@ -148,7 +147,7 @@ class MgmtFlavors(base.ManagerWithFind):
""" """
Manage :class:`Flavor` resources. Manage :class:`Flavor` resources.
""" """
resource_class = Flavor resource_class = flavors.Flavor
def __repr__(self): def __repr__(self):
return "<Flavors Manager at %s>" % id(self) return "<Flavors Manager at %s>" % id(self)

View File

@@ -18,7 +18,7 @@
# under the License. # under the License.
from troveclient import base from troveclient import base
from troveclient.common import check_for_exceptions from troveclient import common
class Quotas(base.ManagerWithFind): class Quotas(base.ManagerWithFind):
@@ -33,7 +33,7 @@ class Quotas(base.ManagerWithFind):
url = "/mgmt/quotas/%s" % tenant_id url = "/mgmt/quotas/%s" % tenant_id
resp, body = self.api.client.get(url) resp, body = self.api.client.get(url)
check_for_exceptions(resp, body) common.check_for_exceptions(resp, body)
if not body: if not body:
raise Exception("Call to " + url + " did not return a body.") raise Exception("Call to " + url + " did not return a body.")
if 'quotas' not in body: if 'quotas' not in body:
@@ -47,7 +47,7 @@ class Quotas(base.ManagerWithFind):
url = "/mgmt/quotas/%s" % id url = "/mgmt/quotas/%s" % id
body = {"quotas": quotas} body = {"quotas": quotas}
resp, body = self.api.client.put(url, body=body) resp, body = self.api.client.put(url, body=body)
check_for_exceptions(resp, body) common.check_for_exceptions(resp, body)
if not body: if not body:
raise Exception("Call to " + url + " did not return a body.") raise Exception("Call to " + url + " did not return a body.")
if 'quotas' not in body: if 'quotas' not in body:

View File

@@ -17,9 +17,8 @@
# under the License. # under the License.
from troveclient import base from troveclient import base
from troveclient.v1 import users from troveclient.v1 import users
from troveclient.common import check_for_exceptions from troveclient import common
class Root(base.ManagerWithFind): class Root(base.ManagerWithFind):
@@ -35,14 +34,14 @@ class Root(base.ManagerWithFind):
sepcified db instance sepcified db instance
""" """
resp, body = self.api.client.post(self.url % instance_id) 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'] return body['user']['name'], body['user']['password']
def is_root_enabled(self, instance_id): def is_root_enabled(self, instance_id):
""" Return True if root is enabled for the instance; """ Return True if root is enabled for the instance;
False otherwise""" False otherwise"""
resp, body = self.api.client.get(self.url % instance_id) 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) return self.resource_class(self, body, loaded=True)
# Appease the abc gods # Appease the abc gods

View File

@@ -18,9 +18,7 @@
# under the License. # under the License.
from troveclient import base from troveclient import base
from troveclient import common
from troveclient.common import limit_url
from troveclient.common import Paginated
from troveclient.openstack.common.apiclient import exceptions from troveclient.openstack.common.apiclient import exceptions
from troveclient.openstack.common.py3kcompat import urlutils from troveclient.openstack.common.py3kcompat import urlutils
@@ -40,7 +38,7 @@ class SecurityGroups(base.ManagerWithFind):
resource_class = SecurityGroup resource_class = SecurityGroup
def _list(self, url, response_key, limit=None, marker=None): 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: if not body:
raise Exception("Call to " + url + " did not return a body.") raise Exception("Call to " + url + " did not return a body.")
links = body.get('links', []) links = body.get('links', [])
@@ -53,7 +51,9 @@ class SecurityGroups(base.ManagerWithFind):
next_marker = query_dict.get('marker', None) next_marker = query_dict.get('marker', None)
instances = body[response_key] instances = body[response_key]
instances = [self.resource_class(self, res) for res in instances] 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): def list(self, limit=None, marker=None):
""" """

View File

@@ -18,10 +18,7 @@
from troveclient import base from troveclient import base
from troveclient.v1 import databases from troveclient.v1 import databases
from troveclient.common import check_for_exceptions from troveclient import common
from troveclient.common import limit_url
from troveclient.common import Paginated
from troveclient.common import quote_user_host
from troveclient.openstack.common.py3kcompat import urlutils from troveclient.openstack.common.py3kcompat import urlutils
@@ -46,18 +43,18 @@ class Users(base.ManagerWithFind):
body = {"users": users} body = {"users": users}
url = "/instances/%s/users" % instance_id url = "/instances/%s/users" % instance_id
resp, body = self.api.client.post(url, body=body) 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): def delete(self, instance_id, username, hostname=None):
"""Delete an existing user in the specified instance""" """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) url = "/instances/%s/users/%s" % (instance_id, user)
resp, body = self.api.client.delete(url) 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): 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))
check_for_exceptions(resp, body) common.check_for_exceptions(resp, body)
if not body: if not body:
raise Exception("Call to " + url + raise Exception("Call to " + url +
" did not return a body.") " did not return a body.")
@@ -70,7 +67,9 @@ class Users(base.ManagerWithFind):
query_dict = dict(urlutils.parse_qsl(parsed_url.query)) query_dict = dict(urlutils.parse_qsl(parsed_url.query))
next_marker = query_dict.get('marker', None) next_marker = query_dict.get('marker', None)
users = [self.resource_class(self, res) for res in body[response_key]] 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): def list(self, instance, limit=None, marker=None):
""" """
@@ -87,7 +86,7 @@ class Users(base.ManagerWithFind):
:rtype: :class:`User`. :rtype: :class:`User`.
""" """
user = quote_user_host(username, hostname) user = common.quote_user_host(username, hostname)
url = "/instances/%s/users/%s" % (instance_id, user) url = "/instances/%s/users/%s" % (instance_id, user)
return self._get(url, "user") return self._get(url, "user")
@@ -99,7 +98,7 @@ class Users(base.ManagerWithFind):
:rtype: :class:`User`. :rtype: :class:`User`.
""" """
instance_id = base.getid(instance) instance_id = base.getid(instance)
user = quote_user_host(username, hostname) user = common.quote_user_host(username, hostname)
user_dict = {} user_dict = {}
if not newuserattr: if not newuserattr:
newuserattr = {} newuserattr = {}
@@ -107,16 +106,16 @@ class Users(base.ManagerWithFind):
user_dict['user'] = newuserattr user_dict['user'] = newuserattr
url = "/instances/%s/users/%s" % (instance_id, user) url = "/instances/%s/users/%s" % (instance_id, user)
resp, body = self.api.client.put(url, body=user_dict) 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): def list_access(self, instance, username, hostname=None):
"""Show all databases the given user has access to. """ """Show all databases the given user has access to. """
instance_id = base.getid(instance) 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" url = "/instances/%(instance_id)s/users/%(user)s/databases"
local_vars = locals() local_vars = locals()
resp, body = self.api.client.get(url % local_vars) resp, body = self.api.client.get(url % local_vars)
check_for_exceptions(resp, body) common.check_for_exceptions(resp, body)
if not body: if not body:
raise Exception("Call to %s did not return to a body" % url) raise Exception("Call to %s did not return to a body" % url)
return [databases.Database(self, db) for db in body['databases']] 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): def grant(self, instance, username, databases, hostname=None):
"""Allow an existing user permissions to access a database.""" """Allow an existing user permissions to access a database."""
instance_id = base.getid(instance) 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" url = "/instances/%(instance_id)s/users/%(user)s/databases"
dbs = {'databases': [{'name': db} for db in databases]} dbs = {'databases': [{'name': db} for db in databases]}
local_vars = locals() local_vars = locals()
resp, body = self.api.client.put(url % local_vars, body=dbs) 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): def revoke(self, instance, username, database, hostname=None):
"""Revoke from an existing user access permissions to a database.""" """Revoke from an existing user access permissions to a database."""
instance_id = base.getid(instance) 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/" url = ("/instances/%(instance_id)s/users/%(user)s/"
"databases/%(database)s") "databases/%(database)s")
local_vars = locals() local_vars = locals()
resp, body = self.api.client.delete(url % local_vars) 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): def change_passwords(self, instance, users):
"""Change the password for one or more users.""" """Change the password for one or more users."""
@@ -147,4 +146,4 @@ class Users(base.ManagerWithFind):
user_dict = {"users": users} user_dict = {"users": users}
url = "/instances/%s/users" % instance_id url = "/instances/%s/users" % instance_id
resp, body = self.api.client.put(url, body=user_dict) resp, body = self.api.client.put(url, body=user_dict)
check_for_exceptions(resp, body) common.check_for_exceptions(resp, body)