ConcurrentDocumentOperationBlocker { void operationDone() { semaphore.release(); }    }
@Test public void testBasics() throws InterruptedException { spawnThreadPushOperationThenCountDown(); assertFalse(latch.await(10, TimeUnit.MILLISECONDS)); blocker.operationDone(); assertTrue(latch.await(120, TimeUnit.SECONDS)); }