### Question:
RXTool { public static <T> Observable<T> executeBlockingObservable(Handler<Future<List<T>>> blockingCodeHandler, Vertx vertx) { return executeBlocking(blockingCodeHandler,vertx) .flatMapObservable(Observable::fromIterable); } private  RXTool(); static Single<T> executeBlocking(Handler<Future<T>> blockingCodeHandler, Vertx
        vertx); static Observable<T> executeBlockingObservable(Handler<Future<List<T>>> blockingCodeHandler, Vertx
        vertx); static Single<T> failure(Throwable e); static io.reactivex.functions.Function<T,R> toFunction(Function<T,R> f);  }### Answer:
@Test public void executeBlockingObservableShouldExecuteOnNextAndOnComplete() throws InterruptedException { CountDownLatch countDownLatch = new CountDownLatch(4); CountDownLatch countDownLatchCompletion = new CountDownLatch(1); RXTool.executeBlockingObservable(h -> h.complete(Arrays.asList(1, 2, 3, 4)), vertx) .subscribe( i -> countDownLatch.countDown(), t -> { throw new RuntimeException(t); }, countDownLatchCompletion::countDown ); countDownLatch.await(1, TimeUnit.SECONDS); countDownLatchCompletion.await(1, TimeUnit.SECONDS); }