@Override public Verticle createVerticle(String verticleName, ClassLoader classLoader) throws Exception { if (failInCreate) { throw new ClassNotFoundException("whatever"); } this.identifier = verticleName; this.createContext = Vertx.currentContext(); this.createWorkerThread = Context.isOnWorkerThread(); return verticle; }
@Override public void stop() throws Exception { assertTrue(Context.isOnVertxThread()); assertFalse(Context.isOnWorkerThread()); assertTrue(Context.isOnEventLoopThread()); } };
@Override public void start() throws Exception { assertTrue(Context.isOnVertxThread()); assertFalse(Context.isOnWorkerThread()); assertTrue(Context.isOnEventLoopThread()); }
@Override public void start() throws Exception { assertTrue(Context.isOnVertxThread()); assertTrue(Context.isOnWorkerThread()); assertFalse(Context.isOnEventLoopThread()); }
@Override public void stop() throws Exception { assertTrue(Context.isOnVertxThread()); assertTrue(Context.isOnWorkerThread()); assertFalse(Context.isOnEventLoopThread()); } };
@Override public void start() throws Exception { vertx.executeBlocking(fut -> { thread.set(Thread.currentThread()); assertTrue(Context.isOnVertxThread()); assertTrue(Context.isOnWorkerThread()); assertFalse(Context.isOnEventLoopThread()); assertTrue(Thread.currentThread().getName().startsWith(poolName + "-")); fut.complete(); }, onSuccess(v -> { vertx.undeploy(context.deploymentID()); })); } }, new DeploymentOptions().setWorkerPoolName(poolName), onSuccess(v -> {}));
@Override public void start() throws Exception { thread.set(Thread.currentThread()); assertTrue(Context.isOnVertxThread()); assertTrue(Context.isOnWorkerThread()); assertFalse(Context.isOnEventLoopThread()); assertTrue(Thread.currentThread().getName().startsWith(poolName + "-")); context.runOnContext(v -> { vertx.undeploy(context.deploymentID()); }); } }, new DeploymentOptions().setWorker(true).setWorkerPoolName(poolName), onSuccess(deployment::set));
@Test public void testThread() { String poolName = TestUtils.randomAlphaString(10); WorkerExecutor worker = vertx.createSharedWorkerExecutor(poolName); AtomicBoolean onVertxThread = new AtomicBoolean(); AtomicBoolean onWorkerThread = new AtomicBoolean(); AtomicBoolean onEventLoopThread = new AtomicBoolean(); AtomicReference<String> threadName = new AtomicReference<>(); worker.executeBlocking(fut -> { onVertxThread.set(Context.isOnVertxThread()); onWorkerThread.set(Context.isOnWorkerThread()); onEventLoopThread.set(Context.isOnEventLoopThread()); threadName.set(Thread.currentThread().getName()); fut.complete(null); }, ar -> { testComplete(); }); // Use regular assertions because the thread name does not start with "vert.x-" // and it confuses the VertxTestBase asserts assertWaitUntil(() -> threadName.get() != null); assertTrue(onVertxThread.get()); assertTrue(onWorkerThread.get()); assertFalse(onEventLoopThread.get()); assertTrue(threadName.get().startsWith(poolName + "-")); }
@Test public void testExecuteOrderedBlocking() throws Exception { Context context = vertx.getOrCreateContext(); context.executeBlocking(f -> { assertTrue(Context.isOnWorkerThread()); f.complete(1 + 2); }, r -> { assertTrue(Context.isOnEventLoopThread()); assertEquals(r.result(), 3); testComplete(); }); await(); }
@Test public void testWorkerExecuteFromIo() throws Exception { AtomicReference<ContextInternal> workerContext = new AtomicReference<>(); CountDownLatch latch = new CountDownLatch(1); vertx.deployVerticle(new AbstractVerticle() { @Override public void start() throws Exception { workerContext.set((ContextInternal) context); latch.countDown(); } }, new DeploymentOptions().setWorker(true)); awaitLatch(latch); workerContext.get().nettyEventLoop().execute(() -> { assertNull(Vertx.currentContext()); workerContext.get().nettyEventLoop().execute(() -> { workerContext.get().executeFromIO(v -> { assertSame(workerContext.get(), Vertx.currentContext()); assertTrue(Context.isOnWorkerThread()); testComplete(); }); }); }); await(); }
@Test public void testExecuteUnorderedBlocking() throws Exception { Context context = vertx.getOrCreateContext(); context.executeBlocking(f -> { assertTrue(Context.isOnWorkerThread()); f.complete(1 + 2); }, false, r -> { assertTrue(Context.isOnEventLoopThread()); assertEquals(r.result(), 3); testComplete(); }); await(); }
}; if (creatingContext != null) { if(options.getProtocolVersion() == HttpVersion.HTTP_2 && Context.isOnWorkerThread()) { throw new IllegalStateException("Cannot use HttpClient with HTTP_2 in a worker");
assertSame(ctx, vertx.getOrCreateContext()); assertTrue(Thread.currentThread().getName().startsWith("vert.x-worker-thread")); assertTrue(Context.isOnWorkerThread()); assertFalse(Context.isOnEventLoopThread()); try { assertSame(ctx, vertx.getOrCreateContext()); assertTrue(Thread.currentThread().getName().startsWith("vert.x-eventloop-thread")); assertFalse(Context.isOnWorkerThread()); assertTrue(Context.isOnEventLoopThread()); assertEquals("done!", res);
@Override public void start() throws Exception { assertTrue(Vertx.currentContext().isWorkerContext()); assertTrue(Context.isOnWorkerThread()); HttpServer server1 = vertx.createHttpServer(new HttpServerOptions() .setHost(HttpTestBase.DEFAULT_HTTP_HOST).setPort(HttpTestBase.DEFAULT_HTTP_PORT)); server1.requestHandler(req -> { assertTrue(Vertx.currentContext().isWorkerContext()); assertTrue(Context.isOnWorkerThread()); Buffer buf = Buffer.buffer(); req.handler(buf::appendBuffer); }).listen(onSuccess(s -> { assertTrue(Vertx.currentContext().isWorkerContext()); assertTrue(Context.isOnWorkerThread()); HttpClient client = vertx.createHttpClient(); client.put(HttpTestBase.DEFAULT_HTTP_PORT, HttpTestBase.DEFAULT_HTTP_HOST, "/blah", onSuccess(resp -> { assertEquals(200, resp.statusCode()); assertTrue(Vertx.currentContext().isWorkerContext()); assertTrue(Context.isOnWorkerThread()); resp.handler(buf -> { assertEquals("bye", buf.toString());
assertSame(ctx, vertx.getOrCreateContext()); assertTrue(Thread.currentThread().getName().startsWith("vert.x-worker-thread")); assertTrue(Context.isOnWorkerThread()); assertFalse(Context.isOnEventLoopThread()); try { assertSame(ctx, vertx.getOrCreateContext()); assertTrue(Thread.currentThread().getName().startsWith("vert.x-eventloop-thread")); assertFalse(Context.isOnWorkerThread()); assertTrue(Context.isOnEventLoopThread()); future.complete("done!"); assertSame(ctx, vertx.getOrCreateContext()); assertTrue(Thread.currentThread().getName().startsWith("vert.x-eventloop-thread")); assertFalse(Context.isOnWorkerThread()); assertTrue(Context.isOnEventLoopThread()); assertEquals("done!", res);
@Test public void testStandardRightThread() throws Exception { assertFalse(Context.isOnVertxThread()); Verticle verticle = new AbstractVerticle() { @Override public void start() throws Exception { assertTrue(Context.isOnVertxThread()); assertFalse(Context.isOnWorkerThread()); assertTrue(Context.isOnEventLoopThread()); } @Override public void stop() throws Exception { assertTrue(Context.isOnVertxThread()); assertFalse(Context.isOnWorkerThread()); assertTrue(Context.isOnEventLoopThread()); } }; vertx.deployVerticle(verticle, onSuccess(res -> { assertTrue(Context.isOnVertxThread()); assertFalse(Context.isOnWorkerThread()); assertTrue(Context.isOnEventLoopThread()); vertx.undeploy(res, onSuccess(res2 -> { assertTrue(Context.isOnVertxThread()); assertFalse(Context.isOnWorkerThread()); assertTrue(Context.isOnEventLoopThread()); testComplete(); })); })); await(); }
@Test public void testWorkerRightThread() throws Exception { assertFalse(Context.isOnVertxThread()); Verticle verticle = new AbstractVerticle() { @Override public void start() throws Exception { assertTrue(Context.isOnVertxThread()); assertTrue(Context.isOnWorkerThread()); assertFalse(Context.isOnEventLoopThread()); } @Override public void stop() throws Exception { assertTrue(Context.isOnVertxThread()); assertTrue(Context.isOnWorkerThread()); assertFalse(Context.isOnEventLoopThread()); } }; vertx.deployVerticle(verticle, new DeploymentOptions().setWorker(true), onSuccess(res -> { assertTrue(Context.isOnVertxThread()); assertFalse(Context.isOnWorkerThread()); assertTrue(Context.isOnEventLoopThread()); vertx.undeploy(res, onSuccess(res2 -> { assertTrue(Context.isOnVertxThread()); assertFalse(Context.isOnWorkerThread()); assertTrue(Context.isOnEventLoopThread()); testComplete(); })); })); await(); }
@Override public Verticle createVerticle(String verticleName, ClassLoader classLoader) throws Exception { if (failInCreate) { throw new ClassNotFoundException("whatever"); } this.identifier = verticleName; this.createContext = Vertx.currentContext(); this.createWorkerThread = Context.isOnWorkerThread(); return verticle; }
@Override public void start() throws Exception { assertTrue(Context.isOnVertxThread()); assertFalse(Context.isOnWorkerThread()); assertTrue(Context.isOnEventLoopThread()); }
@Override public void start() throws Exception { assertTrue(Context.isOnVertxThread()); assertTrue(Context.isOnWorkerThread()); assertFalse(Context.isOnEventLoopThread()); }