@Override
    public boolean canPass(Node node, int acquireCount) {
        return canPass(node, acquireCount, false);
    }
@Test
    public void testThrottlingControllerQueueTimeout() throws InterruptedException {
        final ThrottlingController paceController = new ThrottlingController(500, 10d);
        final Node node = mock(Node.class);

        final AtomicInteger passCount = new AtomicInteger();
        final AtomicInteger blockCount = new AtomicInteger();
        final CountDownLatch countDown = new CountDownLatch(1);

        final AtomicInteger done = new AtomicInteger();
        for (int i = 0; i < 10; i++) {
            Thread thread = new Thread(new Runnable() {
                @Override
                public void run() {
                    boolean pass = paceController.canPass(node, 1);

                    if (pass) {
                        passCount.incrementAndGet();
                    } else {
                        blockCount.incrementAndGet();
                    }
                    done.incrementAndGet();

                    if (done.get() >= 10) {
                        countDown.countDown();
                    }
                }

            }, "Thread-TestThrottlingControllerQueueTimeout-" + i);
            thread.start();
        }
        countDown.await();

        System.out.println("pass: " + passCount.get());
        System.out.println("block: " + blockCount.get());
        System.out.println("done: " + done.get());
        assertTrue(blockCount.get() > 0);
    }