package org.jooby.issues; import static org.junit.Assert.assertEquals; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.atomic.AtomicReference; import org.jooby.test.OnServer; import org.jooby.test.ServerFeature; import org.jooby.undertow.Undertow; import org.junit.After; import org.junit.Test; @OnServer(Undertow.class) public class Issue423b extends ServerFeature { private static final AtomicReference<String> T = new AtomicReference<>(null); private static final CountDownLatch latch = new CountDownLatch(1); { ExecutorService executor = Executors.newSingleThreadExecutor(r -> { Thread t = new Thread(r, "deferred"); t.setDaemon(true); return t; }); renderer((v, ctx) -> { throw new IllegalStateException("renderer-err"); }); complete((req, rsp, err) -> { Thread thread = Thread.currentThread(); T.set(thread.getName() + ":" + err.get().getMessage()); latch.countDown(); }); get("/423", promise(deferred -> { executor.execute(() -> { deferred.resolve("foo"); }); })); } @Test public void shouldImportStartStopCallback() throws Exception { request() .get("/423") .expect(500); } @After public void after() throws InterruptedException { latch.await(); assertEquals("deferred:renderer-err", T.getAndSet(null)); } }