def test_timings_reset_window(): timings = ResourceTimings() # default timings timings.time_to_reset = timeutils.milliseconds() + 1000 # one second or 1000 ms from now assert not timings.has_reset_window_past() timings.time_to_reset = timeutils.milliseconds() - 1000 # one second or 1000 ms ago assert timings.has_reset_window_past()
def test_resource_analyzer_edge_case(): timings = ResourceTimings() # default timings timings.rate_limit_remaining = 0 # limit reached timings.time_to_reset = timeutils.milliseconds() - 2000 # past now timings.last_request_timestamp = timeutils.milliseconds() - 1000 # was done after reset resource = Resource("mock://test", timings, ResourceHeaders()) ra = ResourceAnalyzer("test-resource-analyzer") assert ra.is_edge_case(resource) assert ra.can_request(resource) == (False, ResourceStates.EdgeError)
def test_resource_analyzer_edge_case(): timings = ResourceTimings() # default timings timings.rate_limit_remaining = 0 # limit reached timings.time_to_reset = timeutils.milliseconds() - 2000 # past now timings.last_request_timestamp = timeutils.milliseconds( ) - 1000 # was done after reset resource = Resource("mock://test", timings, ResourceHeaders()) ra = ResourceAnalyzer("test-resource-analyzer") assert ra.is_edge_case(resource) assert ra.can_request(resource) == (False, ResourceStates.EdgeError)
def test_resource_with_owner(): """ Scenario: resource has an owner. """ timings = ResourceTimings() # default timings timings.rate_limit_remaining = 1000 timings.time_to_reset = timeutils.milliseconds() - 2000 # past now timings.last_request_timestamp = timeutils.milliseconds() - 1000 # was done after reset resource = Resource("mock://test", timings, ResourceHeaders(), owner="TestProcessor") ra = ResourceAnalyzer("test-resource-analyzer") assert ra.can_request(resource) == (False, ResourceStates.HasOwner)
def test_with_limit_remaining(): """ Scenario: limit is 1000. should be able to request. """ timings = ResourceTimings() # default timings timings.rate_limit_remaining = 1000 timings.time_to_reset = timeutils.milliseconds() - 2000 # past now timings.last_request_timestamp = timeutils.milliseconds() - 1000 # was done after reset resource = Resource("mock://test", timings, ResourceHeaders()) ra = ResourceAnalyzer("test-resource-analyzer") assert ra.can_request(resource)
def test_with_limit_remaining(): """ Scenario: limit is 1000. should be able to request. """ timings = ResourceTimings() # default timings timings.rate_limit_remaining = 1000 timings.time_to_reset = timeutils.milliseconds() - 2000 # past now timings.last_request_timestamp = timeutils.milliseconds( ) - 1000 # was done after reset resource = Resource("mock://test", timings, ResourceHeaders()) ra = ResourceAnalyzer("test-resource-analyzer") assert ra.can_request(resource)
def test_timings_interval_past(): timings = ResourceTimings() # default timings # Update timestamp to 2000ms ago timings.last_request_timestamp = timeutils.milliseconds() - 2000 # test that interval has not passed if set to 10000ms timings.interval = 10000 timings.update_interval_timestamp() assert timings.has_interval_passed() is False # set interval to 1000, which when added to the timestamp should be less than now timings.interval = 1000 timings.update_interval_timestamp() assert timings.has_interval_passed() is True # set the interval timestamp to now, this test can only be passed if the # interval PAST now, not equal now = timings.get_now() timings.interval_timestamp = now assert timings.has_interval_passed(now) is False # since the resolution is in milliseconds, one milliseconds is enough to ensure # the interval is passed timings.interval_timestamp = now - 1 # making it minus 1ms will make it past assert timings.has_interval_passed(now) is True
def test_resource_with_owner(): """ Scenario: resource has an owner. """ timings = ResourceTimings() # default timings timings.rate_limit_remaining = 1000 timings.time_to_reset = timeutils.milliseconds() - 2000 # past now timings.last_request_timestamp = timeutils.milliseconds( ) - 1000 # was done after reset resource = Resource("mock://test", timings, ResourceHeaders(), owner="TestProcessor") ra = ResourceAnalyzer("test-resource-analyzer") assert ra.can_request(resource) == (False, ResourceStates.HasOwner)
def test_limit_reached_reset_infuture(): """ Scenario: limit is 0, with time_to_reset in the future. Should not be able to request. """ timings = ResourceTimings() # default timings timings.rate_limit_remaining = 0 timings.time_to_reset = timeutils.milliseconds() + 2000 # in the future resource = Resource("mock://test", timings, ResourceHeaders()) ra = ResourceAnalyzer("test-resource-analyzer") assert ra.can_request(resource) == (False, ResourceStates.WaitingForReset)
def test_limit_reached_reset_ready(): """ Scenario: limit is 0, with time_to_reset passed Should be able to request. """ timings = ResourceTimings() # default timings timings.rate_limit_remaining = 0 timings.time_to_reset = timeutils.milliseconds() - 2000 # in the past # timings.last_request_timestamp = timeutils.milliseconds() - 1000 # was done after reset resource = Resource("mock://test", timings, ResourceHeaders()) ra = ResourceAnalyzer("test-resource-analyzer") assert ra.can_request(resource) == (True, None)
def test_waiting_for_interval(): """ Scenario: limit is 0, with time_to_reset in the future. Should not be able to request. """ timings = ResourceTimings() # default timings timings.rate_limit_remaining = 1000 timings.time_to_reset = timeutils.milliseconds() + 2000 # in the future timings.update_timestamp() timings.update_interval_timestamp() timings.interval = 10000 resource = Resource("mock://test", timings, ResourceHeaders()) ra = ResourceAnalyzer("test-resource-analyzer") assert ra.can_request(resource) == (False, ResourceStates.WaitingForInterval)
def has_reset_window_past(self): # compares now and if it is greater than the recorded reset window now = timeutils.milliseconds() return now > self.time_to_reset
def test_timings_requested_since_reset_window(): timings = ResourceTimings() # default timings timings.time_to_reset = timeutils.milliseconds() - 1000 # past timings.last_request_timestamp = timeutils.milliseconds() + 1000 # was done after reset assert timings.requested_since_reset()
def get_now(): return timeutils.milliseconds()