package org.jooby.issues;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import org.jooby.Jooby;
import org.jooby.netty.Netty;
import org.jooby.test.OnServer;
import org.jooby.test.ServerFeature;
import org.junit.AfterClass;
import org.junit.Test;
@OnServer(Netty.class)
public class Issue421 extends ServerFeature {
private static CountDownLatch latch = new CountDownLatch(6);
private static List<String> values = new ArrayList<>();
public static class Foo extends Jooby {
{
onStart(() -> {
values.add("Start:" + getClass().getSimpleName());
latch.countDown();
});
onStop(() -> {
values.add("Stop:" + getClass().getSimpleName());
latch.countDown();
});
map(v -> "foo");
}
}
{
onStart(() -> {
values.add("Before:" + getClass().getSimpleName());
latch.countDown();
});
onStop(() -> {
values.add("StopBefore:" + getClass().getSimpleName());
latch.countDown();
});
use(new Foo());
onStart(() -> {
values.add("After:" + getClass().getSimpleName());
latch.countDown();
});
onStop(() -> {
values.add("StopAfter:" + getClass().getSimpleName());
latch.countDown();
});
ScheduledExecutorService exe = Executors.newSingleThreadScheduledExecutor();
get("/421", () -> {
exe.schedule(this::stop, 500L, TimeUnit.MILLISECONDS);
return "bar";
});
}
@Test
public void shouldImportStartStopCallback() throws Exception {
request()
.get("/421")
.expect("foo");
}
@AfterClass
public static void onStop() throws InterruptedException {
latch.await();
assertEquals(
"[Before:Issue421, Start:Foo, After:Issue421, StopBefore:Issue421, Stop:Foo, StopAfter:Issue421]",
values.toString());
}
}