|
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,31 @@ 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) |
| 2307 | + |
| 2308 | + # Check changing rate |
| 2309 | + models.SiteConfiguration.objects.get_or_create( |
| 2310 | + key="THROTTLE_RATES", value={"user": "3/day"} |
| 2311 | + ) |
| 2312 | + for _ in range(3): |
| 2313 | + response = self.client.get( |
| 2314 | + reverse("api-v2:service-list"), HTTP_AUTHORIZATION=f"Token {token}" |
| 2315 | + ) |
| 2316 | + self.assertEqual(response.status_code, 200) |
| 2317 | + response = self.client.get( |
| 2318 | + reverse("api-v2:service-list"), HTTP_AUTHORIZATION=f"Token {token}" |
| 2319 | + ) |
| 2320 | + self.assertEqual(response.status_code, 429) |
0 commit comments