@Override public <T> Future<T> submit(Callable<T> task) { submitStartCounter++; Future<T> future = super.submit(task); submitCompleteCounter++; synchronized (this) { notifyAll(); } return future; }
@Override @SuppressWarnings({"rawtypes", "unchecked"}) public <T> Future<T> submit(Callable<T> task) { try { Future<?> result = super.submit(task); Message<?> message = (Message<?>) result.get(10, TimeUnit.SECONDS); Message<?> modifiedMessage; if (message == null) { modifiedMessage = MessageBuilder.withPayload("foo") .setHeader("executor", this.beanName).build(); } else { modifiedMessage = MessageBuilder.fromMessage(message) .setHeader("executor", this.beanName).build(); } return new AsyncResult(modifiedMessage); } catch (Exception e) { throw new IllegalStateException("unexpected exception in testExecutor", e); } }
@Override public final void doExecute(TestContext context) { CompletableFuture<Void> result = new CompletableFuture<>(); SimpleAsyncTaskExecutor executor = new SimpleAsyncTaskExecutor(); finished = executor.submit(() -> { try { doExecuteAsync(context); result.complete(null); } catch (Exception e) { log.warn("Async test action execution raised error", e); if (e instanceof CitrusRuntimeException) { context.addException((CitrusRuntimeException) e); } else { context.addException(new CitrusRuntimeException(e)); } result.completeExceptionally(e); } }); result.whenComplete((nothing, throwable) -> { if (throwable != null) { onError(context, throwable); } else { onSuccess(context); } }); }