ApiErrorExtractor { public boolean rateLimited(IOException e) { ErrorInfo errorInfo = getErrorInfo(e); if (errorInfo != null) { String domain = errorInfo.getDomain(); boolean isRateLimitedOrGlobalDomain = USAGE_LIMITS_DOMAIN.equals(domain) || GLOBAL_DOMAIN.equals(domain); String reason = errorInfo.getReason(); boolean isRateLimitedReason = RATE_LIMITED_REASON.equals(reason) || USER_RATE_LIMITED_REASON.equals(reason); return isRateLimitedOrGlobalDomain && isRateLimitedReason; } return false; }  boolean requestFailure(IOException e); boolean accessDenied(IOException e); boolean badRequest(IOException e); boolean unauthorized(IOException e); boolean accessDeniedNonRecoverable(IOException e); boolean clientError(IOException e); boolean internalServerError(IOException e); boolean itemAlreadyExists(IOException e); boolean itemNotFound(IOException e); boolean fieldSizeTooLarge(IOException e); boolean resourceNotReady(IOException e); boolean preconditionNotMet(IOException e); boolean rangeNotSatisfiable(IOException e); boolean rateLimited(IOException e); boolean quotaExceeded(IOException e); boolean userProjectMissing(IOException e); boolean ioError(Throwable throwable); boolean socketError(Throwable throwable); boolean readTimedOut(IOException e); String getErrorMessage(IOException e); IOException toUserPresentableException(IOException e, String action); String toUserPresentableMessage(IOException e, @Nullable String action); String toUserPresentableMessage(IOException e); @Nullable String getDebugInfo(IOException e); @Nullable static GoogleJsonResponseException getJsonResponseException(Throwable throwable); static final ApiErrorExtractor INSTANCE; static final int STATUS_CODE_RANGE_NOT_SATISFIABLE; static final String GLOBAL_DOMAIN; static final String USAGE_LIMITS_DOMAIN; static final String RATE_LIMITED_REASON; static final String USER_RATE_LIMITED_REASON; static final String QUOTA_EXCEEDED_REASON; static final String ACCOUNT_DISABLED_REASON; static final String ACCESS_NOT_CONFIGURED_REASON; static final String RESOURCE_NOT_READY_REASON; static final String FIELD_SIZE_TOO_LARGE_REASON; static final String USER_PROJECT_MISSING_MESSAGE; }
@Test public void testRateLimited() { assertThat(errorExtractor.rateLimited(rateLimited)).isTrue(); assertThat(errorExtractor.rateLimited(new IOException(rateLimited))).isTrue(); assertThat(errorExtractor.rateLimited(new IOException(new IOException(rateLimited)))).isTrue(); assertThat(errorExtractor.rateLimited(notRateLimited)).isFalse(); assertThat(errorExtractor.rateLimited(new IOException(notRateLimited))).isFalse(); assertThat(errorExtractor.rateLimited(new IOException(statusOk))).isFalse(); assertThat(errorExtractor.rateLimited(null)).isFalse(); }
@Test public void testBigQueryRateLimited() { assertThat(errorExtractor.rateLimited(bigqueryRateLimited)).isTrue(); assertThat(errorExtractor.rateLimited(new IOException(bigqueryRateLimited))).isTrue(); assertThat(errorExtractor.rateLimited(new IOException(new IOException(bigqueryRateLimited)))) .isTrue(); assertThat(errorExtractor.rateLimited(notRateLimited)).isFalse(); }