@Test public void transactionDeletesAsyncOnRollback() { DeterministicScheduler executor = new DeterministicScheduler(); TestTransactionManager deleteTxManager = new TestTransactionManagerImpl( metricsManager, keyValueService, timestampService, timestampService, lockClient, lockService, transactionService, conflictDetectionManager, sweepStrategyManager, sweepQueue, executor); Supplier<PreCommitCondition> conditionSupplier = mock(Supplier.class); when(conditionSupplier.get()).thenReturn(ALWAYS_FAILS_CONDITION) .thenReturn(PreCommitConditions.NO_OP); deleteTxManager.runTaskWithConditionWithRetry(conditionSupplier, (tx, condition) -> { tx.put(TABLE, ImmutableMap.of(TEST_CELL, PtBytes.toBytes("value"))); return null; }); verify(keyValueService, times(0)).delete(any(), any()); executor.runUntilIdle(); verify(keyValueService, times(1)).delete(any(), any()); TransactionOutcomeMetricsAssert.assertThat(transactionOutcomeMetrics) .hasSuccessfulCommits(1) .hasFailedCommits(1); }