~ubuntu-branches/ubuntu/quantal/nova/quantal-proposed

« back to all changes in this revision

Viewing changes to nova/tests/api/openstack/__init__.py

  • Committer: Bazaar Package Importer
  • Author(s): Chuck Short
  • Date: 2011-01-21 11:48:06 UTC
  • mto: This revision was merged to the branch mainline in revision 9.
  • Revision ID: james.westby@ubuntu.com-20110121114806-v8fvnnl6az4m4ohv
Tags: upstream-2011.1~bzr597
ImportĀ upstreamĀ versionĀ 2011.1~bzr597

Show diffs side-by-side

added added

removed removed

Lines of Context:
15
15
#    License for the specific language governing permissions and limitations
16
16
#    under the License.
17
17
 
 
18
import webob.dec
18
19
import unittest
19
20
 
20
 
from nova.api.openstack import limited
21
 
from nova.api.openstack import RateLimitingMiddleware
22
 
from nova.tests.api.fakes import APIStub
 
21
from nova import context
 
22
from nova import flags
 
23
from nova.api.openstack.ratelimiting import RateLimitingMiddleware
 
24
from nova.api.openstack.common import limited
 
25
from nova.tests.api.openstack import fakes
23
26
from webob import Request
24
27
 
 
28
FLAGS = flags.FLAGS
 
29
 
 
30
 
 
31
@webob.dec.wsgify
 
32
def simple_wsgi(req):
 
33
    return ""
 
34
 
25
35
 
26
36
class RateLimitingMiddlewareTest(unittest.TestCase):
27
37
 
28
38
    def test_get_action_name(self):
29
 
        middleware = RateLimitingMiddleware(APIStub())
 
39
        middleware = RateLimitingMiddleware(simple_wsgi)
30
40
 
31
41
        def verify(method, url, action_name):
32
42
            req = Request.blank(url)
46
56
    def exhaust(self, middleware, method, url, username, times):
47
57
        req = Request.blank(url, dict(REQUEST_METHOD=method),
48
58
                            headers={'X-Auth-User': username})
 
59
        req.environ['nova.context'] = context.RequestContext(username,
 
60
                            username)
49
61
        for i in range(times):
50
62
            resp = req.get_response(middleware)
51
63
            self.assertEqual(resp.status_int, 200)
54
66
        self.assertTrue('Retry-After' in resp.headers)
55
67
 
56
68
    def test_single_action(self):
57
 
        middleware = RateLimitingMiddleware(APIStub())
 
69
        middleware = RateLimitingMiddleware(simple_wsgi)
58
70
        self.exhaust(middleware, 'DELETE', '/servers/4', 'usr1', 100)
59
71
        self.exhaust(middleware, 'DELETE', '/servers/4', 'usr2', 100)
60
72
 
61
73
    def test_POST_servers_action_implies_POST_action(self):
62
 
        middleware = RateLimitingMiddleware(APIStub())
 
74
        middleware = RateLimitingMiddleware(simple_wsgi)
63
75
        self.exhaust(middleware, 'POST', '/servers/4', 'usr1', 10)
64
76
        self.exhaust(middleware, 'POST', '/images/4', 'usr2', 10)
65
 
        self.assertTrue(set(middleware.limiter._levels) ==
 
77
        self.assertTrue(set(middleware.limiter._levels) == \
66
78
                        set(['usr1:POST', 'usr1:POST servers', 'usr2:POST']))
67
79
 
68
80
    def test_POST_servers_action_correctly_ratelimited(self):
69
 
        middleware = RateLimitingMiddleware(APIStub())
 
81
        middleware = RateLimitingMiddleware(simple_wsgi)
70
82
        # Use up all of our "POST" allowance for the minute, 5 times
71
83
        for i in range(5):
72
84
            self.exhaust(middleware, 'POST', '/servers/4', 'usr1', 10)
76
88
        self.exhaust(middleware, 'POST', '/servers/4', 'usr1', 0)
77
89
 
78
90
    def test_proxy_ctor_works(self):
79
 
        middleware = RateLimitingMiddleware(APIStub())
 
91
        middleware = RateLimitingMiddleware(simple_wsgi)
80
92
        self.assertEqual(middleware.limiter.__class__.__name__, "Limiter")
81
 
        middleware = RateLimitingMiddleware(APIStub(), service_host='foobar')
 
93
        middleware = RateLimitingMiddleware(simple_wsgi, service_host='foobar')
82
94
        self.assertEqual(middleware.limiter.__class__.__name__, "WSGIAppProxy")
83
95
 
84
96