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

Roundup Issue Tracker: http://roundup-tracker.org/