public function testAPILimit() { $api_calls_to_leave_unmade_per_minute = 100; $archive_limit = 100; $num_twitter_errors = 100; $max_api_calls_per_crawl = 100; $api = new CrawlerTwitterAPIAccessorOAuth('an_oauth_access_token', 'an_oauth_access_token_secret', 'an_oauth_consumer_key', 'oauth_consumer_secret', $api_calls_to_leave_unmade_per_minute, $archive_limit, $num_twitter_errors, $max_api_calls_per_crawl); $api->init(); // no caller limits; $i = 0; for ($i = 1; $i <= 10; $i++) { $api->apiRequest("/bad_url"); } $this->assertEqual($i, 11); // with caller limits, 404 errors do count against limit $api->setCallerLimits(array('testAPILimit' => array('count' => 2, 'remaining' => 2))); $i = 0; try { for ($i = 0; $i <= 10; $i++) { $api->apiRequest("/bad_url"); } $this->fail("should throw APICallLimitExceededException"); } catch (APICallLimitExceededException $e) { $this->assertEqual($i, 2); } // with caller limits, 403 errors do count against limit $api->setCallerLimits(array('testAPILimit' => array('count' => 2, 'remaining' => 2))); $i = 0; try { for ($i = 0; $i <= 10; $i++) { $api->apiRequest("403"); } $this->fail("should throw APICallLimitExceededException"); } catch (APICallLimitExceededException $e) { $this->assertEqual($i, 2); } // all other errors shouldn't count againts caller limits foreach (array(405, 500, 502, 504) as $status) { $api->setCallerLimits(array('testAPILimit' => array('count' => 1, 'remaining' => 1))); $i = 0; for ($i = 0; $i <= 1; $i++) { $api->apiRequest($status); } $this->assertEqual($i, 2); } }