@Test
public void testDelay() throws InterruptedException {

    ScheduledExecutorService ses = 
        Executors.newSingleThreadScheduledExecutor();
    SingletonTask st1 = new SingletonTask(ses, new Runnable() {
        @Override
        public void run() {
            ran += 1;
            time = System.nanoTime();
        }
    });
    long start = System.nanoTime();
    st1.reschedule(10, TimeUnit.MILLISECONDS);
    assertFalse("Check that task hasn't run yet", ran > 0);
    
    ses.shutdown();
    ses.awaitTermination(5, TimeUnit.SECONDS);
    
    assertEquals("Check that task ran", 1, ran);
    assertTrue("Check that time passed appropriately",
               (time - start) >= TimeUnit.NANOSECONDS.convert(10, TimeUnit.MILLISECONDS));
}