Changeset View
Changeset View
Standalone View
Standalone View
src/wallet/test/accounting_tests.cpp
// Copyright (c) 2012-2016 The Bitcoin Core developers | // Copyright (c) 2012-2016 The Bitcoin Core developers | ||||
// Distributed under the MIT software license, see the accompanying | // Distributed under the MIT software license, see the accompanying | ||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php. | // file COPYING or http://www.opensource.org/licenses/mit-license.php. | ||||
#include <wallet/wallet.h> | #include <wallet/wallet.h> | ||||
#include <wallet/test/wallet_test_fixture.h> | #include <wallet/test/wallet_test_fixture.h> | ||||
#include <boost/test/unit_test.hpp> | #include <boost/test/unit_test.hpp> | ||||
#include <cstdint> | #include <cstdint> | ||||
BOOST_FIXTURE_TEST_SUITE(accounting_tests, WalletTestingSetup) | BOOST_FIXTURE_TEST_SUITE(accounting_tests, WalletTestingSetup) | ||||
static void GetResults(CWallet *wallet, | static void GetResults(CWallet &wallet, | ||||
std::map<Amount, CAccountingEntry> &results) { | std::map<Amount, CAccountingEntry> &results) { | ||||
std::list<CAccountingEntry> aes; | std::list<CAccountingEntry> aes; | ||||
results.clear(); | results.clear(); | ||||
BOOST_CHECK(wallet->ReorderTransactions() == DBErrors::LOAD_OK); | BOOST_CHECK(wallet.ReorderTransactions() == DBErrors::LOAD_OK); | ||||
wallet->ListAccountCreditDebit("", aes); | wallet.ListAccountCreditDebit("", aes); | ||||
for (CAccountingEntry &ae : aes) { | for (CAccountingEntry &ae : aes) { | ||||
results[ae.nOrderPos * SATOSHI] = ae; | results[ae.nOrderPos * SATOSHI] = ae; | ||||
} | } | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(acc_orderupgrade) { | BOOST_AUTO_TEST_CASE(acc_orderupgrade) { | ||||
std::vector<CWalletTx *> vpwtx; | std::vector<CWalletTx *> vpwtx; | ||||
CWalletTx wtx(nullptr /* pwallet */, MakeTransactionRef()); | CWalletTx wtx(nullptr /* pwallet */, MakeTransactionRef()); | ||||
CAccountingEntry ae; | CAccountingEntry ae; | ||||
std::map<Amount, CAccountingEntry> results; | std::map<Amount, CAccountingEntry> results; | ||||
LOCK(pwalletMain->cs_wallet); | LOCK(m_wallet.cs_wallet); | ||||
ae.strAccount = ""; | ae.strAccount = ""; | ||||
ae.nCreditDebit = SATOSHI; | ae.nCreditDebit = SATOSHI; | ||||
ae.nTime = 1333333333; | ae.nTime = 1333333333; | ||||
ae.strOtherAccount = "b"; | ae.strOtherAccount = "b"; | ||||
ae.strComment = ""; | ae.strComment = ""; | ||||
pwalletMain->AddAccountingEntry(ae); | m_wallet.AddAccountingEntry(ae); | ||||
wtx.mapValue["comment"] = "z"; | wtx.mapValue["comment"] = "z"; | ||||
pwalletMain->AddToWallet(wtx); | m_wallet.AddToWallet(wtx); | ||||
vpwtx.push_back(&pwalletMain->mapWallet.at(wtx.GetId())); | vpwtx.push_back(&m_wallet.mapWallet.at(wtx.GetId())); | ||||
vpwtx[0]->nTimeReceived = (unsigned int)1333333335; | vpwtx[0]->nTimeReceived = (unsigned int)1333333335; | ||||
vpwtx[0]->nOrderPos = -1; | vpwtx[0]->nOrderPos = -1; | ||||
ae.nTime = 1333333336; | ae.nTime = 1333333336; | ||||
ae.strOtherAccount = "c"; | ae.strOtherAccount = "c"; | ||||
pwalletMain->AddAccountingEntry(ae); | m_wallet.AddAccountingEntry(ae); | ||||
GetResults(pwalletMain.get(), results); | GetResults(m_wallet, results); | ||||
BOOST_CHECK(pwalletMain->nOrderPosNext == 3); | BOOST_CHECK(m_wallet.nOrderPosNext == 3); | ||||
BOOST_CHECK(2 == results.size()); | BOOST_CHECK(2 == results.size()); | ||||
BOOST_CHECK(results[Amount::zero()].nTime == 1333333333); | BOOST_CHECK(results[Amount::zero()].nTime == 1333333333); | ||||
BOOST_CHECK(results[Amount::zero()].strComment.empty()); | BOOST_CHECK(results[Amount::zero()].strComment.empty()); | ||||
BOOST_CHECK(1 == vpwtx[0]->nOrderPos); | BOOST_CHECK(1 == vpwtx[0]->nOrderPos); | ||||
BOOST_CHECK(results[2 * SATOSHI].nTime == 1333333336); | BOOST_CHECK(results[2 * SATOSHI].nTime == 1333333336); | ||||
BOOST_CHECK(results[2 * SATOSHI].strOtherAccount == "c"); | BOOST_CHECK(results[2 * SATOSHI].strOtherAccount == "c"); | ||||
ae.nTime = 1333333330; | ae.nTime = 1333333330; | ||||
ae.strOtherAccount = "d"; | ae.strOtherAccount = "d"; | ||||
ae.nOrderPos = pwalletMain->IncOrderPosNext(); | ae.nOrderPos = m_wallet.IncOrderPosNext(); | ||||
pwalletMain->AddAccountingEntry(ae); | m_wallet.AddAccountingEntry(ae); | ||||
GetResults(pwalletMain.get(), results); | GetResults(m_wallet, results); | ||||
BOOST_CHECK(results.size() == 3); | BOOST_CHECK(results.size() == 3); | ||||
BOOST_CHECK(pwalletMain->nOrderPosNext == 4); | BOOST_CHECK(m_wallet.nOrderPosNext == 4); | ||||
BOOST_CHECK(results[Amount::zero()].nTime == 1333333333); | BOOST_CHECK(results[Amount::zero()].nTime == 1333333333); | ||||
BOOST_CHECK(1 == vpwtx[0]->nOrderPos); | BOOST_CHECK(1 == vpwtx[0]->nOrderPos); | ||||
BOOST_CHECK(results[2 * SATOSHI].nTime == 1333333336); | BOOST_CHECK(results[2 * SATOSHI].nTime == 1333333336); | ||||
BOOST_CHECK(results[3 * SATOSHI].nTime == 1333333330); | BOOST_CHECK(results[3 * SATOSHI].nTime == 1333333330); | ||||
BOOST_CHECK(results[3 * SATOSHI].strComment.empty()); | BOOST_CHECK(results[3 * SATOSHI].strComment.empty()); | ||||
wtx.mapValue["comment"] = "y"; | wtx.mapValue["comment"] = "y"; | ||||
{ | { | ||||
CMutableTransaction tx(*wtx.tx); | CMutableTransaction tx(*wtx.tx); | ||||
// Just to change the hash :) | // Just to change the hash :) | ||||
--tx.nLockTime; | --tx.nLockTime; | ||||
wtx.SetTx(MakeTransactionRef(std::move(tx))); | wtx.SetTx(MakeTransactionRef(std::move(tx))); | ||||
} | } | ||||
pwalletMain->AddToWallet(wtx); | m_wallet.AddToWallet(wtx); | ||||
vpwtx.push_back(&pwalletMain->mapWallet.at(wtx.GetId())); | vpwtx.push_back(&m_wallet.mapWallet.at(wtx.GetId())); | ||||
vpwtx[1]->nTimeReceived = (unsigned int)1333333336; | vpwtx[1]->nTimeReceived = (unsigned int)1333333336; | ||||
wtx.mapValue["comment"] = "x"; | wtx.mapValue["comment"] = "x"; | ||||
{ | { | ||||
CMutableTransaction tx(*wtx.tx); | CMutableTransaction tx(*wtx.tx); | ||||
// Just to change the hash :) | // Just to change the hash :) | ||||
--tx.nLockTime; | --tx.nLockTime; | ||||
wtx.SetTx(MakeTransactionRef(std::move(tx))); | wtx.SetTx(MakeTransactionRef(std::move(tx))); | ||||
} | } | ||||
pwalletMain->AddToWallet(wtx); | m_wallet.AddToWallet(wtx); | ||||
vpwtx.push_back(&pwalletMain->mapWallet.at(wtx.GetId())); | vpwtx.push_back(&m_wallet.mapWallet.at(wtx.GetId())); | ||||
vpwtx[2]->nTimeReceived = (unsigned int)1333333329; | vpwtx[2]->nTimeReceived = (unsigned int)1333333329; | ||||
vpwtx[2]->nOrderPos = -1; | vpwtx[2]->nOrderPos = -1; | ||||
GetResults(pwalletMain.get(), results); | GetResults(m_wallet, results); | ||||
BOOST_CHECK(results.size() == 3); | BOOST_CHECK(results.size() == 3); | ||||
BOOST_CHECK(pwalletMain->nOrderPosNext == 6); | BOOST_CHECK(m_wallet.nOrderPosNext == 6); | ||||
BOOST_CHECK(0 == vpwtx[2]->nOrderPos); | BOOST_CHECK(0 == vpwtx[2]->nOrderPos); | ||||
BOOST_CHECK(results[SATOSHI].nTime == 1333333333); | BOOST_CHECK(results[SATOSHI].nTime == 1333333333); | ||||
BOOST_CHECK(2 == vpwtx[0]->nOrderPos); | BOOST_CHECK(2 == vpwtx[0]->nOrderPos); | ||||
BOOST_CHECK(results[3 * SATOSHI].nTime == 1333333336); | BOOST_CHECK(results[3 * SATOSHI].nTime == 1333333336); | ||||
BOOST_CHECK(results[4 * SATOSHI].nTime == 1333333330); | BOOST_CHECK(results[4 * SATOSHI].nTime == 1333333330); | ||||
BOOST_CHECK(results[4 * SATOSHI].strComment.empty()); | BOOST_CHECK(results[4 * SATOSHI].strComment.empty()); | ||||
BOOST_CHECK(5 == vpwtx[1]->nOrderPos); | BOOST_CHECK(5 == vpwtx[1]->nOrderPos); | ||||
ae.nTime = 1333333334; | ae.nTime = 1333333334; | ||||
ae.strOtherAccount = "e"; | ae.strOtherAccount = "e"; | ||||
ae.nOrderPos = -1; | ae.nOrderPos = -1; | ||||
pwalletMain->AddAccountingEntry(ae); | m_wallet.AddAccountingEntry(ae); | ||||
GetResults(pwalletMain.get(), results); | GetResults(m_wallet, results); | ||||
BOOST_CHECK(results.size() == 4); | BOOST_CHECK(results.size() == 4); | ||||
BOOST_CHECK(pwalletMain->nOrderPosNext == 7); | BOOST_CHECK(m_wallet.nOrderPosNext == 7); | ||||
BOOST_CHECK(0 == vpwtx[2]->nOrderPos); | BOOST_CHECK(0 == vpwtx[2]->nOrderPos); | ||||
BOOST_CHECK(results[SATOSHI].nTime == 1333333333); | BOOST_CHECK(results[SATOSHI].nTime == 1333333333); | ||||
BOOST_CHECK(2 == vpwtx[0]->nOrderPos); | BOOST_CHECK(2 == vpwtx[0]->nOrderPos); | ||||
BOOST_CHECK(results[3 * SATOSHI].nTime == 1333333336); | BOOST_CHECK(results[3 * SATOSHI].nTime == 1333333336); | ||||
BOOST_CHECK(results[3 * SATOSHI].strComment.empty()); | BOOST_CHECK(results[3 * SATOSHI].strComment.empty()); | ||||
BOOST_CHECK(results[4 * SATOSHI].nTime == 1333333330); | BOOST_CHECK(results[4 * SATOSHI].nTime == 1333333330); | ||||
BOOST_CHECK(results[4 * SATOSHI].strComment.empty()); | BOOST_CHECK(results[4 * SATOSHI].strComment.empty()); | ||||
BOOST_CHECK(results[5 * SATOSHI].nTime == 1333333334); | BOOST_CHECK(results[5 * SATOSHI].nTime == 1333333334); | ||||
BOOST_CHECK(6 == vpwtx[1]->nOrderPos); | BOOST_CHECK(6 == vpwtx[1]->nOrderPos); | ||||
} | } | ||||
BOOST_AUTO_TEST_SUITE_END() | BOOST_AUTO_TEST_SUITE_END() |