public async Task DoubleSpendMempoolCheckCleanUp() { //arrange cleanUpTxService.Pause(); var cleanUpTxTriggeredSubscription = eventBus.Subscribe <CleanUpTxTriggeredEvent>(); (List <Tx> txList, uint256 firstBlockHash) = await CreateAndInsertTxWithMempoolAsync(dsCheckMempool : true); WaitUntilEventBusIsIdle(); var doubleSpendTx = Transaction.Parse(Tx2Hex, Network.Main); List <byte[]> dsTxId = new List <byte[]> { doubleSpendTx.GetHash().ToBytes() }; var txsWithDSCheck = (await TxRepositoryPostgres.GetTxsForDSCheckAsync(dsTxId, true)).ToArray(); var txPayload = HelperTools.HexStringToByteArray(tx2Hex); foreach (var dsTx in txsWithDSCheck) { await TxRepositoryPostgres.InsertMempoolDoubleSpendAsync( dsTx.TxInternalId, dsTx.TxExternalIdBytes, txPayload); } WaitUntilEventBusIsIdle(); var doubleSpends = (await TxRepositoryPostgres.GetTxsToSendMempoolDSNotificationsAsync()).ToList(); Assert.AreEqual(1, doubleSpends.Count()); foreach (var txDoubleSpend in doubleSpends) { await TxRepositoryPostgres.SetNotificationSendDateAsync(CallbackReason.DoubleSpendAttempt, txDoubleSpend.TxInternalId, -1, txDoubleSpend.DoubleSpendTxId, MockedClock.UtcNow); } doubleSpends = (await TxRepositoryPostgres.GetTxsToSendMempoolDSNotificationsAsync()).ToList(); Assert.AreEqual(0, doubleSpends.Count()); using (MockedClock.NowIs(DateTime.UtcNow.AddDays(cleanUpTxAfterDays))) { await ResumeAndWaitForCleanup(cleanUpTxTriggeredSubscription); // check if everything in db was cleared await CheckBlockNotPresentInDb(firstBlockHash); await CheckTxListNotPresentInDbAsync(txList); } }