LCOV - code coverage report
Current view: top level - src/wallet/test - walletdb_tests.cpp (source / functions) Coverage Total Hit
Test: test_bitcoin_coverage.info Lines: 100.0 % 22 22
Test Date: 2024-11-04 04:45:35 Functions: 100.0 % 4 4
Branches: 49.0 % 192 94

             Branch data     Line data    Source code
       1                 :             : // Copyright (c) 2012-2021 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 <test/util/setup_common.h>
       6                 :             : #include <clientversion.h>
       7                 :             : #include <streams.h>
       8                 :             : #include <uint256.h>
       9                 :             : #include <wallet/test/util.h>
      10                 :             : #include <wallet/wallet.h>
      11                 :             : 
      12                 :             : #include <boost/test/unit_test.hpp>
      13                 :             : 
      14                 :             : namespace wallet {
      15                 :             : BOOST_FIXTURE_TEST_SUITE(walletdb_tests, BasicTestingSetup)
      16                 :             : 
      17   [ +  -  +  -  :           7 : BOOST_AUTO_TEST_CASE(walletdb_readkeyvalue)
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
                      - ]
      18                 :             : {
      19                 :             :     /**
      20                 :             :      * When ReadKeyValue() reads from either a "key" or "wkey" it first reads the DataStream into a
      21                 :             :      * CPrivKey or CWalletKey respectively and then reads a hash of the pubkey and privkey into a uint256.
      22                 :             :      * Wallets from 0.8 or before do not store the pubkey/privkey hash, trying to read the hash from old
      23                 :             :      * wallets throws an exception, for backwards compatibility this read is wrapped in a try block to
      24                 :             :      * silently fail. The test here makes sure the type of exception thrown from DataStream::read()
      25                 :             :      * matches the type we expect, otherwise we need to update the "key"/"wkey" exception type caught.
      26                 :             :      */
      27                 :           1 :     DataStream ssValue{};
      28                 :           1 :     uint256 dummy;
      29   [ +  -  -  +  :           2 :     BOOST_CHECK_THROW(ssValue >> dummy, std::ios_base::failure);
          -  -  -  -  -  
             +  +  -  +  
                      - ]
      30                 :           1 : }
      31                 :             : 
      32   [ +  -  +  -  :           7 : BOOST_AUTO_TEST_CASE(walletdb_read_write_deadlock)
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
                      - ]
      33                 :             : {
      34                 :             :     // Exercises a db read write operation that shouldn't deadlock.
      35         [ +  + ]:           2 :     for (const DatabaseFormat& db_format : DATABASE_FORMATS) {
      36                 :             :         // Context setup
      37         [ +  - ]:           1 :         DatabaseOptions options;
      38         [ +  - ]:           1 :         options.require_format = db_format;
      39                 :           1 :         DatabaseStatus status;
      40         [ +  - ]:           1 :         bilingual_str error_string;
      41   [ +  -  +  -  :           4 :         std::unique_ptr<WalletDatabase> db = MakeDatabase(m_path_root / strprintf("wallet_%d_.dat", db_format).c_str(), options, status, error_string);
             +  -  +  - ]
      42   [ +  -  +  - ]:           1 :         BOOST_CHECK_EQUAL(status, DatabaseStatus::SUCCESS);
      43                 :             : 
      44   [ +  -  +  -  :           2 :         std::shared_ptr<CWallet> wallet(new CWallet(m_node.chain.get(), "", std::move(db)));
          +  -  +  -  -  
                      - ]
      45         [ +  - ]:           1 :         wallet->m_keypool_size = 4;
      46                 :             : 
      47                 :             :         // Create legacy spkm
      48         [ +  - ]:           1 :         LOCK(wallet->cs_wallet);
      49         [ +  - ]:           1 :         auto legacy_spkm = wallet->GetOrCreateLegacyScriptPubKeyMan();
      50   [ +  -  +  -  :           2 :         BOOST_CHECK(legacy_spkm->SetupGeneration(true));
             +  -  +  - ]
      51         [ +  - ]:           1 :         wallet->Flush();
      52                 :             : 
      53                 :             :         // Now delete all records, which performs a read write operation.
      54   [ +  -  +  -  :           2 :         BOOST_CHECK(wallet->GetLegacyScriptPubKeyMan()->DeleteRecords());
          +  -  +  -  +  
                      - ]
      55         [ +  - ]:           3 :     }
      56                 :           1 : }
      57                 :             : 
      58                 :             : BOOST_AUTO_TEST_SUITE_END()
      59                 :             : } // namespace wallet
        

Generated by: LCOV version 2.0-1