    @Test
    public void unblockWhenFullBeforeTimeout() {

        // Acquire all 4 available tokens
        List<Optional<Limiter.Listener>> listeners = acquireN(blockingLimiter, 4);

        // Schedule one to release in 250 msec
        Executors.newSingleThreadScheduledExecutor().schedule(() -> listeners.get(0).get().onSuccess(), 250, TimeUnit.MILLISECONDS);

        // Next acquire will block for 1 second
        long start = System.nanoTime();
        Optional<Limiter.Listener> listener = blockingLimiter.acquire(null);
        long duration = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - start);
        Assert.assertTrue(duration >= 250);
        Assert.assertTrue(listener.isPresent());
    }