@Override public ApiFuture<List<MutateRowsResponse>> futureCall( MutateRowsRequest request, ApiCallContext context) { return ApiFutures.immediateFailedFuture(rpcError); } };
@Override public ApiFuture<List<MutateRowsResponse>> futureCall( MutateRowsRequest request, ApiCallContext context) { return ApiFutures.immediateFailedFuture(rpcError); } };
@Test public void noRollbackOnBeginFailure() throws Exception { doReturn(ApiFutures.immediateFailedFuture(new Exception("Expected exception"))) .when(firestoreMock) .sendRequest(requestCapture.capture(), Matchers.<UnaryCallable<Message, Message>>any()); ApiFuture<String> transaction = firestoreMock.runTransaction( new Transaction.Function<String>() { @Override public String updateCallback(Transaction transaction) { fail(); return null; } }, options); try { transaction.get(); fail(); } catch (Exception e) { assertTrue(e.getMessage().endsWith("Expected exception")); } List<Message> requests = requestCapture.getAllValues(); assertEquals(1, requests.size()); }
@Test public void testExistsFalse() { // Setup NotFoundException exception = new NotFoundException("fake-error", null, GrpcStatusCode.of(Status.Code.NOT_FOUND), false); Mockito.when(mockGetInstanceCallable.futureCall(Matchers.any(GetInstanceRequest.class))) .thenReturn( ApiFutures.<com.google.bigtable.admin.v2.Instance>immediateFailedFuture(exception)); // Execute boolean found = adminClient.exists(INSTANCE_ID); // Verify assertThat(found).isFalse(); } }
@Test public void testExistsFalse() { // Setup NotFoundException exception = new NotFoundException("fake error", null, GrpcStatusCode.of(Status.Code.NOT_FOUND), false); Mockito.when(mockGetTableCallable.futureCall(Matchers.any(GetTableRequest.class))) .thenReturn( ApiFutures.<com.google.bigtable.admin.v2.Table>immediateFailedFuture(exception)); // Execute boolean found = adminClient.exists(TABLE_ID); // Verify assertThat(found).isFalse(); } }
@Override public ResponseT call() { try { // NOTE: unlike gax's AttemptCallable, this ignores rpc timeouts externalFuture.setAttemptFuture(new NonCancellableFuture<ResponseT>()); if (externalFuture.isDone()) { return null; } ApiFuture<ResponseT> internalFuture = callable.futureCall(request, callContext); externalFuture.setAttemptFuture(internalFuture); } catch (Throwable e) { externalFuture.setAttemptFuture(ApiFutures.<ResponseT>immediateFailedFuture(e)); } return null; } }
externalFuture.setAttemptFuture(ApiFutures.<Void>immediateFailedFuture(e));
@Test public void canReturnNull() throws Exception { doReturn(beginResponse()) .doReturn(ApiFutures.immediateFailedFuture(new Exception())) .doReturn(beginResponse(ByteString.copyFromUtf8("foo2"))) .doReturn(commitResponse(0, 0)) .when(firestoreMock) .sendRequest(requestCapture.capture(), Matchers.<UnaryCallable<Message, Message>>any()); ApiFuture<String> transaction = firestoreMock.runTransaction( new Transaction.Function<String>() { @Override public String updateCallback(Transaction transaction) { return null; } }, options); assertEquals(null, transaction.get()); }
@Test public void limitsRetriesWithFailure() throws Exception { doReturn(beginResponse(ByteString.copyFromUtf8("foo1"))) .doReturn(ApiFutures.immediateFailedFuture(new Exception())) .doReturn(beginResponse(ByteString.copyFromUtf8("foo2"))) .doReturn(ApiFutures.immediateFailedFuture(new Exception())) .doReturn(beginResponse(ByteString.copyFromUtf8("foo3"))) .doReturn(ApiFutures.immediateFailedFuture(new Exception())) .doReturn(beginResponse(ByteString.copyFromUtf8("foo4"))) .doReturn(ApiFutures.immediateFailedFuture(new Exception())) .doReturn(beginResponse(ByteString.copyFromUtf8("foo5"))) .doReturn(ApiFutures.immediateFailedFuture(new Exception())) .when(firestoreMock) .sendRequest(requestCapture.capture(), Matchers.<UnaryCallable<Message, Message>>any());
@Test public void testGenerateFailure() throws Exception { GenerateConsistencyTokenRequest expectedRequest = GenerateConsistencyTokenRequest.newBuilder().setName(TABLE_NAME.toString()).build(); FakeApiException fakeError = new FakeApiException("fake", null, Code.INTERNAL, false); Mockito.when(mockGenerateConsistencyTokenCallable.futureCall(expectedRequest, CALL_CONTEXT)) .thenReturn(ApiFutures.<GenerateConsistencyTokenResponse>immediateFailedFuture(fakeError)); ApiFuture<Void> future = callable.futureCall(TABLE_NAME, CALL_CONTEXT); Throwable actualError = null; try { future.get(); } catch (ExecutionException e) { actualError = e.getCause(); } assertThat(actualError).isSameAs(fakeError); }
@Test public void limitsRetriesWithSuccess() throws Exception { doReturn(beginResponse(ByteString.copyFromUtf8("foo1"))) .doReturn(ApiFutures.immediateFailedFuture(new Exception())) .doReturn(beginResponse(ByteString.copyFromUtf8("foo2"))) .doReturn(ApiFutures.immediateFailedFuture(new Exception())) .doReturn(beginResponse(ByteString.copyFromUtf8("foo3"))) .doReturn(ApiFutures.immediateFailedFuture(new Exception())) .doReturn(beginResponse(ByteString.copyFromUtf8("foo4"))) .doReturn(ApiFutures.immediateFailedFuture(new Exception())) .doReturn(beginResponse(ByteString.copyFromUtf8("foo5"))) .doReturn(ApiFutures.immediateFailedFuture(new Exception())) .doReturn(beginResponse(ByteString.copyFromUtf8("foo6"))) .doReturn(commitResponse(0, 0))
@Test public void testCheckFailure() throws Exception { GenerateConsistencyTokenRequest expectedRequest = GenerateConsistencyTokenRequest.newBuilder().setName(TABLE_NAME.toString()).build(); GenerateConsistencyTokenResponse expectedResponse = GenerateConsistencyTokenResponse.newBuilder().setConsistencyToken("fake-token").build(); Mockito.when(mockGenerateConsistencyTokenCallable.futureCall(expectedRequest, CALL_CONTEXT)) .thenReturn(ApiFutures.immediateFuture(expectedResponse)); CheckConsistencyRequest expectedRequest2 = CheckConsistencyRequest.newBuilder() .setName(TABLE_NAME.toString()) .setConsistencyToken("fake-token") .build(); FakeApiException expectedError = new FakeApiException("fake", null, Code.INTERNAL, false); Mockito.when(mockCheckConsistencyCallable.futureCall(expectedRequest2, CALL_CONTEXT)) .thenReturn(ApiFutures.<CheckConsistencyResponse>immediateFailedFuture(expectedError)); ApiFuture<Void> future = callable.futureCall(TABLE_NAME, CALL_CONTEXT); Throwable actualError = null; try { future.get(); } catch (ExecutionException e) { actualError = e.getCause(); } assertThat(actualError).isSameAs(expectedError); }
@Override public ApiFuture<String> createExceptionalFuture(Exception exception) { return ApiFutures.immediateFailedFuture(exception); } }
@Override public ApiFuture<Integer> futureCall(Integer request, ApiCallContext context) { return ApiFutures.immediateFailedFuture(exception); } };
@Override public ApiFuture<OperationSnapshot> futureCall(Integer request, ApiCallContext context) { return ApiFutures.immediateFailedFuture( new UnsupportedOperationException("Unexpected call to start operation")); } };
@Override public ApiFuture<Empty> futureCall( CancelOperationRequest request, ApiCallContext context) { if (!request.getName().equals("poseidon")) { return ApiFutures.immediateFailedFuture( new IllegalStateException("Unexpected request: " + request)); } else { return ApiFutures.immediateFuture(Empty.getDefaultInstance()); } } });
@Test public void throwsIOException() { thrown.expect(UncheckedExecutionException.class); ApiExceptions.callAndTranslateApiException(ApiFutures.immediateFailedFuture(new IOException())); }
@Test public void throwsRuntimeException() { thrown.expect(IllegalArgumentException.class); ApiExceptions.callAndTranslateApiException( ApiFutures.immediateFailedFuture(new IllegalArgumentException())); }
@Override public ApiFuture<Operation> futureCall( GetOperationRequest request, ApiCallContext context) { if (!request.getName().equals("poseidon")) { return ApiFutures.immediateFailedFuture( new IllegalStateException("Unexpected request: " + request)); } else { return ApiFutures.immediateFuture( Operation.newBuilder().setName("greece").build()); } } });
private <ResponseT> ApiFuture<ResponseT> newFuture( StatusCode.Code returnStatusCode, ResponseT response) { if (StatusCode.Code.OK.equals(returnStatusCode)) { return ApiFutures.immediateFuture(response); } else { return ApiFutures.immediateFailedFuture( ApiExceptionFactory.createException(null, FakeStatusCode.of(returnStatusCode), false)); } }