/** * Checks receive after response arrives. */ @Test public void receiveAfterResponseArrives() throws Exception { WriteResponse response = WriteResponse.newBuilder().build(); EXECUTOR.submit(() -> { try { // push response after a short period of time Thread.sleep(SHORT_TIMEOUT); mResponseObserver.onNext(response); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } }); WriteResponse actualResponse = mStream.receive(TIMEOUT); Assert.assertEquals(response, actualResponse); }
/** * Checks receive responses more than buffer size in order. */ @Test public void receiveMoreThanBufferSize() throws Exception { WriteResponse[] responses = Stream.generate(() -> WriteResponse.newBuilder().build()) .limit(BUFFER_SIZE * 2).toArray(WriteResponse[]::new); EXECUTOR.submit(() -> { for (WriteResponse response : responses) { mResponseObserver.onNext(response); } }); Thread.sleep(SHORT_TIMEOUT); for (WriteResponse response : responses) { WriteResponse actualResponse = mStream.receive(TIMEOUT); Assert.assertEquals(response, actualResponse); } }
/** * Checks waitForComplete fails after times out. */ @Test public void waitForCompleteTimeout() throws Exception { WriteResponse[] responses = Stream.generate(() -> WriteResponse.newBuilder().build()) .limit(BUFFER_SIZE * 2).toArray(WriteResponse[]::new); EXECUTOR.submit(() -> { for (WriteResponse response : responses) { mResponseObserver.onNext(response); } try { Thread.sleep(TIMEOUT); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } mResponseObserver.onCompleted(); }); WriteResponse actualResponse = mStream.receive(SHORT_TIMEOUT); Assert.assertEquals(responses[0], actualResponse); mThrown.expect(DeadlineExceededException.class); mThrown.expectMessage(containsString(TEST_MESSAGE)); mStream.waitForComplete(SHORT_TIMEOUT); } }
/** * Checks waitForComplete succeed after onCompleted is triggered on response stream. */ @Test public void waitForComplete() throws Exception { WriteResponse[] responses = Stream.generate(() -> WriteResponse.newBuilder().build()) .limit(BUFFER_SIZE * 2).toArray(WriteResponse[]::new); EXECUTOR.submit(() -> { for (WriteResponse response : responses) { mResponseObserver.onNext(response); } try { Thread.sleep(SHORT_TIMEOUT); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } mResponseObserver.onCompleted(); }); WriteResponse actualResponse = mStream.receive(TIMEOUT); Assert.assertEquals(responses[0], actualResponse); mStream.waitForComplete(TIMEOUT); actualResponse = mStream.receive(TIMEOUT); Assert.assertEquals(null, actualResponse); }
/** * Checks response posted on the response observer is received. */ @Test public void receive() throws Exception { WriteResponse response = WriteResponse.newBuilder().build(); mResponseObserver.onNext(response); WriteResponse actualResponse = mStream.receive(TIMEOUT); Assert.assertEquals(response, actualResponse); }
/** * Checks receive fails immediately upon error even if buffer is full. */ @Test public void receiveErrorWhenBufferFull() throws Exception { mThrown.expect(UnauthenticatedException.class); mThrown.expectMessage(containsString(TEST_MESSAGE)); WriteResponse[] responses = Stream.generate(() -> WriteResponse.newBuilder().build()) .limit(BUFFER_SIZE).toArray(WriteResponse[]::new); for (WriteResponse response : responses) { mResponseObserver.onNext(response); } mResponseObserver.onError(Status.UNAUTHENTICATED.asRuntimeException()); for (WriteResponse response : responses) { WriteResponse actualResponse = mStream.receive(TIMEOUT); Assert.assertEquals(response, actualResponse); } }