TEST_F(TransfersContainer_deleteUnconfirmedTransaction, deleteUnconfirmedSpendingTx) { addTransaction(TEST_BLOCK_HEIGHT); container.advanceHeight(TEST_BLOCK_HEIGHT + TEST_TRANSACTION_SPENDABLE_AGE); ASSERT_EQ(1, container.transactionsCount()); ASSERT_EQ(TEST_OUTPUT_AMOUNT, container.balance(ITransfersContainer::IncludeAllUnlocked)); std::vector<TransactionOutputInformation> transfers; container.getOutputs(transfers, ITransfersContainer::IncludeAllUnlocked); ASSERT_EQ(1, transfers.size()); TestTransactionBuilder spendingTx; spendingTx.addInput(account, transfers[0]); spendingTx.addTestKeyOutput(TEST_OUTPUT_AMOUNT - 1, UNCONFIRMED_TRANSACTION_GLOBAL_OUTPUT_INDEX); auto tx = spendingTx.build(); { CryptoNote::TransactionBlockInfo blockInfo{ WALLET_LEGACY_UNCONFIRMED_TRANSACTION_HEIGHT, 1000000 }; ASSERT_TRUE(container.addTransaction(blockInfo, *tx, {})); } ASSERT_EQ(2, container.transactionsCount()); ASSERT_EQ(0, container.balance(ITransfersContainer::IncludeAllUnlocked)); ASSERT_TRUE(container.deleteUnconfirmedTransaction(tx->getTransactionHash())); ASSERT_EQ(1, container.transactionsCount()); ASSERT_EQ(TEST_OUTPUT_AMOUNT, container.balance(ITransfersContainer::IncludeAllUnlocked)); }
TEST_F(TransfersContainer_addTransaction, spendingUnconfirmedOutputFails) { auto tx = addTransaction(WALLET_LEGACY_UNCONFIRMED_TRANSACTION_HEIGHT); ASSERT_EQ(1, container.transactionsCount()); ASSERT_EQ(1, container.transfersCount()); auto outputs = container.getTransactionOutputs( tx->getTransactionHash(), ITransfersContainer::IncludeAll); ASSERT_EQ(1, outputs.size()); TestTransactionBuilder spendingTx; for (const auto& t : outputs) { spendingTx.addInput(account, t); } ASSERT_ANY_THROW(container.addTransaction(blockInfo(WALLET_LEGACY_UNCONFIRMED_TRANSACTION_HEIGHT), *spendingTx.build() , {})); }
TEST_F(TransfersContainer_markTransactionConfirmed, confirmationTxWithNoOutputs) { addTransaction(TEST_BLOCK_HEIGHT); container.advanceHeight(TEST_BLOCK_HEIGHT + TEST_TRANSACTION_SPENDABLE_AGE); std::vector<TransactionOutputInformation> transfers; container.getOutputs(transfers, ITransfersContainer::IncludeAllUnlocked); ASSERT_EQ(1, transfers.size()); ASSERT_EQ(TEST_OUTPUT_AMOUNT, container.balance(ITransfersContainer::IncludeAllUnlocked)); TestTransactionBuilder builder; builder.addInput(account, transfers[0]); auto tx = builder.build(); ASSERT_TRUE(container.addTransaction(blockInfo(WALLET_LEGACY_UNCONFIRMED_TRANSACTION_HEIGHT), *tx, {})); ASSERT_EQ(2, container.transactionsCount()); ASSERT_EQ(1, container.transfersCount()); ASSERT_EQ(0, container.balance(ITransfersContainer::IncludeAllUnlocked)); ASSERT_TRUE(markConfirmed(tx->getTransactionHash())); ASSERT_EQ(2, container.transactionsCount()); ASSERT_EQ(1, container.transfersCount()); ASSERT_EQ(0, container.balance(ITransfersContainer::IncludeAll)); }