summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCerberus <matt.dietz@rackspace.com>2010-09-21 10:07:59 -0500
committerCerberus <matt.dietz@rackspace.com>2010-09-21 10:07:59 -0500
commit0880e49a4e9c9a246e8f4d7cc805d79947de095a (patch)
treed0acefdb6460ff650206955386264fc83e9ba74a
parent64dd3000c4a9b88719e86d1090097e35398d3838 (diff)
downloadnova-0880e49a4e9c9a246e8f4d7cc805d79947de095a.tar.gz
nova-0880e49a4e9c9a246e8f4d7cc805d79947de095a.tar.xz
nova-0880e49a4e9c9a246e8f4d7cc805d79947de095a.zip
Some more refactoring and another unit test
-rw-r--r--nova/api/rackspace/auth.py17
-rw-r--r--nova/db/api.py4
-rw-r--r--nova/db/sqlalchemy/api.py2
-rw-r--r--nova/tests/api/rackspace/auth.py51
-rw-r--r--nova/tests/api/rackspace/test_helper.py29
5 files changed, 58 insertions, 45 deletions
diff --git a/nova/api/rackspace/auth.py b/nova/api/rackspace/auth.py
index b29596880..1ef90c324 100644
--- a/nova/api/rackspace/auth.py
+++ b/nova/api/rackspace/auth.py
@@ -4,7 +4,7 @@ import time
import webob.exc
import webob.dec
import hashlib
-
+from nova import flags
from nova import auth
from nova import manager
from nova import db
@@ -12,10 +12,16 @@ from nova import db
class Context(object):
pass
-class BasicApiAuthManager(manager.Manager):
+class BasicApiAuthManager(object):
""" Implements a somewhat rudimentary version of Rackspace Auth"""
def __init__(self):
+ if not host:
+ host = FLAGS.host
+ self.host = host
+ if not db_driver:
+ db_driver = FLAGS.db_driver
+ self.db = utils.import_object(db_driver)
self.auth = auth.manager.AuthManager()
self.context = Context()
super(BasicApiAuthManager, self).__init__()
@@ -64,8 +70,8 @@ class BasicApiAuthManager(manager.Manager):
if delta.days >= 2:
self.db.auth_destroy_token(self.context, token)
else:
- user = self.auth.get_user(self.context, token['user_id'])
- return { 'id':user['id'] }
+ user = self.auth.get_user(token['user_id'])
+ return { 'id':user['uid'] }
return None
def _authorize_user(self, username, key):
@@ -79,7 +85,8 @@ class BasicApiAuthManager(manager.Manager):
token['cdn_management_url'] = ''
token['server_management_url'] = self._get_server_mgmt_url()
token['storage_url'] = ''
- self.db.auth_create_token(self.context, token, user['id'])
+ token['user_id'] = user['uid']
+ self.db.auth_create_token(self.context, token)
return token, user
return None, None
diff --git a/nova/db/api.py b/nova/db/api.py
index 80dde7a7a..0f0549edf 100644
--- a/nova/db/api.py
+++ b/nova/db/api.py
@@ -384,9 +384,9 @@ def auth_get_token(context, token_hash):
"""Retrieves a token given the hash representing it"""
return IMPL.auth_get_token(context, token_hash)
-def auth_create_token(context, token, user_id):
+def auth_create_token(context, token):
"""Creates a new token"""
- return IMPL.auth_create_token(context, token_hash, token, user_id)
+ return IMPL.auth_create_token(context, token_hash, token)
###################
diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py
index 681dec15e..78bc23b7b 100644
--- a/nova/db/sqlalchemy/api.py
+++ b/nova/db/sqlalchemy/api.py
@@ -551,7 +551,7 @@ def auth_get_token(_context, token_hash):
raise exception.NotFound('Token %s does not exist' % token_hash)
return tk
-def auth_create_token(_context, token, user_id):
+def auth_create_token(_context, token):
tk = models.AuthToken()
for k,v in token.iteritems():
tk[k] = v
diff --git a/nova/tests/api/rackspace/auth.py b/nova/tests/api/rackspace/auth.py
index 8ab10d94c..0f38ce79d 100644
--- a/nova/tests/api/rackspace/auth.py
+++ b/nova/tests/api/rackspace/auth.py
@@ -13,7 +13,8 @@ class Test(unittest.TestCase):
self.stubs = stubout.StubOutForTesting()
self.stubs.Set(nova.api.rackspace.auth.BasicApiAuthManager,
'__init__', test_helper.fake_auth_init)
- test_helper.auth_data = {}
+ test_helper.FakeAuthManager.auth_data = {}
+ test_helper.FakeAuthDatabase.data = {}
def tearDown(self):
self.stubs.UnsetAll()
@@ -21,7 +22,7 @@ class Test(unittest.TestCase):
def test_authorize_user(self):
f = test_helper.FakeAuthManager()
- f.add_user('derp', { 'id': 1, 'name':'herp' } )
+ f.add_user('derp', { 'uid': 1, 'name':'herp' } )
req = webob.Request.blank('/v1.0/')
req.headers['X-Auth-User'] = 'herp'
@@ -29,36 +30,34 @@ class Test(unittest.TestCase):
result = req.get_response(nova.api.API())
self.assertEqual(result.status, '204 No Content')
self.assertEqual(len(result.headers['X-Auth-Token']), 40)
+ self.assertEqual(result.headers['X-CDN-Management-Url'],
+ "")
+ self.assertEqual(result.headers['X-Storage-Url'], "")
+
+ def test_authorize_token(self):
+ f = test_helper.FakeAuthManager()
+ f.add_user('derp', { 'uid': 1, 'name':'herp' } )
+
+ req = webob.Request.blank('/v1.0/')
+ req.headers['X-Auth-User'] = 'herp'
+ req.headers['X-Auth-Key'] = 'derp'
+ result = req.get_response(nova.api.API())
+ self.assertEqual(result.status, '204 No Content')
+ self.assertEqual(len(result.headers['X-Auth-Token']), 40)
self.assertEqual(result.headers['X-Server-Management-Url'],
"https://foo/v1.0/")
self.assertEqual(result.headers['X-CDN-Management-Url'],
"")
self.assertEqual(result.headers['X-Storage-Url'], "")
- #def test_authorize_token(self):
- # auth = nova.api.rackspace.auth.FakeAuth()
- # auth.add_user('herp', 'derp')
-
- # req = webob.Request.blank('/v1.0/')
- # req.headers['X-Auth-User'] = 'herp'
- # req.headers['X-Auth-Key'] = 'derp'
- # result = req.get_response(nova.api.API())
- # self.assertEqual(result.status, '204 No Content')
- # self.assertEqual(len(result.headers['X-Auth-Token']), 40)
- # self.assertEqual(result.headers['X-Server-Management-Url'],
- # "server_management_url")
- # self.assertEqual(result.headers['X-CDN-Management-Url'],
- # "cdn_management_url")
- # self.assertEqual(result.headers['X-Storage-Url'], "storage_url")
-
- # token = result.headers['X-Auth-Token']
- # self.stubs.Set(nova.api.rackspace, 'APIRouter',
- # test_helper.FakeRouter)
- # req = webob.Request.blank('/v1.0/fake')
- # req.headers['X-Auth-Token'] = token
- # result = req.get_response(nova.api.API())
- # self.assertEqual(result.status, '200 OK')
- # self.assertEqual(result.headers['X-Test-Success'], 'True')
+ token = result.headers['X-Auth-Token']
+ self.stubs.Set(nova.api.rackspace, 'APIRouter',
+ test_helper.FakeRouter)
+ req = webob.Request.blank('/v1.0/fake')
+ req.headers['X-Auth-Token'] = token
+ result = req.get_response(nova.api.API())
+ self.assertEqual(result.status, '200 OK')
+ self.assertEqual(result.headers['X-Test-Success'], 'True')
def test_token_expiry(self):
self.destroy_called = False
diff --git a/nova/tests/api/rackspace/test_helper.py b/nova/tests/api/rackspace/test_helper.py
index 8d784854f..18d96d71e 100644
--- a/nova/tests/api/rackspace/test_helper.py
+++ b/nova/tests/api/rackspace/test_helper.py
@@ -1,10 +1,9 @@
import webob
import webob.dec
+import datetime
from nova.wsgi import Router
from nova import auth
-auth_data = {}
-
class Context(object):
pass
@@ -26,25 +25,33 @@ def fake_auth_init(self):
self.host = 'foo'
class FakeAuthDatabase(object):
+ data = {}
+
@staticmethod
def auth_get_token(context, token_hash):
- pass
+ return FakeAuthDatabase.data.get(token_hash, None)
@staticmethod
- def auth_create_token(context, token, user_id):
- pass
+ def auth_create_token(context, token):
+ token['created_at'] = datetime.datetime.now()
+ FakeAuthDatabase.data[token['token_hash']] = token
@staticmethod
def auth_destroy_token(context, token):
- pass
+ if FakeAuthDatabase.data.has_key(token['token_hash']):
+ del FakeAuthDatabase.data['token_hash']
class FakeAuthManager(object):
- def __init__(self):
- global auth_data
- self.data = auth_data
+ auth_data = {}
def add_user(self, key, user):
- self.data[key] = user
+ FakeAuthManager.auth_data[key] = user
+
+ def get_user(self, uid):
+ for k, v in FakeAuthManager.auth_data.iteritems():
+ if v['uid'] == uid:
+ return v
+ return None
def get_user_from_access_key(self, key):
- return self.data.get(key, None)
+ return FakeAuthManager.auth_data.get(key, None)