when(mock.schedule(any(Runnable.class), anyLong(), any(TimeUnit.class))) .then( new Answer<ScheduledFuture<?>>() { when(mock.shutdownNow()) .then( new Answer<List<Runnable>>() { when(mock.getSleepDurations()).thenReturn(sleepDurations); when(mock.getIterationsCount()) .then( new Answer<Integer>() {
@After public void tearDown() throws Exception { executor.shutdown(); }
@Test public void testCall() { Color resp = getColor(1.0f); Currency meta = Currency.getInstance("UAH"); OperationSnapshot resultOperation = getOperation("testCall", resp, null, meta, true); UnaryCallable<Integer, OperationSnapshot> initialCallable = mockGetOpSnapshotCallable(StatusCode.Code.OK, resultOperation); LongRunningClient longRunningClient = new UnsupportedOperationApi(); OperationCallable<Integer, Color, Currency> callable = FakeCallableFactory.createOperationCallable( initialCallable, callSettings, initialContext, longRunningClient); Color response = callable.call(2, FakeCallContext.createDefault()); Truth.assertThat(response).isEqualTo(resp); assertThat(executor.getIterationsCount()).isEqualTo(0); }
@Before public void resetClock() { fakeClock = new FakeApiClock(System.nanoTime()); executor = RecordingScheduler.create(fakeClock); clientContext = ClientContext.newBuilder() .setExecutor(executor) .setClock(fakeClock) .setDefaultCallContext(HttpJsonCallContext.createDefault()) .build(); }
@After public void teardown() { executor.shutdownNow(); }
@Test public void testCall() { Color resp = getColor(1.0f); Money meta = getMoney("UAH"); Operation resultOperation = getOperation("testCall", resp, meta, true); mockResponse(channel, Code.OK, resultOperation); OperationCallable<Integer, Color, Money> callable = GrpcCallableFactory.createOperationCallable( createGrpcSettings(), callSettings, initialContext, operationsStub); Color response = callable.call(2, GrpcCallContext.createDefault()); assertThat(response).isEqualTo(resp); assertThat(executor.getIterationsCount()).isEqualTo(0); }
@Before public void resetClock() { fakeClock = new FakeApiClock(System.nanoTime()); executor = RecordingScheduler.create(fakeClock); clientContext = ClientContext.newBuilder() .setExecutor(executor) .setClock(fakeClock) .setDefaultCallContext(FakeCallContext.createDefault()) .setTransportChannel(FakeTransportChannel.create(new FakeChannel())) .build(); }
@After public void teardown() { executor.shutdownNow(); }
@Test public void testFutureCallInitialDoneWrongType() throws Exception { String opName = "testFutureCallInitialDoneWrongType"; Currency resp = Currency.getInstance("USD"); Currency meta = Currency.getInstance("UAH"); OperationSnapshot resultOperation = getOperation(opName, resp, null, meta, true); UnaryCallable<Integer, OperationSnapshot> initialCallable = mockGetOpSnapshotCallable(StatusCode.Code.OK, resultOperation); LongRunningClient longRunningClient = new UnsupportedOperationApi(); OperationCallable<Integer, Color, Currency> callable = FakeCallableFactory.createOperationCallable( initialCallable, callSettings, initialContext, longRunningClient); OperationFuture<Color, Currency> future = callable.futureCall(2, FakeCallContext.createDefault()); assertFutureFailMetaSuccess( future, meta, FakeStatusCode.of(StatusCode.Code.OK), "type mismatch: expected java.awt.Color, found java.util.Currency"); assertThat(executor.getIterationsCount()).isEqualTo(0); }
@Before public void resetClock() { fakeClock = new FakeApiClock(System.nanoTime()); executor = RecordingScheduler.create(fakeClock); clientContext = ClientContext.newBuilder() .setExecutor(executor) .setClock(fakeClock) .setDefaultCallContext(FakeCallContext.createDefault()) .setTransportChannel(FakeTransportChannel.create(new FakeChannel())) .build(); }
@After public void teardown() { executor.shutdownNow(); }
@Test public void testFutureCallInitialDone() throws Exception { String opName = "testFutureCallInitialDone"; Color resp = getColor(0.5f); Currency meta = Currency.getInstance("UAH"); OperationSnapshot resultOperation = getOperation(opName, resp, null, meta, true); UnaryCallable<Integer, OperationSnapshot> initialCallable = mockGetOpSnapshotCallable(StatusCode.Code.OK, resultOperation); LongRunningClient longRunningClient = new UnsupportedOperationApi(); OperationCallable<Integer, Color, Currency> callable = FakeCallableFactory.createOperationCallable( initialCallable, callSettings, initialContext, longRunningClient); OperationFuture<Color, Currency> future = callable.futureCall(2, FakeCallContext.createDefault()); assertFutureSuccessMetaSuccess(opName, future, resp, meta); assertThat(executor.getIterationsCount()).isEqualTo(0); }
@Before public void setUp() throws IOException { initialChannel = mock(FakeChannel.class); pollTransportChannel = mock(TransportChannel.class); TransportChannelProvider operationsChannelProvider = mock(TransportChannelProvider.class); when(operationsChannelProvider.getTransportChannel()).thenReturn(pollTransportChannel); clock = new FakeApiClock(0L); executor = RecordingScheduler.create(clock); pollingAlgorithm = OperationTimedPollAlgorithm.create(FAST_RECHECKING_SETTINGS, clock); UnaryCallSettings<Integer, OperationSnapshot> initialCallSettings = UnaryCallSettings.<Integer, OperationSnapshot>newUnaryCallSettingsBuilder() .setRetrySettings(FAST_RETRY_SETTINGS.toBuilder().setMaxAttempts(1).build()) .build(); callSettings = OperationCallSettings.<Integer, Color, Currency>newBuilder() .setInitialCallSettings(initialCallSettings) .setResponseTransformer(new ResponseTransformer()) .setMetadataTransformer(new MetadataTransformer()) .setPollingAlgorithm(pollingAlgorithm) .build(); initialContext = getClientContext(initialChannel, executor); }
@Test public void testResumeFutureCall() throws Exception { String opName = "testResumeFutureCall"; Color resp = getColor(0.5f); Currency meta = Currency.getInstance("UAH"); OperationSnapshot resultOperation = getOperation(opName, resp, null, meta, true); LongRunningClient longRunningClient = mockGetOperation(StatusCode.Code.OK, resultOperation); ClientContext mockContext = getClientContext(new FakeChannel(), executor); OperationCallable<Integer, Color, Currency> callable = FakeCallableFactory.createOperationCallable( getUnexpectedStartCallable(), callSettings, mockContext, longRunningClient); OperationFuture<Color, Currency> future = callable.resumeFutureCall(opName); assertFutureSuccessMetaSuccess(opName, future, resp, meta); assertThat(executor.getIterationsCount()).isEqualTo(0); }
executor = RecordingScheduler.create(clock); pollingAlgorithm = OperationTimedPollAlgorithm.create(FAST_RETRY_SETTINGS, clock);
@Test public void testFutureCallInitialError() throws Exception { String opName = "testFutureCallInitialError"; Color resp = getColor(1.0f); Currency meta = Currency.getInstance("UAH"); OperationSnapshot resultOperation = getOperation(opName, resp, null, meta, true); UnaryCallable<Integer, OperationSnapshot> initialCallable = mockGetOpSnapshotCallable(StatusCode.Code.UNAVAILABLE, resultOperation); LongRunningClient longRunningClient = new UnsupportedOperationApi(); OperationCallable<Integer, Color, Currency> callable = FakeCallableFactory.createOperationCallable( initialCallable, callSettings, initialContext, longRunningClient); OperationFuture<Color, Currency> future = callable.futureCall(2, FakeCallContext.createDefault()); assertFutureFailMetaFail(future, null, FakeStatusCode.of(StatusCode.Code.UNAVAILABLE)); assertThat(executor.getIterationsCount()).isEqualTo(0); }
@Test public void testFutureCallPollDoneOnSecond() throws Exception { String opName = "testFutureCallPollDoneOnSecond"; Color resp = getColor(0.5f); Currency meta1 = Currency.getInstance("UAH"); Currency meta2 = Currency.getInstance("USD"); OperationSnapshot initialOperation = getOperation(opName, null, null, null, false); OperationSnapshot resultOperation1 = getOperation(opName, null, null, meta1, false); OperationSnapshot resultOperation2 = getOperation(opName, resp, null, meta2, true); UnaryCallable<Integer, OperationSnapshot> initialCallable = mockGetOpSnapshotCallable(StatusCode.Code.OK, initialOperation); LongRunningClient longRunningClient = mockGetOperation(StatusCode.Code.OK, resultOperation1, resultOperation2); OperationCallable<Integer, Color, Currency> callable = FakeCallableFactory.createOperationCallable( initialCallable, callSettings, initialContext, longRunningClient); OperationFuture<Color, Currency> future = callable.futureCall(2, FakeCallContext.createDefault()); assertFutureSuccessMetaSuccess(opName, future, resp, meta2); assertThat(executor.getIterationsCount()).isEqualTo(1); }
@Test public void testFutureCallInitialOperationUnexpectedFail() throws Exception { String opName = "testFutureCallInitialOperationUnexpectedFail"; OperationSnapshot initialOperation = getOperation(opName, null, null, null, false); OperationSnapshot resultOperation = getOperation(opName, null, null, null, false); UnaryCallable<Integer, OperationSnapshot> initialCallable = mockGetOpSnapshotCallable(StatusCode.Code.OK, initialOperation); LongRunningClient longRunningClient = mockGetOperation(StatusCode.Code.OK, resultOperation); OperationCallableImpl<Integer, Color, Currency> callableImpl = Callables.longRunningOperationImpl( initialCallable, callSettings, initialContext, longRunningClient); RuntimeException thrownException = new RuntimeException(); ApiFuture<OperationSnapshot> initialFuture = ApiFutures.immediateFailedFuture(thrownException); OperationFuture<Color, Currency> future = callableImpl.futureCall(initialFuture, FakeCallContext.createDefault()); assertFutureFailMetaFail(future, RuntimeException.class, null); assertThat(executor.getIterationsCount()).isEqualTo(0); }
@Test public void testFutureCallPollDoneOnFirst() throws Exception { String opName = "testFutureCallPollDoneOnFirst"; Color resp = getColor(0.5f); Currency meta = Currency.getInstance("UAH"); OperationSnapshot initialOperation = getOperation(opName, null, null, null, false); OperationSnapshot resultOperation = getOperation(opName, resp, null, meta, true); UnaryCallable<Integer, OperationSnapshot> initialCallable = mockGetOpSnapshotCallable(StatusCode.Code.OK, initialOperation); LongRunningClient longRunningClient = mockGetOperation(StatusCode.Code.OK, resultOperation); OperationCallable<Integer, Color, Currency> callable = FakeCallableFactory.createOperationCallable( initialCallable, callSettings, initialContext, longRunningClient); OperationFuture<Color, Currency> future = callable.futureCall(2, FakeCallContext.createDefault()); assertFutureSuccessMetaSuccess(opName, future, resp, meta); assertThat(executor.getIterationsCount()).isEqualTo(0); }
@Test public void testFutureCallPollError() throws Exception { String opName = "testFutureCallPollError"; Currency meta = Currency.getInstance("UAH"); Color resp = getColor(1.0f); OperationSnapshot initialOperation = getOperation(opName, resp, null, meta, false); UnaryCallable<Integer, OperationSnapshot> initialCallable = mockGetOpSnapshotCallable(StatusCode.Code.OK, initialOperation); OperationSnapshot resultOperation = getOperation(opName, resp, null, meta, false); LongRunningClient longRunningClient = mockGetOperation(StatusCode.Code.ALREADY_EXISTS, resultOperation); OperationCallable<Integer, Color, Currency> callable = FakeCallableFactory.createOperationCallable( initialCallable, callSettings, initialContext, longRunningClient); OperationFuture<Color, Currency> future = callable.futureCall(2, FakeCallContext.createDefault()); assertFutureFailMetaFail(future, null, FakeStatusCode.of(StatusCode.Code.ALREADY_EXISTS)); assertThat(executor.getIterationsCount()).isEqualTo(0); }