package org.jooby.issues;
import static org.junit.Assert.assertTrue;
import java.util.concurrent.Callable;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.jooby.AsyncMapper;
import org.jooby.test.ServerFeature;
import org.junit.Test;
public class Issue490 extends ServerFeature {
{
ExecutorService executor = Executors.newSingleThreadExecutor(r -> {
Thread thread = new Thread(r, CompletableFuture.class.getSimpleName());
thread.setDaemon(true);
return thread;
});
onStop(() -> executor.shutdown());
map(new AsyncMapper());
get("/490/callable", () -> (Callable<String>) () -> Thread.currentThread().getName());
get("/490/future", () -> CompletableFuture
.supplyAsync(() -> Thread.currentThread().getName(), executor));
get("/490", () -> "OK");
}
@Test
public void shouldMapCallbale() throws Exception {
request()
.get("/490/callable")
.expect(rsp -> {
System.out.println(rsp);
assertTrue(rsp.toLowerCase().contains("task"));
});
}
@Test
public void shouldMapCompletableFuture() throws Exception {
request()
.get("/490/future")
.expect(rsp -> {
String value = rsp;
assertTrue(value, CompletableFuture.class.getSimpleName().equals(value));
});
}
@Test
public void shouldSkip() throws Exception {
request()
.get("/490")
.expect("OK");
}
}