Add error handling for keystone client

Fixes #37
This commit is contained in:
Fabien Boucher 2013-04-10 15:59:33 +02:00
parent e3b7f64dbc
commit 68c2517abf
2 changed files with 71 additions and 7 deletions

View File

@ -39,6 +39,8 @@ import StringIO
from swiftclient import client as sclient
from swiftclient.client import ClientException
from keystoneclient.exceptions import ClientException as KSClientException
import eventlet
sys.path.append("../")
@ -89,8 +91,13 @@ def create_swift_user(client, account_name, account_id, user_amount):
client.roles.add_user_role(uid.id, roleid, account_id)
return (user, uid.id, roleid)
for i in range(user_amount):
ret = _create_user(account_name, account_id)
users.append(ret)
try:
ret = _create_user(account_name, account_id)
logging.info('Users created %s in account %s' %
(str(ret), account_id))
users.append(ret)
except KSClientException:
logging.warn('Unable to create an user in account %s' % account_id)
return users
@ -101,10 +108,13 @@ def create_swift_account(client, pile,
def _create_account(user_amount):
account = get_rand_str(mode='account_')
# Create a tenant. In swift this is an account
account_id = client.tenants.create(account).id
logging.info('Account created %s' % account)
try:
account_id = client.tenants.create(account).id
logging.info('Account created %s' % account)
except KSClientException:
logging.warn('Unable to create account %s' % account)
return None, None, None
r = create_swift_user(client, account, account_id, user_amount)
logging.info('Users created %s in account %s' % (str(r), account))
return account, account_id, r
created = {}
# Spawn a greenlet for each account
@ -114,8 +124,9 @@ def create_swift_account(client, pile,
logging.info("[Keystone Start OPs %s/%s]" % (i, account_amount))
pile.spawn(_create_account, user_amount)
for account, account_id, ret in pile:
index[(account, account_id)] = ret
created[(account, account_id)] = ret
if account is not None:
index[(account, account_id)] = ret
created[(account, account_id)] = ret
return created

View File

@ -18,7 +18,10 @@
import eventlet
import swiftclient
from keystoneclient.exceptions import ClientException as KSClientException
from fakes import FakeKSClient
from fakes import FakeKSTenant
from fakes import FakeKSUser
from fakes import FakeSWConnection
@ -166,6 +169,30 @@ class TestFiller(base.TestCase):
self.assertEqual(self.create_cnt, 1)
self.assertEqual(self.role_cnt, 1)
def test_create_swift_user_fail(self):
self.pa = 0
def create(*args, **kargs):
if self.pa == 0:
self.pa += 1
raise KSClientException('Fake msg')
else:
self.pa += 1
return FakeKSUser()
def add_user_role(*args, **kargs):
pass
co = utils.get_config('auth',
'keystone_origin_admin_credentials').split(':')
tenant_name, username, password = co
client = FakeKSClient()
client.roles.add_user_role = add_user_role
client.users.create = create
users = filler.create_swift_user(client, 'account1', 'account1_id', 3)
self.assertEqual(len(users), 2)
def test_create_swift_account(self):
self.ret_index = {}
self.user_cnt = 0
@ -183,6 +210,32 @@ class TestFiller(base.TestCase):
self.assertEqual(self.user_cnt, 1)
self.assertEqual(len(self.ret_index.keys()), 1)
def test_create_swift_account_fail(self):
self.ret_index = {}
self.pa = 0
def create_tenant(*args):
if self.pa == 0:
self.pa += 1
raise KSClientException('Fake msg')
else:
self.pa += 1
return FakeKSTenant('foo1')
def create_swift_user(*args):
pass
client = FakeKSClient()
self.stubs.Set(client.tenants, 'create', create_tenant)
self.stubs.Set(filler, 'create_swift_user', create_swift_user)
concurrency = int(utils.get_config('filler', 'concurrency'))
pile = eventlet.GreenPile(concurrency)
filler.create_swift_account(client, pile, 3, 1, self.ret_index)
self.assertEqual(len(self.ret_index.keys()), 2)
def test_delete_account(self):
self.delete_t_cnt = 0
self.delete_u_cnt = 0