@Test public void getQueuedTaskCountTest() { // must be single thread scheduler so we can block one on the shceduler KeyedSchedulerServiceLimiter limiter = new KeyedSchedulerServiceLimiter(new SingleThreadScheduler(), 1); String key = StringUtils.makeRandomString(5); BlockingTestRunnable btr = new BlockingTestRunnable(); try { assertEquals(0, limiter.getQueuedTaskCount()); limiter.execute(key, btr); btr.blockTillStarted(); limiter.execute(StringUtils.makeRandomString(2), DoNothingRunnable.instance()); // 1 blocked on scheduler due to different key assertEquals(1, limiter.getQueuedTaskCount()); limiter.execute(key, DoNothingRunnable.instance()); // 1 additional blocked in limiter now assertEquals(2, limiter.getQueuedTaskCount()); } finally { btr.unblock(); } }
@Test public void getActiveTaskCountTest() { KeyedSchedulerServiceLimiter limiter = makeLimiter(1); String key = StringUtils.makeRandomString(5); assertEquals(0, limiter.getActiveTaskCount()); BlockingTestRunnable btr = new BlockingTestRunnable(); try { limiter.execute(key, btr); btr.blockTillStarted(); assertEquals(1, limiter.getActiveTaskCount()); } finally { btr.unblock(); } }
@Test public void removeRunnableTest() { KeyedSchedulerServiceLimiter limiter = makeLimiter(1); String key = StringUtils.makeRandomString(5); BlockingTestRunnable btr = new BlockingTestRunnable(); try { assertFalse(limiter.remove(btr)); assertFalse(limiter.remove((Runnable)null)); limiter.execute(key, btr); TestRunnable tr = new TestRunnable(); assertFalse(limiter.remove(tr)); limiter.execute(key, tr); assertTrue(limiter.remove(tr)); assertFalse(limiter.remove(tr)); limiter.submit(key, tr); assertTrue(limiter.remove(tr)); assertFalse(limiter.remove(tr)); } finally { btr.unblock(); } }
@Test public void removeCallableTest() { KeyedSchedulerServiceLimiter limiter = makeLimiter(1); String key = StringUtils.makeRandomString(5); BlockingTestRunnable btr = new BlockingTestRunnable(); try { assertFalse(limiter.remove(btr)); assertFalse(limiter.remove((Runnable)null)); limiter.execute(key, btr); TestCallable tc = new TestCallable(); assertFalse(limiter.remove(tc)); limiter.submit(key, tc); assertTrue(limiter.remove(tc)); assertFalse(limiter.remove(tc)); } finally { btr.unblock(); } }