Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
D
django-rest-framework
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
django-rest-framework
Commits
7bed352e
Commit
7bed352e
authored
Jun 11, 2011
by
markotibold
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
refactored and added new tests for per-user, per-view, and per-resource htrottling
parent
f854bc90
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
51 additions
and
51 deletions
+51
-51
djangorestframework/tests/throttling.py
+51
-51
No files found.
djangorestframework/tests/throttling.py
View file @
7bed352e
...
...
@@ -8,78 +8,77 @@ from django.core.cache import cache
from
djangorestframework.compat
import
RequestFactory
from
djangorestframework.views
import
View
from
djangorestframework.permissions
import
PerUserThrottling
,
Per
ResourceThrottling
from
djangorestframework.permissions
import
PerUserThrottling
,
Per
ViewThrottling
,
PerResourceThrottling
,
ConfigurationException
from
djangorestframework.resources
import
FormResource
class
MockView
(
View
):
permissions
=
(
PerUserThrottling
,
)
throttle
=
(
3
,
1
)
# 3 requests per second
def
get
(
self
,
request
):
return
'foo'
class
MockView1
(
View
):
permissions
=
(
PerResourceThrottling
,
)
throttle
=
(
3
,
1
)
# 3 requests per second
throttle
=
'3/sec'
# 3 requests per second
def
get
(
self
,
request
):
return
'foo'
urlpatterns
=
patterns
(
''
,
(
r'^$'
,
MockView
.
as_view
()),
(
r'^1$'
,
MockView1
.
as_view
()),
)
class
MockView1
(
MockView
):
permissions
=
(
PerViewThrottling
,
)
class
MockView2
(
MockView
):
permissions
=
(
PerResourceThrottling
,
)
#No resource set
class
MockView3
(
MockView2
):
resource
=
FormResource
class
ThrottlingTests
(
TestCase
):
urls
=
'djangorestframework.tests.throttling'
def
setUp
(
self
):
"""Reset the cache so that no throttles will be active"""
cache
.
clear
()
self
.
factory
=
RequestFactory
()
def
test_requests_are_throttled
(
self
):
"""Ensure request rate is limited"""
for
dummy
in
range
(
3
):
response
=
self
.
client
.
get
(
'/'
)
response
=
self
.
client
.
get
(
'/'
)
self
.
assertEqual
(
503
,
response
.
status_code
)
def
test_request_throttling_is_per_user
(
self
):
"""Ensure request rate is only limited per user, not globally"""
for
username
in
(
'testuser'
,
'another_testuser'
):
user
=
User
.
objects
.
create
(
username
=
username
)
user
.
set_password
(
'test'
)
user
.
save
()
self
.
assertTrue
(
self
.
client
.
login
(
username
=
'testuser'
,
password
=
'test'
),
msg
=
'Login Failed'
)
for
dummy
in
range
(
3
):
response
=
self
.
client
.
get
(
'/'
)
self
.
client
.
logout
()
self
.
assertTrue
(
self
.
client
.
login
(
username
=
'another_testuser'
,
password
=
'test'
),
msg
=
'Login failed'
)
response
=
self
.
client
.
get
(
'/'
)
self
.
assertEqual
(
200
,
response
.
status_code
)
def
test_request_throttling_is_per_resource
(
self
):
"""Ensure request rate is limited globally per View"""
for
username
in
(
'testuser'
,
'another_testuser'
):
user
=
User
.
objects
.
create
(
username
=
username
)
user
.
set_password
(
'test'
)
user
.
save
()
self
.
assertTrue
(
self
.
client
.
login
(
username
=
'testuser'
,
password
=
'test'
),
msg
=
'Login Failed'
)
for
dummy
in
range
(
3
):
response
=
self
.
client
.
get
(
'/1'
)
self
.
client
.
logout
()
self
.
assertTrue
(
self
.
client
.
login
(
username
=
'another_testuser'
,
password
=
'test'
),
msg
=
'Login failed'
)
response
=
self
.
client
.
get
(
'/1'
)
request
=
self
.
factory
.
get
(
'/'
)
for
dummy
in
range
(
4
):
response
=
MockView
.
as_view
()(
request
)
self
.
assertEqual
(
503
,
response
.
status_code
)
def
test_request_throttling_expires
(
self
):
"""Ensure request rate is limited for a limited duration only"""
for
dummy
in
range
(
3
):
response
=
self
.
client
.
get
(
'/'
)
response
=
self
.
client
.
get
(
'/'
)
request
=
self
.
factory
.
get
(
'/'
)
for
dummy
in
range
(
4
):
response
=
MockView
.
as_view
()(
request
)
self
.
assertEqual
(
503
,
response
.
status_code
)
time
.
sleep
(
1
)
response
=
self
.
client
.
get
(
'/'
)
response
=
MockView
.
as_view
()(
request
)
self
.
assertEqual
(
200
,
response
.
status_code
)
def
ensure_is_throttled
(
self
,
view
):
request
=
self
.
factory
.
get
(
'/'
)
request
.
user
=
User
.
objects
.
create
(
username
=
'a'
)
for
dummy
in
range
(
3
):
response
=
view
.
as_view
()(
request
)
request
.
user
=
User
.
objects
.
create
(
username
=
'b'
)
response
=
view
.
as_view
()(
request
)
self
.
assertEqual
(
503
,
response
.
status_code
)
def
test_request_throttling_is_per_user
(
self
):
"""Ensure request rate is only limited per user, not globally for PerUserTrottles"""
self
.
ensure_is_throttled
(
MockView
)
def
test_request_throttling_is_per_view
(
self
):
"""Ensure request rate is limited globally per View for PerViewThrottles"""
self
.
ensure_is_throttled
(
MockView1
)
def
test_request_throttling_is_per_resource
(
self
):
"""Ensure request rate is limited globally per Resource for PerResourceThrottles"""
self
.
ensure_is_throttled
(
MockView3
)
def
test_raises_no_resource_found
(
self
):
"""Ensure an Exception is raised when someone sets at per-resource throttle
on a view with no resource set."""
request
=
self
.
factory
.
get
(
'/'
)
view
=
MockView2
.
as_view
()
self
.
assertRaises
(
ConfigurationException
,
view
,
request
)
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment