Mercurial > p > roundup > code
comparison test/rest_common.py @ 5937:5d0873a4de4a
fix rate limit headers - were ints/floats need to be strings
Running under gunicorn rest requests were crashing. Not all of the
values for the rate limit headers were strings. Some were
numbers. This caused the header generation for wsgi to fail. Now the
values are all strings.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Sun, 20 Oct 2019 20:56:56 -0400 |
| parents | 94a7669677ae |
| children | 25a813415d59 |
comparison
equal
deleted
inserted
replaced
| 5936:ed5c19fca083 | 5937:5d0873a4de4a |
|---|---|
| 999 self.assertFalse("Retry-After" in | 999 self.assertFalse("Retry-After" in |
| 1000 self.server.client.additional_headers) | 1000 self.server.client.additional_headers) |
| 1001 # remaining count is correct | 1001 # remaining count is correct |
| 1002 self.assertEqual( | 1002 self.assertEqual( |
| 1003 self.server.client.additional_headers["X-RateLimit-Remaining"], | 1003 self.server.client.additional_headers["X-RateLimit-Remaining"], |
| 1004 self.db.config['WEB_API_CALLS_PER_INTERVAL'] -1 - i | 1004 str(self.db.config['WEB_API_CALLS_PER_INTERVAL'] -1 - i) |
| 1005 ) | 1005 ) |
| 1006 | 1006 |
| 1007 # trip limit | 1007 # trip limit |
| 1008 self.server.client.additional_headers.clear() | 1008 self.server.client.additional_headers.clear() |
| 1009 results = self.server.dispatch('GET', | 1009 results = self.server.dispatch('GET', |
| 1012 print(results) | 1012 print(results) |
| 1013 self.assertEqual(self.server.client.response_code, 429) | 1013 self.assertEqual(self.server.client.response_code, 429) |
| 1014 | 1014 |
| 1015 self.assertEqual( | 1015 self.assertEqual( |
| 1016 self.server.client.additional_headers["X-RateLimit-Limit"], | 1016 self.server.client.additional_headers["X-RateLimit-Limit"], |
| 1017 self.db.config['WEB_API_CALLS_PER_INTERVAL']) | 1017 str(self.db.config['WEB_API_CALLS_PER_INTERVAL'])) |
| 1018 self.assertEqual( | 1018 self.assertEqual( |
| 1019 self.server.client.additional_headers["X-RateLimit-Limit-Period"], | 1019 self.server.client.additional_headers["X-RateLimit-Limit-Period"], |
| 1020 self.db.config['WEB_API_INTERVAL_IN_SEC']) | 1020 str(self.db.config['WEB_API_INTERVAL_IN_SEC'])) |
| 1021 self.assertEqual( | 1021 self.assertEqual( |
| 1022 self.server.client.additional_headers["X-RateLimit-Remaining"], | 1022 self.server.client.additional_headers["X-RateLimit-Remaining"], |
| 1023 0) | 1023 '0') |
| 1024 # value will be almost 60. Allow 1-2 seconds for all 20 rounds. | 1024 # value will be almost 60. Allow 1-2 seconds for all 20 rounds. |
| 1025 self.assertAlmostEqual( | 1025 self.assertAlmostEqual( |
| 1026 self.server.client.additional_headers["X-RateLimit-Reset"], | 1026 float(self.server.client.additional_headers["X-RateLimit-Reset"]), |
| 1027 59, delta=1) | 1027 59, delta=1) |
| 1028 self.assertEqual( | 1028 self.assertEqual( |
| 1029 str(self.server.client.additional_headers["Retry-After"]), | 1029 str(self.server.client.additional_headers["Retry-After"]), |
| 1030 "3.0") # check as string | 1030 "3") # check as string |
| 1031 | 1031 |
| 1032 print("Reset:", self.server.client.additional_headers["X-RateLimit-Reset"]) | 1032 print("Reset:", self.server.client.additional_headers["X-RateLimit-Reset"]) |
| 1033 print("Now realtime pre-sleep:", datetime.utcnow()) | 1033 print("Now realtime pre-sleep:", datetime.utcnow()) |
| 1034 sleep(3.1) # sleep as requested so we can do another login | 1034 sleep(3.1) # sleep as requested so we can do another login |
| 1035 print("Now realtime post-sleep:", datetime.utcnow()) | 1035 print("Now realtime post-sleep:", datetime.utcnow()) |
| 1047 | 1047 |
| 1048 self.assertEqual(self.server.client.response_code, 200) | 1048 self.assertEqual(self.server.client.response_code, 200) |
| 1049 | 1049 |
| 1050 self.assertEqual( | 1050 self.assertEqual( |
| 1051 self.server.client.additional_headers["X-RateLimit-Limit"], | 1051 self.server.client.additional_headers["X-RateLimit-Limit"], |
| 1052 self.db.config['WEB_API_CALLS_PER_INTERVAL']) | 1052 str(self.db.config['WEB_API_CALLS_PER_INTERVAL'])) |
| 1053 self.assertEqual( | 1053 self.assertEqual( |
| 1054 self.server.client.additional_headers["X-RateLimit-Limit-Period"], | 1054 self.server.client.additional_headers["X-RateLimit-Limit-Period"], |
| 1055 self.db.config['WEB_API_INTERVAL_IN_SEC']) | 1055 str(self.db.config['WEB_API_INTERVAL_IN_SEC'])) |
| 1056 self.assertEqual( | 1056 self.assertEqual( |
| 1057 self.server.client.additional_headers["X-RateLimit-Remaining"], | 1057 self.server.client.additional_headers["X-RateLimit-Remaining"], |
| 1058 0) | 1058 '0') |
| 1059 self.assertFalse("Retry-After" in | 1059 self.assertFalse("Retry-After" in |
| 1060 self.server.client.additional_headers) | 1060 self.server.client.additional_headers) |
| 1061 # we still need to wait a minute for everything to clear | 1061 # we still need to wait a minute for everything to clear |
| 1062 self.assertAlmostEqual( | 1062 self.assertAlmostEqual( |
| 1063 self.server.client.additional_headers["X-RateLimit-Reset"], | 1063 float(self.server.client.additional_headers["X-RateLimit-Reset"]), |
| 1064 59, delta=1) | 1064 59, delta=1) |
| 1065 | 1065 |
| 1066 # and make sure we need to wait another three seconds | 1066 # and make sure we need to wait another three seconds |
| 1067 # as we consumed the last api call | 1067 # as we consumed the last api call |
| 1068 results = self.server.dispatch('GET', | 1068 results = self.server.dispatch('GET', |
| 1070 self.empty_form) | 1070 self.empty_form) |
| 1071 | 1071 |
| 1072 self.assertEqual(self.server.client.response_code, 429) | 1072 self.assertEqual(self.server.client.response_code, 429) |
| 1073 self.assertEqual( | 1073 self.assertEqual( |
| 1074 str(self.server.client.additional_headers["Retry-After"]), | 1074 str(self.server.client.additional_headers["Retry-After"]), |
| 1075 "3.0") # check as string | 1075 "3") # check as string |
| 1076 | 1076 |
| 1077 json_dict = json.loads(b2s(results)) | 1077 json_dict = json.loads(b2s(results)) |
| 1078 self.assertEqual(json_dict['error']['msg'], | 1078 self.assertEqual(json_dict['error']['msg'], |
| 1079 "Api rate limits exceeded. Please wait: 3 seconds.") | 1079 "Api rate limits exceeded. Please wait: 3 seconds.") |
| 1080 | 1080 |
