| 
									
										
										
										
											2017-06-05 18:09:03 +08:00
										 |  |  | from mock import patch | 
					
						
							| 
									
										
										
										
											2017-06-05 10:02:02 +08:00
										 |  |  | import time | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from django.core.urlresolvers import reverse | 
					
						
							|  |  |  | from django.test import override_settings | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-05 18:09:03 +08:00
										 |  |  | from seahub.api2.throttling import SimpleRateThrottle | 
					
						
							| 
									
										
										
										
											2017-06-05 10:02:02 +08:00
										 |  |  | from seahub.test_utils import BaseTestCase | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ThrottingsTest(BaseTestCase): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def setUp(self): | 
					
						
							| 
									
										
										
										
											2017-06-05 18:09:03 +08:00
										 |  |  |         # clear cache between every test case to avoid cache issue in throtting | 
					
						
							|  |  |  |         self.clear_cache() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-05 10:02:02 +08:00
										 |  |  |         self.login_as(self.user) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-05 18:09:03 +08:00
										 |  |  |     @patch.object(SimpleRateThrottle, 'get_rate') | 
					
						
							|  |  |  |     def test_default(self, mock_get_rate): | 
					
						
							|  |  |  |         mock_get_rate.return_value = '10/minute' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-05 10:02:02 +08:00
										 |  |  |         for i in range(12): | 
					
						
							|  |  |  |             res = self.client.get(reverse('api2-pub-repos')) | 
					
						
							| 
									
										
										
										
											2017-06-05 18:09:03 +08:00
										 |  |  |             if i >= 10: | 
					
						
							| 
									
										
										
										
											2017-06-05 10:02:02 +08:00
										 |  |  |                 assert res.status_code == 429 | 
					
						
							| 
									
										
										
										
											2017-06-05 18:09:03 +08:00
										 |  |  |             else: | 
					
						
							|  |  |  |                 assert res.status_code == 200 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-05 10:02:02 +08:00
										 |  |  |             time.sleep(0.1) | 
					
						
							| 
									
										
										
										
											2017-06-05 18:09:03 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     @override_settings(REST_FRAMEWORK_THROTTING_WHITELIST=['127.0.0.1']) | 
					
						
							|  |  |  |     @patch.object(SimpleRateThrottle, 'get_rate') | 
					
						
							|  |  |  |     def test_whitelist(self, mock_get_rate): | 
					
						
							|  |  |  |         mock_get_rate.return_value = '10/minute' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         for i in range(12): | 
					
						
							| 
									
										
										
										
											2017-06-05 10:02:02 +08:00
										 |  |  |             res = self.client.get(reverse('api2-pub-repos')) | 
					
						
							| 
									
										
										
										
											2017-06-05 18:09:03 +08:00
										 |  |  |             assert res.status_code == 200 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             time.sleep(0.1) |