|
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):
|
@@ -1787,3 +1793,24 @@ def test_rest_shard(self):
|
1787 | 1793 | response = self.client.get(reverse("api-v2:shard-projects", args=[1]))
|
1788 | 1794 | self.assertEqual(response.status_code, 200)
|
1789 | 1795 | self.assertEqual(response.json(), expected)
|
| 1796 | + |
| 1797 | + @override_settings(PROMGEN=tests.SETTINGS) |
| 1798 | + def test_throttling(self): |
| 1799 | + # Check throttling for anonymous users |
| 1800 | + for _ in range(100): |
| 1801 | + response = self.client.get(reverse("api-v2:service-list")) |
| 1802 | + self.assertEqual(response.status_code, 200) |
| 1803 | + response = self.client.get(reverse("api-v2:service-list")) |
| 1804 | + self.assertEqual(response.status_code, 429) |
| 1805 | + |
| 1806 | + # Check throttling for authenticated users |
| 1807 | + token = Token.objects.filter(user__username="demo").first().key |
| 1808 | + for _ in range(1000): |
| 1809 | + response = self.client.get( |
| 1810 | + reverse("api-v2:service-list"), HTTP_AUTHORIZATION=f"Token {token}" |
| 1811 | + ) |
| 1812 | + self.assertEqual(response.status_code, 200) |
| 1813 | + response = self.client.get( |
| 1814 | + reverse("api-v2:service-list"), HTTP_AUTHORIZATION=f"Token {token}" |
| 1815 | + ) |
| 1816 | + self.assertEqual(response.status_code, 429) |
0 commit comments