@SuppressWarnings({ "rawtypes", "unchecked" })

@Test
public void testScheduling() throws Exception {
    EmbeddedChannel ch = new EmbeddedChannel(new ChannelInboundHandlerAdapter());
    final CountDownLatch latch = new CountDownLatch(2);
    ScheduledFuture future = ch.eventLoop().schedule(new Runnable() {
        @Override
        public void run() {
            latch.countDown();
        }
    }, 1, TimeUnit.SECONDS);
    future.addListener(new FutureListener() {
        @Override
        public void operationComplete(Future future) throws Exception {
            latch.countDown();
        }
    });
    long next = ch.runScheduledPendingTasks();
    assertTrue(next > 0);
    // Sleep for the nanoseconds but also give extra 50ms as the clock my not be very precise and so fail the test
    // otherwise.
    Thread.sleep(TimeUnit.NANOSECONDS.toMillis(next) + 50);
    assertEquals(-1, ch.runScheduledPendingTasks());
    latch.await();
}