summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nova/api/openstack/__init__.py4
-rw-r--r--nova/tests/api/openstack/test_auth.py35
2 files changed, 37 insertions, 2 deletions
diff --git a/nova/api/openstack/__init__.py b/nova/api/openstack/__init__.py
index 5e81ba2bd..5706dbc09 100644
--- a/nova/api/openstack/__init__.py
+++ b/nova/api/openstack/__init__.py
@@ -106,11 +106,11 @@ class RateLimitingMiddleware(wsgi.Middleware):
If the request should be rate limited, return a 413 status with a
Retry-After header giving the time when the request would succeed.
"""
- username = req.headers['X-Auth-User']
+ user_id = req.environ['nova.context']['user']['id']
action_name = self.get_action_name(req)
if not action_name: # not rate limited
return self.application
- delay = self.get_delay(action_name, username)
+ delay = self.get_delay(action_name, user_id)
if delay:
# TODO(gundlach): Get the retry-after format correct.
exc = webob.exc.HTTPRequestEntityTooLarge(
diff --git a/nova/tests/api/openstack/test_auth.py b/nova/tests/api/openstack/test_auth.py
index bbfb0fcea..61d17d7e8 100644
--- a/nova/tests/api/openstack/test_auth.py
+++ b/nova/tests/api/openstack/test_auth.py
@@ -106,5 +106,40 @@ class Test(unittest.TestCase):
result = req.get_response(nova.api.API())
self.assertEqual(result.status, '401 Unauthorized')
+
+class TestLimiter(unittest.TestCase):
+ def setUp(self):
+ self.stubs = stubout.StubOutForTesting()
+ self.stubs.Set(nova.api.openstack.auth.BasicApiAuthManager,
+ '__init__', fakes.fake_auth_init)
+ fakes.FakeAuthManager.auth_data = {}
+ fakes.FakeAuthDatabase.data = {}
+ fakes.stub_out_networking(self.stubs)
+
+ def tearDown(self):
+ self.stubs.UnsetAll()
+ fakes.fake_data_store = {}
+
+ def test_authorize_token(self):
+ f = fakes.FakeAuthManager()
+ f.add_user('derp', nova.auth.manager.User(1, 'herp', None, None, None))
+
+ 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(len(result.headers['X-Auth-Token']), 40)
+
+ token = result.headers['X-Auth-Token']
+ self.stubs.Set(nova.api.openstack, 'APIRouter',
+ fakes.FakeRouter)
+ req = webob.Request.blank('/v1.0/fake')
+ req.method = 'POST'
+ 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')
+
+
if __name__ == '__main__':
unittest.main()