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