44
44
action = middleware.get_action_name(req)
45
45
self.assertEqual(action, action_name)
47
verify('PUT', '/servers/4', 'PUT')
48
verify('DELETE', '/servers/4', 'DELETE')
49
verify('POST', '/images/4', 'POST')
50
verify('POST', '/servers/4', 'POST servers')
51
verify('GET', '/foo?a=4&changes-since=never&b=5', 'GET changes-since')
52
verify('GET', '/foo?a=4&monkeys-since=never&b=5', None)
53
verify('GET', '/servers/4', None)
54
verify('HEAD', '/servers/4', None)
47
verify('PUT', '/fake/servers/4', 'PUT')
48
verify('DELETE', '/fake/servers/4', 'DELETE')
49
verify('POST', '/fake/images/4', 'POST')
50
verify('POST', '/fake/servers/4', 'POST servers')
51
verify('GET', '/fake/foo?a=4&changes-since=never&b=5',
53
verify('GET', '/fake/foo?a=4&monkeys-since=never&b=5', None)
54
verify('GET', '/fake/servers/4', None)
55
verify('HEAD', '/fake/servers/4', None)
56
57
def exhaust(self, middleware, method, url, username, times):
57
58
req = Request.blank(url, dict(REQUEST_METHOD=method),
68
69
def test_single_action(self):
69
70
middleware = RateLimitingMiddleware(simple_wsgi)
70
self.exhaust(middleware, 'DELETE', '/servers/4', 'usr1', 100)
71
self.exhaust(middleware, 'DELETE', '/servers/4', 'usr2', 100)
71
self.exhaust(middleware, 'DELETE', '/fake/servers/4', 'usr1', 100)
72
self.exhaust(middleware, 'DELETE', '/fake/servers/4', 'usr2', 100)
73
74
def test_POST_servers_action_implies_POST_action(self):
74
75
middleware = RateLimitingMiddleware(simple_wsgi)
75
self.exhaust(middleware, 'POST', '/servers/4', 'usr1', 10)
76
self.exhaust(middleware, 'POST', '/images/4', 'usr2', 10)
76
self.exhaust(middleware, 'POST', '/fake/servers/4', 'usr1', 10)
77
self.exhaust(middleware, 'POST', '/fake/images/4', 'usr2', 10)
77
78
self.assertTrue(set(middleware.limiter._levels) == \
78
79
set(['usr1:POST', 'usr1:POST servers', 'usr2:POST']))
81
82
middleware = RateLimitingMiddleware(simple_wsgi)
82
83
# Use up all of our "POST" allowance for the minute, 5 times
84
self.exhaust(middleware, 'POST', '/servers/4', 'usr1', 10)
85
self.exhaust(middleware, 'POST', '/fake/servers/4', 'usr1', 10)
85
86
# Reset the 'POST' action counter.
86
87
del middleware.limiter._levels['usr1:POST']
87
88
# All 50 daily "POST servers" actions should be all used up
88
self.exhaust(middleware, 'POST', '/servers/4', 'usr1', 0)
89
self.exhaust(middleware, 'POST', '/fake/servers/4', 'usr1', 0)
90
91
def test_proxy_ctor_works(self):
91
92
middleware = RateLimitingMiddleware(simple_wsgi)