@java.lang.Override public Builder newBuilderForType() { return newBuilder(); }
@Override public void run() { if (!isActive.get()) { return; } synchronized (Watch.this) { if (!isActive.get()) { return; } Preconditions.checkState(stream == null); current = false; nextAttempt = backoff.createNextAttempt(nextAttempt); stream = firestore.streamRequest(Watch.this, firestore.getClient().listenCallable()); ListenRequest.Builder request = ListenRequest.newBuilder(); request.setDatabase(firestore.getDatabaseName()); request.setAddTarget(target); if (resumeToken != null) { request.getAddTargetBuilder().setResumeToken(resumeToken); } stream.onNext(request.build()); } } },
@Test @SuppressWarnings("all") public void listenTest() throws Exception { ListenResponse expectedResponse = ListenResponse.newBuilder().build(); mockFirestore.addResponse(expectedResponse); String formattedDatabase = FirestoreClient.formatDatabaseRootName("[PROJECT]", "[DATABASE]"); ListenRequest request = ListenRequest.newBuilder().setDatabase(formattedDatabase).build(); MockStreamObserver<ListenResponse> responseObserver = new MockStreamObserver<>(); BidiStreamingCallable<ListenRequest, ListenResponse> callable = client.listenCallable(); ApiStreamObserver<ListenRequest> requestObserver = callable.bidiStreamingCall(responseObserver); requestObserver.onNext(request); requestObserver.onCompleted(); List<ListenResponse> actualResponses = responseObserver.future().get(); Assert.assertEquals(1, actualResponses.size()); Assert.assertEquals(expectedResponse, actualResponses.get(0)); }
@Test @SuppressWarnings("all") public void listenExceptionTest() throws Exception { StatusRuntimeException exception = new StatusRuntimeException(Status.INVALID_ARGUMENT); mockFirestore.addException(exception); String formattedDatabase = FirestoreClient.formatDatabaseRootName("[PROJECT]", "[DATABASE]"); ListenRequest request = ListenRequest.newBuilder().setDatabase(formattedDatabase).build(); MockStreamObserver<ListenResponse> responseObserver = new MockStreamObserver<>(); BidiStreamingCallable<ListenRequest, ListenResponse> callable = client.listenCallable(); ApiStreamObserver<ListenRequest> requestObserver = callable.bidiStreamingCall(responseObserver); requestObserver.onNext(request); try { List<ListenResponse> actualResponses = responseObserver.future().get(); Assert.fail("No exception thrown"); } catch (ExecutionException e) { Assert.assertTrue(e.getCause() instanceof InvalidArgumentException); InvalidArgumentException apiException = (InvalidArgumentException) e.getCause(); Assert.assertEquals(StatusCode.Code.INVALID_ARGUMENT, apiException.getStatusCode().getCode()); } }
@Override public void run() { if (!isActive.get()) { return; } synchronized (Watch.this) { if (!isActive.get()) { return; } Preconditions.checkState(stream == null); current = false; nextAttempt = backoff.createNextAttempt(nextAttempt); stream = firestore.streamRequest(Watch.this, firestore.getClient().listenCallable()); ListenRequest.Builder request = ListenRequest.newBuilder(); request.setDatabase(firestore.getDatabaseName()); request.setAddTarget(target); if (resumeToken != null) { request.getAddTargetBuilder().setResumeToken(resumeToken); } stream.onNext(request.build()); } } },