Expose CRPCTable via bitcoinrpc.h for testing

This commit is contained in:
Pieter Wuille 2012-04-21 01:37:34 +02:00
parent 9862229d4d
commit e46704dd90
3 changed files with 41 additions and 33 deletions

View file

@ -10,6 +10,7 @@
#include "net.h" #include "net.h"
#include "init.h" #include "init.h"
#include "ui_interface.h" #include "ui_interface.h"
#include "bitcoinrpc.h"
#undef printf #undef printf
#include <boost/asio.hpp> #include <boost/asio.hpp>
@ -22,9 +23,6 @@
#include <boost/filesystem/fstream.hpp> #include <boost/filesystem/fstream.hpp>
typedef boost::asio::ssl::stream<boost::asio::ip::tcp::socket> SSLStream; typedef boost::asio::ssl::stream<boost::asio::ip::tcp::socket> SSLStream;
#include "json/json_spirit_reader_template.h"
#include "json/json_spirit_writer_template.h"
#include "json/json_spirit_utils.h"
#define printf OutputDebugStringF #define printf OutputDebugStringF
// MinGW 3.4.5 gets "fatal error: had to relocate PCH" if the json headers are // MinGW 3.4.5 gets "fatal error: had to relocate PCH" if the json headers are
// precompiled in headers.h. The problem might be when the pch file goes over // precompiled in headers.h. The problem might be when the pch file goes over
@ -37,27 +35,6 @@ using namespace boost::asio;
using namespace json_spirit; using namespace json_spirit;
void ThreadRPCServer2(void* parg); void ThreadRPCServer2(void* parg);
typedef Value(*rpcfn_type)(const Array& params, bool fHelp);
class CRPCCommand
{
public:
string name;
rpcfn_type actor;
bool okSafeMode;
};
class CRPCTable
{
private:
map<string, const CRPCCommand*> mapCommands;
public:
CRPCTable();
const CRPCCommand* operator[](string name) const;
string help(string name) const;
};
const CRPCTable tableRPC;
static std::string strRPCUserColonPass; static std::string strRPCUserColonPass;
@ -2028,7 +2005,7 @@ Value getblock(const Array& params, bool fHelp)
// //
static CRPCCommand vRPCCommands[] = static const CRPCCommand vRPCCommands[] =
{ // name function safe mode? { // name function safe mode?
// ------------------------ ----------------------- ---------- // ------------------------ ----------------------- ----------
{ "help", &help, true }, { "help", &help, true },
@ -2084,7 +2061,7 @@ CRPCTable::CRPCTable()
unsigned int vcidx; unsigned int vcidx;
for (vcidx = 0; vcidx < (sizeof(vRPCCommands) / sizeof(vRPCCommands[0])); vcidx++) for (vcidx = 0; vcidx < (sizeof(vRPCCommands) / sizeof(vRPCCommands[0])); vcidx++)
{ {
CRPCCommand *pcmd; const CRPCCommand *pcmd;
pcmd = &vRPCCommands[vcidx]; pcmd = &vRPCCommands[vcidx];
mapCommands[pcmd->name] = pcmd; mapCommands[pcmd->name] = pcmd;
@ -2785,3 +2762,5 @@ int main(int argc, char *argv[])
return 0; return 0;
} }
#endif #endif
const CRPCTable tableRPC;

View file

@ -3,5 +3,39 @@
// Distributed under the MIT/X11 software license, see the accompanying // Distributed under the MIT/X11 software license, see the accompanying
// file license.txt or http://www.opensource.org/licenses/mit-license.php. // file license.txt or http://www.opensource.org/licenses/mit-license.php.
#ifndef _BITCOINRPC_H_
#define _BITCOINRPC_H_ 1
#include <string>
#include <map>
#include "json/json_spirit_reader_template.h"
#include "json/json_spirit_writer_template.h"
#include "json/json_spirit_utils.h"
void ThreadRPCServer(void* parg); void ThreadRPCServer(void* parg);
int CommandLineRPC(int argc, char *argv[]); int CommandLineRPC(int argc, char *argv[]);
typedef json_spirit::Value(*rpcfn_type)(const json_spirit::Array& params, bool fHelp);
class CRPCCommand
{
public:
std::string name;
rpcfn_type actor;
bool okSafeMode;
};
class CRPCTable
{
private:
std::map<std::string, const CRPCCommand*> mapCommands;
public:
CRPCTable();
const CRPCCommand* operator[](std::string name) const;
std::string help(std::string name) const;
};
extern const CRPCTable tableRPC;
#endif

View file

@ -3,16 +3,11 @@
#include "base58.h" #include "base58.h"
#include "util.h" #include "util.h"
#include "json/json_spirit_reader_template.h" #include "bitcoinrpc.h"
#include "json/json_spirit_writer_template.h"
#include "json/json_spirit_utils.h"
using namespace std; using namespace std;
using namespace json_spirit; using namespace json_spirit;
typedef Value(*rpcfn_type)(const Array& params, bool fHelp);
extern map<string, rpcfn_type> mapCallTable;
BOOST_AUTO_TEST_SUITE(rpc_tests) BOOST_AUTO_TEST_SUITE(rpc_tests)
static Array static Array
@ -36,7 +31,7 @@ struct TestNetFixture
BOOST_FIXTURE_TEST_CASE(rpc_addmultisig, TestNetFixture) BOOST_FIXTURE_TEST_CASE(rpc_addmultisig, TestNetFixture)
{ {
rpcfn_type addmultisig = mapCallTable["addmultisigaddress"]; rpcfn_type addmultisig = tableRPC["addmultisigaddress"]->actor;
// old, 65-byte-long: // old, 65-byte-long:
const char* address1Hex = "0434e3e09f49ea168c5bbf53f877ff4206923858aab7c7e1df25bc263978107c95e35065a27ef6f1b27222db0ec97e0e895eaca603d3ee0d4c060ce3d8a00286c8"; const char* address1Hex = "0434e3e09f49ea168c5bbf53f877ff4206923858aab7c7e1df25bc263978107c95e35065a27ef6f1b27222db0ec97e0e895eaca603d3ee0d4c060ce3d8a00286c8";