@Override public void start(Future<Void> future) throws Exception { // The `my-verticle` is deployed using the following convention: // `maven:` + groupId + `:` + artifactId + `:` + version + `::` + verticle name vertx.deployVerticle("maven:io.vertx:maven-service-factory-verticle:3.6.2::my-verticle", ar -> { if (ar.succeeded()) { future.complete(); } else { future.fail(ar.cause()); } } ); } }
private void testAnySucceeded2(BiFunction<Future<String>, Future<Integer>, CompositeFuture> any) { Future<String> f1 = Future.future(); Future<Integer> f2 = Future.future(); CompositeFuture composite = any.apply(f1, f2); Checker<CompositeFuture> checker = new Checker<>(composite); f1.fail("failure"); checker.assertNotCompleted(); f2.complete(3); checker.assertSucceeded(composite); }
private void testAnyFailed(BiFunction<Future<String>, Future<Integer>, CompositeFuture> any) { Future<String> f1 = Future.future(); Future<Integer> f2 = Future.future(); CompositeFuture composite = any.apply(f1, f2); Checker<CompositeFuture> checker = new Checker<>(composite); f1.fail("failure"); checker.assertNotCompleted(); Throwable cause = new Exception(); f2.fail(cause); checker.assertFailed(cause); }
@Test public void testAsyncUndeployFailure() throws Exception { long delay = 1000; MyAsyncVerticle verticle = new MyAsyncVerticle(f-> f.complete(null), f -> vertx.setTimer(delay, id -> f.fail(new Exception("foobar")))); vertx.deployVerticle(verticle, ar -> { assertTrue(ar.succeeded()); long start = System.currentTimeMillis(); vertx.undeploy(ar.result(), ar2 -> { assertFalse(ar2.succeeded()); long now = System.currentTimeMillis(); assertTrue(now - start >= delay); assertFalse(vertx.deploymentIDs().contains(ar.result())); testComplete(); }); }); await(); }
@Test public void testToString() { assertEquals("Future{unresolved}", Future.future().toString()); assertEquals("Future{result=abc}", Future.succeededFuture("abc").toString()); assertEquals("Future{cause=It's like that, and that's the way it is}", Future.failedFuture("It's like that, and that's the way it is").toString()); Future<String> f = Future.future(); f.complete("abc"); assertEquals("Future{result=abc}", f.toString()); f = Future.future(); f.fail("abc"); assertEquals("Future{cause=abc}", f.toString()); }
@Test public void testFailedAsyncResultMap() { Future<String> f = Future.future(); AsyncResult<String> res = asyncResult(f); AsyncResult<Integer> map1 = res.map(String::length); AsyncResult<Integer> map2 = res.map(17); Throwable cause = new Throwable(); f.fail(cause); assertNull(map1.result()); assertSame(cause, map1.cause()); assertNull(map2.result()); assertSame(cause, map2.cause()); }
@Test public void testSetResultOnCompletedFuture() { ArrayList<Future<Object>> futures = new ArrayList<>(); futures.add(Future.succeededFuture()); futures.add(Future.succeededFuture()); futures.add(Future.succeededFuture(new Object())); futures.add(Future.succeededFuture(new Object())); futures.add(Future.failedFuture(new Exception())); futures.add(Future.failedFuture(new Exception())); for (Future<Object> future : futures) { try { future.complete(new Object()); fail(); } catch (IllegalStateException ignore) { } assertFalse(future.tryComplete(new Object())); try { future.complete(null); fail(); } catch (IllegalStateException ignore) { } assertFalse(future.tryComplete(null)); try { future.fail(new Exception()); fail(); } catch (IllegalStateException ignore) { } assertFalse(future.tryFail(new Exception())); } }
@Test public void testRecoverFailureWithFailure() { Throwable cause = new Throwable(); Future<String> f = Future.future(); Future<String> r = f.recover(t -> Future.failedFuture(cause)); Checker<String> checker = new Checker<>(r); checker.assertNotCompleted(); f.fail("recovered"); checker.assertFailed(cause); }
/** * Map the result of a future to a specific {@code value}.<p> * * When this future succeeds, this {@code value} will complete the future returned by this method call.<p> * * When this future fails, the failure will be propagated to the returned future. * * @param value the value that eventually completes the mapped future * @return the mapped future */ default <V> Future<V> map(V value) { Future<V> ret = Future.future(); setHandler(ar -> { if (ar.succeeded()) { ret.complete(value); } else { ret.fail(ar.cause()); } }); return ret; }
@Override public void start(Future<Void> startFuture) throws Exception { JsonObject options = new JsonObject().put("httpOptions", new JsonObject(). put("host", "localhost"). put("port", 8080). put("authOptions", new JsonObject().put("provider", "shiro").put("config", new JsonObject().put("properties_path", "auth.properties"))) ); vertx.deployVerticle("service:io.vertx.ext.shell", new DeploymentOptions().setConfig(options), ar -> { if (ar.succeeded()) { startFuture.succeeded(); } else { startFuture.fail(ar.cause()); } }); } }
@Test public void testComposeSuccessToFailure() { Throwable cause = new Throwable(); AtomicReference<String> ref = new AtomicReference<>(); Future<Integer> c = Future.future(); Future<String> f3 = Future.future(); Future<Integer> f4 = f3.compose(string -> { ref.set(string); return c; }); Checker<Integer> checker = new Checker<>(f4); f3.complete("abcdef"); c.fail(cause); checker.assertFailed(cause); }
private void testJoinFailed3(BiFunction<Future<String>, Future<Integer>, CompositeFuture> join) { Future<String> f1 = Future.future(); Future<Integer> f2 = Future.future(); CompositeFuture composite = join.apply(f1, f2); Checker<CompositeFuture> checker = new Checker<>(composite); checker.assertNotCompleted(); Throwable cause1 = new Throwable(); f1.fail(cause1); checker.assertNotCompleted(); Throwable cause2 = new Throwable(); f2.fail(cause2); assertSame(cause1, checker.assertFailed()); }
@Test public void testAsyncUndeployFailure() throws Exception { long delay = 1000; MyAsyncVerticle verticle = new MyAsyncVerticle(f-> f.complete(null), f -> vertx.setTimer(delay, id -> f.fail(new Exception("foobar")))); vertx.deployVerticle(verticle, ar -> { assertTrue(ar.succeeded()); long start = System.currentTimeMillis(); vertx.undeploy(ar.result(), ar2 -> { assertFalse(ar2.succeeded()); long now = System.currentTimeMillis(); assertTrue(now - start >= delay); assertFalse(vertx.deploymentIDs().contains(ar.result())); testComplete(); }); }); await(); }
@Test public void testToString() { assertEquals("Future{unresolved}", Future.future().toString()); assertEquals("Future{result=abc}", Future.succeededFuture("abc").toString()); assertEquals("Future{cause=It's like that, and that's the way it is}", Future.failedFuture("It's like that, and that's the way it is").toString()); Future<String> f = Future.future(); f.complete("abc"); assertEquals("Future{result=abc}", f.toString()); f = Future.future(); f.fail("abc"); assertEquals("Future{cause=abc}", f.toString()); }
@Test public void testFailedAsyncResultMap() { Future<String> f = Future.future(); AsyncResult<String> res = asyncResult(f); AsyncResult<Integer> map1 = res.map(String::length); AsyncResult<Integer> map2 = res.map(17); Throwable cause = new Throwable(); f.fail(cause); assertNull(map1.result()); assertSame(cause, map1.cause()); assertNull(map2.result()); assertSame(cause, map2.cause()); }
@Test public void testRecoverFailureWithFailure() { Throwable cause = new Throwable(); Future<String> f = Future.future(); Future<String> r = f.recover(t -> Future.failedFuture(cause)); Checker<String> checker = new Checker<>(r); checker.assertNotCompleted(); f.fail("recovered"); checker.assertFailed(cause); }