LCOV - code coverage report
Current view: top level - src/rpc - external_signer.cpp (source / functions) Coverage Total Hit
Test: test_bitcoin_coverage.info Lines: 40.5 % 37 15
Test Date: 2024-11-04 04:45:35 Functions: 66.7 % 3 2
Branches: 34.8 % 132 46

             Branch data     Line data    Source code
       1                 :             : // Copyright (c) 2018-2022 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 <bitcoin-build-config.h> // IWYU pragma: keep
       6                 :             : 
       7                 :             : #include <common/args.h>
       8                 :             : #include <common/system.h>
       9                 :             : #include <external_signer.h>
      10                 :             : #include <rpc/protocol.h>
      11                 :             : #include <rpc/server.h>
      12                 :             : #include <rpc/util.h>
      13                 :             : #include <util/strencodings.h>
      14                 :             : 
      15                 :             : #include <string>
      16                 :             : #include <vector>
      17                 :             : 
      18                 :             : #ifdef ENABLE_EXTERNAL_SIGNER
      19                 :             : 
      20                 :          80 : static RPCHelpMan enumeratesigners()
      21                 :             : {
      22                 :          80 :     return RPCHelpMan{"enumeratesigners",
      23                 :             :         "Returns a list of external signers from -signer.",
      24                 :             :         {},
      25                 :           0 :         RPCResult{
      26                 :             :             RPCResult::Type::OBJ, "", "",
      27                 :             :             {
      28                 :             :                 {RPCResult::Type::ARR, "signers", /*optional=*/false, "",
      29                 :             :                 {
      30                 :             :                     {RPCResult::Type::OBJ, "", "",
      31                 :             :                     {
      32                 :             :                         {RPCResult::Type::STR_HEX, "fingerprint", "Master key fingerprint"},
      33                 :             :                         {RPCResult::Type::STR, "name", "Device name"},
      34                 :             :                     }},
      35                 :             :                 },
      36                 :             :                 }
      37                 :             :             }
      38   [ +  -  +  -  :         640 :         },
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  +  
          +  +  +  +  -  
             -  -  -  -  
                      - ]
      39                 :          80 :         RPCExamples{
      40   [ +  -  +  -  :         160 :             HelpExampleCli("enumeratesigners", "")
                   +  - ]
      41   [ +  -  +  -  :         320 :             + HelpExampleRpc("enumeratesigners", "")
             +  -  +  - ]
      42         [ +  - ]:          80 :         },
      43                 :           0 :         [&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue
      44                 :             :         {
      45   [ #  #  #  # ]:           0 :             const std::string command = gArgs.GetArg("-signer", "");
      46   [ #  #  #  #  :           0 :             if (command == "") throw JSONRPCError(RPC_MISC_ERROR, "Error: restart bitcoind with -signer=<cmd>");
                   #  # ]
      47         [ #  # ]:           0 :             const std::string chain = gArgs.GetChainTypeString();
      48                 :           0 :             UniValue signers_res = UniValue::VARR;
      49                 :           0 :             try {
      50                 :           0 :                 std::vector<ExternalSigner> signers;
      51   [ #  #  #  # ]:           0 :                 ExternalSigner::Enumerate(command, signers, chain);
      52         [ #  # ]:           0 :                 for (const ExternalSigner& signer : signers) {
      53                 :           0 :                     UniValue signer_res = UniValue::VOBJ;
      54   [ #  #  #  #  :           0 :                     signer_res.pushKV("fingerprint", signer.m_fingerprint);
                   #  # ]
      55   [ #  #  #  #  :           0 :                     signer_res.pushKV("name", signer.m_name);
                   #  # ]
      56         [ #  # ]:           0 :                     signers_res.push_back(std::move(signer_res));
      57                 :           0 :                 }
      58         [ #  # ]:           0 :             } catch (const std::exception& e) {
      59   [ -  -  -  - ]:           0 :                 throw JSONRPCError(RPC_MISC_ERROR, e.what());
      60                 :           0 :             }
      61                 :           0 :             UniValue result(UniValue::VOBJ);
      62   [ #  #  #  # ]:           0 :             result.pushKV("signers", std::move(signers_res));
      63                 :           0 :             return result;
      64                 :           0 :         }
      65   [ +  -  +  -  :         480 :     };
             +  -  +  - ]
      66   [ +  -  +  -  :         400 : }
          +  -  +  -  +  
                -  -  - ]
      67                 :             : 
      68                 :         165 : void RegisterSignerRPCCommands(CRPCTable& t)
      69                 :             : {
      70                 :         165 :     static const CRPCCommand commands[]{
      71                 :             :         {"signer", &enumeratesigners},
      72   [ +  +  +  -  :         165 :     };
             +  -  +  - ]
      73         [ +  + ]:         330 :     for (const auto& c : commands) {
      74                 :         165 :         t.appendCommand(c.name, &c);
      75                 :             :     }
      76                 :         165 : }
      77                 :             : 
      78                 :             : #endif // ENABLE_EXTERNAL_SIGNER
        

Generated by: LCOV version 2.0-1