### Question:
CheckPointerImpl extends LifecycleAdapter implements CheckPointer { @Override public long tryCheckPoint( TriggerInfo info ) throws IOException { return tryCheckPoint( info, () -> false ); } CheckPointerImpl(
            TransactionIdStore transactionIdStore,
            CheckPointThreshold threshold,
            StorageEngine storageEngine,
            LogPruning logPruning,
            TransactionAppender appender,
            DatabaseHealth databaseHealth,
            LogProvider logProvider,
            CheckPointTracer tracer,
            IOLimiter ioLimiter,
            StoreCopyCheckPointMutex mutex ); @Override void start(); @Override long forceCheckPoint( TriggerInfo info ); @Override long tryCheckPoint( TriggerInfo info ); @Override long tryCheckPoint( TriggerInfo info, BooleanSupplier timeout ); @Override long checkPointIfNeeded( TriggerInfo info ); @Override long lastCheckPointedTransactionId();  }### Answer:
@Test public void mustFlushAsFastAsPossibleDuringTryCheckPoint() throws Exception { AtomicBoolean doneDisablingLimits = new AtomicBoolean(); limiter = new IOLimiter() { @Override public long maybeLimitIO( long previousStamp, int recentlyCompletedIOs, Flushable flushable ) { return 0; } @Override public void enableLimit() { doneDisablingLimits.set( true ); } @Override public boolean isLimited() { return doneDisablingLimits.get(); } }; mockTxIdStore(); CheckPointerImpl checkPointer = checkPointer(); checkPointer.tryCheckPoint( INFO ); assertTrue( doneDisablingLimits.get() ); }
@Test( timeout = 5000 ) public void mustRequestFastestPossibleFlushWhenTryCheckPointIsCalledDuringBackgroundCheckPoint() throws Exception { verifyAsyncActionCausesConcurrentFlushingRush( checkPointer -> checkPointer.tryCheckPoint( new SimpleTriggerInfo( "async" ) ) ); }