|
2 | 2 | # These sources are released under the terms of the MIT license: see LICENSE |
3 | 3 |
|
4 | 4 |
|
| 5 | +import django.core.cache |
5 | 6 | from django.contrib.auth.models import User, Permission |
6 | 7 | from django.test import override_settings |
7 | 8 | from django.urls import reverse |
|
13 | 14 | class RestAPITest(tests.PromgenTest): |
14 | 15 | def setUp(self): |
15 | 16 | super().setUp() |
| 17 | + # Clear the cache before each test to reset throttling |
| 18 | + django.core.cache.cache.clear() |
16 | 19 |
|
17 | 20 | @override_settings(PROMGEN=tests.SETTINGS) |
18 | 21 | @override_settings(CELERY_TASK_ALWAYS_EAGER=True) |
@@ -2299,3 +2302,31 @@ def test_rest_shard(self): |
2299 | 2302 | ) |
2300 | 2303 | self.assertEqual(response.status_code, 200) |
2301 | 2304 | self.assertEqual(response.json(), expected) |
| 2305 | + |
| 2306 | + @override_settings(PROMGEN=tests.SETTINGS) |
| 2307 | + def test_throttling(self): |
| 2308 | + # Check throttling for authenticated users |
| 2309 | + token = Token.objects.filter(user__username="demo").first().key |
| 2310 | + for _ in range(1000): |
| 2311 | + response = self.client.get( |
| 2312 | + reverse("api-v2:service-list"), HTTP_AUTHORIZATION=f"Token {token}" |
| 2313 | + ) |
| 2314 | + self.assertEqual(response.status_code, 200) |
| 2315 | + response = self.client.get( |
| 2316 | + reverse("api-v2:service-list"), HTTP_AUTHORIZATION=f"Token {token}" |
| 2317 | + ) |
| 2318 | + self.assertEqual(response.status_code, 429) |
| 2319 | + |
| 2320 | + # Check changing rate |
| 2321 | + models.SiteConfiguration.objects.get_or_create( |
| 2322 | + key="THROTTLE_RATES", value={"user": "3/day"} |
| 2323 | + ) |
| 2324 | + for _ in range(3): |
| 2325 | + response = self.client.get( |
| 2326 | + reverse("api-v2:service-list"), HTTP_AUTHORIZATION=f"Token {token}" |
| 2327 | + ) |
| 2328 | + self.assertEqual(response.status_code, 200) |
| 2329 | + response = self.client.get( |
| 2330 | + reverse("api-v2:service-list"), HTTP_AUTHORIZATION=f"Token {token}" |
| 2331 | + ) |
| 2332 | + self.assertEqual(response.status_code, 429) |
0 commit comments