/** * Closes the outbound stream. */ public void close() { if (isOpen()) { mClosed = true; mRequestObserver.onCompleted(); } }
@Override public void onNext(SimpleResponse value) { if (numResponses.incrementAndGet() < CAPPED_NUM_MESSAGES) { requestStream.request(1); } else { if (!clientClosed.get()) { for (int i = 0; i < TOTAL_NUM_MESSAGES; i++) { requestStream.onNext(SimpleRequest.getDefaultInstance()); } requestStream.onCompleted(); clientClosed.set(true); } requestStream.request(1); } }
/** * Validates the read request sent. * * @param client the worker client * @param offset the offset * @param length the length */ private void validateReadRequestSent(final BlockWorkerClient client, long offset, long length, boolean closed, int chunkSize) throws TimeoutException, InterruptedException { ArgumentCaptor<ReadRequest> requestCaptor = ArgumentCaptor.forClass(ReadRequest.class); verify(mRequestObserver, atLeastOnce()).onNext(requestCaptor.capture()); ArgumentCaptor<StreamObserver> captor = ArgumentCaptor.forClass(StreamObserver.class); verify(mClient).readBlock(captor.capture()); ReadRequest readRequest = requestCaptor.getValue(); captor.getValue().onCompleted(); verify(mRequestObserver, closed ? atLeastOnce() : never()).onCompleted(); assertTrue(readRequest != null); assertEquals(BLOCK_ID, readRequest.getBlockId()); assertEquals(offset, readRequest.getOffset()); assertEquals(length, readRequest.getLength()); assertEquals(chunkSize, readRequest.getChunkSize()); }
/** * Checks onCompleted is called on request observer upon close. */ @Test public void close() throws Exception { mStream.close(); Assert.assertTrue(mStream.isClosed()); Assert.assertFalse(mStream.isOpen()); verify(mRequestObserver).onCompleted(); }