private void updateToken(final Tokens tokens) { currentTokensOption = Optional.of(tokens); final String accessToken = tokens.getAccessToken(); if (currentAccessTokenFuture.isDone()) { currentAccessTokenFuture = CompletableFutureUtils.successful(accessToken); } else { currentAccessTokenFuture.complete(accessToken); } } }
@Override public <T> CompletionStage<T> execute(final SphereRequest<T> sphereRequest) { final T result = (T) function.apply(sphereRequest.httpRequestIntent()); return successful(result); }
@SuppressWarnings("unchecked") @Override public <T> CompletionStage<T> execute(final SphereRequest<T> sphereRequest) { return CompletableFutureUtils.successful((T) "hello"); }
@Override public <T> CompletionStage<T> execute(final SphereRequest<T> sphereRequest) { final T result = (T) function.apply(sphereRequest.httpRequestIntent()); return successful(result); }
@Override public <T> CompletionStage<T> execute(final SphereRequest<T> sphereRequest) { final T result = (T) function.apply(sphereRequest.httpRequestIntent()); return successful(result); }
@Override @SuppressWarnings("unchecked") public <T> CompletionStage<T> execute(final SphereRequest<T> sphereRequest) { return CompletableFutureUtils.successful((T) "hello"); }
@SuppressWarnings("unchecked") private static <T> CompletionStage<T> successful() { return (CompletionStage<T>) CompletableFutureUtils.successful("hello"); } }
@Override public <T extends Hook, R> CompletionStage<R> runActionHook(final Class<T> hookClass, final BiFunction<T, R, CompletionStage<R>> f, final R param) { hookRunnerLogger.debug("runActionHook {}", hookClass.getSimpleName()); CompletionStage<R> result = successful(param); final List<T> applicableHooks = controllerComponents.stream() .filter(x -> hookClass.isAssignableFrom(x.getClass())) .map(x -> (T) x) .collect(Collectors.toList()); for (final T hook : applicableHooks) { result = result.thenComposeAsync(res -> f.apply(hook, res), HttpExecution.defaultContext()); } return result; }
private void requestUpdateTokens(final Tokens tokens) { if (!currentTokensOption.isPresent() || currentTokenIsOlder(tokens)) { currentTokensOption = Optional.ofNullable(tokens); final String accessToken = tokens.getAccessToken(); if (currentAccessTokenFuture.isDone()) { currentAccessTokenFuture = CompletableFutureUtils.successful(accessToken); } else { currentAccessTokenFuture.complete(accessToken); } } }
private void requestUpdateTokens(final Tokens tokens) { if (!currentTokensOption.isPresent() || currentTokenIsOlder(tokens)) { currentTokensOption = Optional.ofNullable(tokens); final String accessToken = tokens.getAccessToken(); if (currentAccessTokenFuture.isDone()) { currentAccessTokenFuture = CompletableFutureUtils.successful(accessToken); } else { currentAccessTokenFuture.complete(accessToken); } } }
@Override public <T> CompletionStage<T> execute(final SphereRequest<T> sphereRequest) { final HttpRequestIntent httpRequest = sphereRequest.httpRequestIntent(); final HttpResponse httpResponse = function.apply(httpRequest); try { final T t = SphereClientImpl.parse(sphereRequest, objectMapper, sphereApiConfig, httpResponse, null); return CompletableFutureUtils.successful(t); } catch (final Exception e) { return CompletableFutureUtils.failed(e); } }
@Override public <T> CompletionStage<T> execute(final SphereRequest<T> sphereRequest) { final HttpRequestIntent httpRequest = sphereRequest.httpRequestIntent(); final HttpResponse httpResponse = function.apply(httpRequest); try { final T t = SphereClientImpl.parse(sphereRequest, objectMapper, sphereApiConfig, httpResponse, null); return CompletableFutureUtils.successful(t); } catch (final Exception e) { return CompletableFutureUtils.failed(e); } }
@Override public <T> CompletionStage<T> execute(final SphereRequest<T> sphereRequest) { final HttpRequestIntent httpRequest = sphereRequest.httpRequestIntent(); final HttpResponse httpResponse = function.apply(httpRequest); try { final T t = SphereClientImpl.parse(sphereRequest, objectMapper, SphereApiConfig.of("fake-project-key-for-testing", "https://createHttpTestDouble.tld"), httpResponse); return CompletableFutureUtils.successful(t); } catch (final Exception e) { return CompletableFutureUtils.failed(e); } }
@Test public void testFlatMap() throws Exception { final CompletionStage<String> future = successful("hello"); final Function<String, CompletionStage<Integer>> f = s -> successful(s.length()); final CompletionStage<Integer> result = flatMap(future, f); assertThat(result.toCompletableFuture().join()).isEqualTo(5); }
@Test public void recoverWithSuccessInFirst() throws Exception { final String actual = recoverWithTestWithSuccessfulResult(successful("hello"), successful("hi")); assertThat(actual).isEqualTo("hello"); }
@Test public void testMap() throws Exception { final CompletionStage<String> future = successful("hello"); final CompletionStage<Integer> result = map(future, s -> s.length()); assertThat(result.toCompletableFuture().join()).isEqualTo(5); }
@Test public void testTransferResultSuccessful() throws Exception { final CompletableFuture<String> future = new CompletableFuture<>(); transferResult(successful("hello"), future); assertThat(future.join()).isEqualTo("hello"); }
@Test public void onSuccess() { final CompletableFuture<String> future = successful("hello"); final String[] state = {""}; CompletableFutureUtils.onSuccess(future, s -> state[0] = s).toCompletableFuture().join(); assertThat(state[0]).isEqualTo("hello"); }
@Test public void recoverSuccess() throws Exception { final String actual = recover(successful("hello"), e -> "hi").toCompletableFuture().join(); assertThat(actual).isEqualTo("hello"); }
@Test public void sequenceErrorCase() { final RuntimeException exception = new RuntimeException("failed"); final List<CompletableFuture<Integer>> completableFutures = asList(delayedResult(1), failed(exception), successful(3)); final CompletableFuture<List<Integer>> sequence = CompletableFutureUtils.sequence(completableFutures); assertThatThrownBy(() -> sequence.join()).hasCause(exception); }