|
1 | 1 | # Copyright (c) 2018 LINE Corporation
|
2 | 2 | # These sources are released under the terms of the MIT license: see LICENSE
|
| 3 | +import django.core.cache |
3 | 4 | from django.contrib.auth.models import User, Permission
|
4 | 5 | from django.test import override_settings
|
5 | 6 | from django.urls import reverse
|
|
9 | 10 |
|
10 | 11 |
|
11 | 12 | class RestAPITest(tests.PromgenTest):
|
| 13 | + def setUp(self): |
| 14 | + super().setUp() |
| 15 | + # Clear the cache before each test to reset throttling |
| 16 | + django.core.cache.cache.clear() |
| 17 | + |
12 | 18 | @override_settings(PROMGEN=tests.SETTINGS)
|
13 | 19 | @override_settings(CELERY_TASK_ALWAYS_EAGER=True)
|
14 | 20 | def test_alert_blackhole(self):
|
@@ -2284,3 +2290,17 @@ def test_rest_shard(self):
|
2284 | 2290 | )
|
2285 | 2291 | self.assertEqual(response.status_code, 200)
|
2286 | 2292 | self.assertEqual(response.json(), expected)
|
| 2293 | + |
| 2294 | + @override_settings(PROMGEN=tests.SETTINGS) |
| 2295 | + def test_throttling(self): |
| 2296 | + # Check throttling for authenticated users |
| 2297 | + token = Token.objects.filter(user__username="demo").first().key |
| 2298 | + for _ in range(1000): |
| 2299 | + response = self.client.get( |
| 2300 | + reverse("api-v2:service-list"), HTTP_AUTHORIZATION=f"Token {token}" |
| 2301 | + ) |
| 2302 | + self.assertEqual(response.status_code, 200) |
| 2303 | + response = self.client.get( |
| 2304 | + reverse("api-v2:service-list"), HTTP_AUTHORIZATION=f"Token {token}" |
| 2305 | + ) |
| 2306 | + self.assertEqual(response.status_code, 429) |
0 commit comments