### Question:
StoreCopyCheckPointMutex { public Resource checkPoint() { Lock writeLock = lock.writeLock(); writeLock.lock(); return writeLock::unlock; } StoreCopyCheckPointMutex();  StoreCopyCheckPointMutex( ReadWriteLock lock ); Resource storeCopy( ThrowingAction<IOException> beforeFirstConcurrentStoreCopy ); Resource tryCheckPoint(); Resource tryCheckPoint( BooleanSupplier timeoutPredicate ); Resource checkPoint();  }### Answer:
@Test public void checkPointShouldBlockAnotherCheckPoint() throws Exception { try ( Resource lock = mutex.checkPoint() ) { t2.execute( state -> mutex.checkPoint() ); t2.get().waitUntilWaiting( details -> details.isAt( StoreCopyCheckPointMutex.class, "checkPoint" ) ); } }