@Test public void testConsumeCompletionWithChangeVisibilityFailure() { urlSetup("visibilityFailure", "visibilityFailureUrl"); ChangeMessageVisibilityRequest changeVisibilityReq = ChangeMessageVisibilityRequest.builder() .queueUrl("visibilityFailureUrl") .receiptHandle("visibilityFailure") .visibilityTimeout(0) .build(); CompletableFuture<ChangeMessageVisibilityResponse> visibilityResponse = new CompletableFuture<>(); visibilityResponse.completeExceptionally(new Exception()); when(awsAsyncSqsClient.changeMessageVisibility(changeVisibilityReq)) .thenReturn(visibilityResponse); CompletableFuture<Void> future = new CompletableFuture<>(); future.completeExceptionally(new Exception("async consumer completing exceptionally")); AsyncConsumer<String> function = (str, threadpool) -> future; CompletableFuture<Boolean> result = asyncClient.consume(function, "visibilityFailure"); try { result.get(1000, TimeUnit.MICROSECONDS); } catch (TimeoutException timeout) { fail("Future does not seem to complete when failure in changeMessageVisibility."); } catch (Exception ex) { } urlFailureSetup("visibilityFailure"); result = asyncClient.consume(function, "visibilityFailure"); try { result.get(1000, TimeUnit.MILLISECONDS); } catch (TimeoutException timeout) { fail( "Future does not seem to complete when failure in getQueueUrl within changeMessageVisibility."); } catch (Exception ex) { } }
@Override public CompletableFuture<Boolean> consume( @NonNull final Consumer<String> consumer, @NonNull final String queueName) { return consumeInternal( (body, executor) -> CompletableFuture.runAsync(() -> consumer.accept(body), executor), queueName); }
AsyncSqsClientImpl implements AsyncSqsClient { @Override public CompletableFuture<Boolean> consume( @NonNull final Consumer<String> consumer, @NonNull final String queueName) { return consumeInternal( (body, executor) -> CompletableFuture.runAsync(() -> consumer.accept(body), executor), queueName); } }
AsyncSqsClientImpl implements AsyncSqsClient { @Override public CompletableFuture<Boolean> consume( @NonNull final Consumer<String> consumer, @NonNull final String queueName) { return consumeInternal( (body, executor) -> CompletableFuture.runAsync(() -> consumer.accept(body), executor), queueName); } @Inject  AsyncSqsClientImpl(
      @NonNull final SqsAsyncClient client,
      @NonNull final AsyncConveyorMetrics metrics,
      @NonNull final ExecutorService executor);   AsyncSqsClientImpl(
      @NonNull final SqsAsyncClient client,
      @NonNull final AsyncConveyorMetrics metrics,
      @NonNull final ExecutorService executor,
      long maxCacheSize,
      int receiveWaitTimeoutSeconds,
      int bulkheadMaxWaitMillis,
      int consumerConcurrency); }
AsyncSqsClientImpl implements AsyncSqsClient { @Override public CompletableFuture<Boolean> consume( @NonNull final Consumer<String> consumer, @NonNull final String queueName) { return consumeInternal( (body, executor) -> CompletableFuture.runAsync(() -> consumer.accept(body), executor), queueName); } @Inject  AsyncSqsClientImpl(
      @NonNull final SqsAsyncClient client,
      @NonNull final AsyncConveyorMetrics metrics,
      @NonNull final ExecutorService executor);   AsyncSqsClientImpl(
      @NonNull final SqsAsyncClient client,
      @NonNull final AsyncConveyorMetrics metrics,
      @NonNull final ExecutorService executor,
      long maxCacheSize,
      int receiveWaitTimeoutSeconds,
      int bulkheadMaxWaitMillis,
      int consumerConcurrency); @Override CompletableFuture<Void> add(
      @NonNull final String message, @NonNull final String queueName); @Override CompletableFuture<Void> add(
      @NonNull final String message, @NonNull final String queueName, int delaySeconds); @Override CompletableFuture<Boolean> consume(
      @NonNull final Consumer<String> consumer, @NonNull final String queueName); @Override CompletableFuture<Boolean> consume(AsyncConsumer<String> consumer, String queueName); @Override void close(); }
AsyncSqsClientImpl implements AsyncSqsClient { @Override public CompletableFuture<Boolean> consume( @NonNull final Consumer<String> consumer, @NonNull final String queueName) { return consumeInternal( (body, executor) -> CompletableFuture.runAsync(() -> consumer.accept(body), executor), queueName); } @Inject  AsyncSqsClientImpl(
      @NonNull final SqsAsyncClient client,
      @NonNull final AsyncConveyorMetrics metrics,
      @NonNull final ExecutorService executor);   AsyncSqsClientImpl(
      @NonNull final SqsAsyncClient client,
      @NonNull final AsyncConveyorMetrics metrics,
      @NonNull final ExecutorService executor,
      long maxCacheSize,
      int receiveWaitTimeoutSeconds,
      int bulkheadMaxWaitMillis,
      int consumerConcurrency); @Override CompletableFuture<Void> add(
      @NonNull final String message, @NonNull final String queueName); @Override CompletableFuture<Void> add(
      @NonNull final String message, @NonNull final String queueName, int delaySeconds); @Override CompletableFuture<Boolean> consume(
      @NonNull final Consumer<String> consumer, @NonNull final String queueName); @Override CompletableFuture<Boolean> consume(AsyncConsumer<String> consumer, String queueName); @Override void close();  }