LCOV - code coverage report
Current view: top level - src/test - accounting_tests.cpp (source / functions) Hit Total Coverage
Test: total_coverage.info Lines: 83 83 100.0 %
Date: 2015-10-12 22:39:14 Functions: 5 7 71.4 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : // Copyright (c) 2012-2014 The Bitcoin Core developers
       2             : // Distributed under the MIT software license, see the accompanying
       3             : // file COPYING or http://www.opensource.org/licenses/mit-license.php.
       4             : 
       5             : #include "wallet/wallet.h"
       6             : #include "wallet/walletdb.h"
       7             : 
       8             : #include "test/test_bitcoin.h"
       9             : 
      10             : #include <stdint.h>
      11             : 
      12             : #include <boost/foreach.hpp>
      13             : #include <boost/test/unit_test.hpp>
      14             : 
      15             : extern CWallet* pwalletMain;
      16             : 
      17           1 : BOOST_FIXTURE_TEST_SUITE(accounting_tests, TestingSetup)
      18             : 
      19             : static void
      20           4 : GetResults(CWalletDB& walletdb, std::map<CAmount, CAccountingEntry>& results)
      21             : {
      22             :     std::list<CAccountingEntry> aes;
      23             : 
      24             :     results.clear();
      25          32 :     BOOST_CHECK(walletdb.ReorderTransactions(pwalletMain) == DB_LOAD_OK);
      26          12 :     walletdb.ListAccountCreditDebit("", aes);
      27          96 :     BOOST_FOREACH(CAccountingEntry& ae, aes)
      28             :     {
      29          12 :         results[ae.nOrderPos] = ae;
      30             :     }
      31           4 : }
      32             : 
      33           6 : BOOST_AUTO_TEST_CASE(acc_orderupgrade)
      34             : {
      35           1 :     CWalletDB walletdb(pwalletMain->strWalletFile);
      36             :     std::vector<CWalletTx*> vpwtx;
      37           2 :     CWalletTx wtx;
      38           2 :     CAccountingEntry ae;
      39             :     std::map<CAmount, CAccountingEntry> results;
      40             : 
      41           1 :     LOCK(pwalletMain->cs_wallet);
      42             : 
      43             :     ae.strAccount = "";
      44           1 :     ae.nCreditDebit = 1;
      45           1 :     ae.nTime = 1333333333;
      46             :     ae.strOtherAccount = "b";
      47             :     ae.strComment = "";
      48           1 :     walletdb.WriteAccountingEntry(ae);
      49             : 
      50           3 :     wtx.mapValue["comment"] = "z";
      51           1 :     pwalletMain->AddToWallet(wtx, false, &walletdb);
      52           1 :     vpwtx.push_back(&pwalletMain->mapWallet[wtx.GetHash()]);
      53           1 :     vpwtx[0]->nTimeReceived = (unsigned int)1333333335;
      54           1 :     vpwtx[0]->nOrderPos = -1;
      55             : 
      56           1 :     ae.nTime = 1333333336;
      57             :     ae.strOtherAccount = "c";
      58           1 :     walletdb.WriteAccountingEntry(ae);
      59             : 
      60           1 :     GetResults(walletdb, results);
      61             : 
      62           8 :     BOOST_CHECK(pwalletMain->nOrderPosNext == 3);
      63           8 :     BOOST_CHECK(2 == results.size());
      64           7 :     BOOST_CHECK(results[0].nTime == 1333333333);
      65           9 :     BOOST_CHECK(results[0].strComment.empty());
      66           8 :     BOOST_CHECK(1 == vpwtx[0]->nOrderPos);
      67           8 :     BOOST_CHECK(results[2].nTime == 1333333336);
      68           9 :     BOOST_CHECK(results[2].strOtherAccount == "c");
      69             : 
      70             : 
      71           1 :     ae.nTime = 1333333330;
      72             :     ae.strOtherAccount = "d";
      73           1 :     ae.nOrderPos = pwalletMain->IncOrderPosNext();
      74           1 :     walletdb.WriteAccountingEntry(ae);
      75             : 
      76           1 :     GetResults(walletdb, results);
      77             : 
      78           8 :     BOOST_CHECK(results.size() == 3);
      79           8 :     BOOST_CHECK(pwalletMain->nOrderPosNext == 4);
      80           8 :     BOOST_CHECK(results[0].nTime == 1333333333);
      81           8 :     BOOST_CHECK(1 == vpwtx[0]->nOrderPos);
      82           8 :     BOOST_CHECK(results[2].nTime == 1333333336);
      83           8 :     BOOST_CHECK(results[3].nTime == 1333333330);
      84           9 :     BOOST_CHECK(results[3].strComment.empty());
      85             : 
      86             : 
      87           3 :     wtx.mapValue["comment"] = "y";
      88             :     {
      89           1 :         CMutableTransaction tx(wtx);
      90           1 :         --tx.nLockTime;  // Just to change the hash :)
      91           2 :         *static_cast<CTransaction*>(&wtx) = CTransaction(tx);
      92             :     }
      93           1 :     pwalletMain->AddToWallet(wtx, false, &walletdb);
      94           1 :     vpwtx.push_back(&pwalletMain->mapWallet[wtx.GetHash()]);
      95           1 :     vpwtx[1]->nTimeReceived = (unsigned int)1333333336;
      96             : 
      97           3 :     wtx.mapValue["comment"] = "x";
      98             :     {
      99           1 :         CMutableTransaction tx(wtx);
     100           1 :         --tx.nLockTime;  // Just to change the hash :)
     101           2 :         *static_cast<CTransaction*>(&wtx) = CTransaction(tx);
     102             :     }
     103           1 :     pwalletMain->AddToWallet(wtx, false, &walletdb);
     104           1 :     vpwtx.push_back(&pwalletMain->mapWallet[wtx.GetHash()]);
     105           1 :     vpwtx[2]->nTimeReceived = (unsigned int)1333333329;
     106           1 :     vpwtx[2]->nOrderPos = -1;
     107             : 
     108           1 :     GetResults(walletdb, results);
     109             : 
     110           8 :     BOOST_CHECK(results.size() == 3);
     111           8 :     BOOST_CHECK(pwalletMain->nOrderPosNext == 6);
     112           8 :     BOOST_CHECK(0 == vpwtx[2]->nOrderPos);
     113           8 :     BOOST_CHECK(results[1].nTime == 1333333333);
     114           7 :     BOOST_CHECK(2 == vpwtx[0]->nOrderPos);
     115           8 :     BOOST_CHECK(results[3].nTime == 1333333336);
     116           8 :     BOOST_CHECK(results[4].nTime == 1333333330);
     117           9 :     BOOST_CHECK(results[4].strComment.empty());
     118           8 :     BOOST_CHECK(5 == vpwtx[1]->nOrderPos);
     119             : 
     120             : 
     121           1 :     ae.nTime = 1333333334;
     122             :     ae.strOtherAccount = "e";
     123           1 :     ae.nOrderPos = -1;
     124           1 :     walletdb.WriteAccountingEntry(ae);
     125             : 
     126           1 :     GetResults(walletdb, results);
     127             : 
     128           8 :     BOOST_CHECK(results.size() == 4);
     129           8 :     BOOST_CHECK(pwalletMain->nOrderPosNext == 7);
     130           8 :     BOOST_CHECK(0 == vpwtx[2]->nOrderPos);
     131           8 :     BOOST_CHECK(results[1].nTime == 1333333333);
     132           8 :     BOOST_CHECK(2 == vpwtx[0]->nOrderPos);
     133           8 :     BOOST_CHECK(results[3].nTime == 1333333336);
     134           9 :     BOOST_CHECK(results[3].strComment.empty());
     135           8 :     BOOST_CHECK(results[4].nTime == 1333333330);
     136           9 :     BOOST_CHECK(results[4].strComment.empty());
     137           8 :     BOOST_CHECK(results[5].nTime == 1333333334);
     138           8 :     BOOST_CHECK(6 == vpwtx[1]->nOrderPos);
     139           1 : }
     140             : 
     141           3 : BOOST_AUTO_TEST_SUITE_END()

Generated by: LCOV version 1.11