1 #include <boost/algorithm/string.hpp>
2 #include <boost/foreach.hpp>
3 #include <boost/test/unit_test.hpp>
12 BOOST_AUTO_TEST_SUITE(rpc_tests)
15 createArgs(
int nRequired, const
char* address1=NULL, const
char* address2=NULL)
18 result.push_back(nRequired);
20 if (address1) addresses.push_back(address1);
21 if (address2) addresses.push_back(address2);
22 result.push_back(addresses);
31 const char address1Hex[] =
"0434e3e09f49ea168c5bbf53f877ff4206923858aab7c7e1df25bc263978107c95e35065a27ef6f1b27222db0ec97e0e895eaca603d3ee0d4c060ce3d8a00286c8";
33 const char address2Hex[] =
"0388c2037017c62240b6b72ac1a2a5f94da790596ebd06177c8572752922165cb4";
37 BOOST_CHECK_NO_THROW(v = addmultisig(createArgs(1, address1Hex),
false));
41 BOOST_CHECK_NO_THROW(v = addmultisig(createArgs(1, address1Hex, address2Hex),
false));
45 BOOST_CHECK_NO_THROW(v = addmultisig(createArgs(2, address1Hex, address2Hex),
false));
49 BOOST_CHECK_THROW(addmultisig(createArgs(0),
false), runtime_error);
50 BOOST_CHECK_THROW(addmultisig(createArgs(1),
false), runtime_error);
51 BOOST_CHECK_THROW(addmultisig(createArgs(2, address1Hex),
false), runtime_error);
53 BOOST_CHECK_THROW(addmultisig(createArgs(1,
""),
false), runtime_error);
54 BOOST_CHECK_THROW(addmultisig(createArgs(1,
"NotAValidPubkey"),
false), runtime_error);
56 string short1(address1Hex, address1Hex+
sizeof(address1Hex)-2);
57 BOOST_CHECK_THROW(addmultisig(createArgs(2, short1.c_str()),
false), runtime_error);
59 string short2(address1Hex+1, address1Hex+
sizeof(address1Hex));
60 BOOST_CHECK_THROW(addmultisig(createArgs(2, short2.c_str()),
false), runtime_error);
66 boost::split(vArgs, args, boost::is_any_of(
" \t"));
67 string strMethod = vArgs[0];
68 vArgs.erase(vArgs.begin());
73 Value result = (*method)(params,
false);
87 BOOST_CHECK_NO_THROW(
CallRPC(
"listunspent"));
88 BOOST_CHECK_THROW(
CallRPC(
"listunspent string"), runtime_error);
89 BOOST_CHECK_THROW(
CallRPC(
"listunspent 0 string"), runtime_error);
90 BOOST_CHECK_THROW(
CallRPC(
"listunspent 0 1 not_array"), runtime_error);
91 BOOST_CHECK_THROW(
CallRPC(
"listunspent 0 1 [] extra"), runtime_error);
92 BOOST_CHECK_NO_THROW(r=
CallRPC(
"listunspent 0 1 []"));
95 BOOST_CHECK_NO_THROW(
CallRPC(
"listreceivedbyaddress"));
96 BOOST_CHECK_NO_THROW(
CallRPC(
"listreceivedbyaddress 0"));
97 BOOST_CHECK_THROW(
CallRPC(
"listreceivedbyaddress not_int"), runtime_error);
98 BOOST_CHECK_THROW(
CallRPC(
"listreceivedbyaddress 0 not_bool"), runtime_error);
99 BOOST_CHECK_NO_THROW(
CallRPC(
"listreceivedbyaddress 0 true"));
100 BOOST_CHECK_THROW(
CallRPC(
"listreceivedbyaddress 0 true extra"), runtime_error);
102 BOOST_CHECK_NO_THROW(
CallRPC(
"listreceivedbyaccount"));
103 BOOST_CHECK_NO_THROW(
CallRPC(
"listreceivedbyaccount 0"));
104 BOOST_CHECK_THROW(
CallRPC(
"listreceivedbyaccount not_int"), runtime_error);
105 BOOST_CHECK_THROW(
CallRPC(
"listreceivedbyaccount 0 not_bool"), runtime_error);
106 BOOST_CHECK_NO_THROW(
CallRPC(
"listreceivedbyaccount 0 true"));
107 BOOST_CHECK_THROW(
CallRPC(
"listreceivedbyaccount 0 true extra"), runtime_error);
116 BOOST_CHECK_THROW(
CallRPC(
"getrawtransaction"), runtime_error);
117 BOOST_CHECK_THROW(
CallRPC(
"getrawtransaction not_hex"), runtime_error);
118 BOOST_CHECK_THROW(
CallRPC(
"getrawtransaction a3b807410df0b60fcb9736768df5823938b2f838694939ba45f3c0a1bff150ed not_int"), runtime_error);
120 BOOST_CHECK_THROW(
CallRPC(
"createrawtransaction"), runtime_error);
121 BOOST_CHECK_THROW(
CallRPC(
"createrawtransaction null null"), runtime_error);
122 BOOST_CHECK_THROW(
CallRPC(
"createrawtransaction not_array"), runtime_error);
123 BOOST_CHECK_THROW(
CallRPC(
"createrawtransaction [] []"), runtime_error);
124 BOOST_CHECK_THROW(
CallRPC(
"createrawtransaction {} {}"), runtime_error);
125 BOOST_CHECK_NO_THROW(
CallRPC(
"createrawtransaction [] {}"));
126 BOOST_CHECK_THROW(
CallRPC(
"createrawtransaction [] {} extra"), runtime_error);
128 BOOST_CHECK_THROW(
CallRPC(
"decoderawtransaction"), runtime_error);
129 BOOST_CHECK_THROW(
CallRPC(
"decoderawtransaction null"), runtime_error);
130 BOOST_CHECK_THROW(
CallRPC(
"decoderawtransaction DEADBEEF"), runtime_error);
131 string rawtx =
"0100000001a15d57094aa7a21a28cb20b59aab8fc7d1149a3bdbcddba9c622e4f5f6a99ece010000006c493046022100f93bb0e7d8db7bd46e40132d1f8242026e045f03a0efe71bbb8e3f475e970d790221009337cd7f1f929f00cc6ff01f03729b069a7c21b59b1736ddfee5db5946c5da8c0121033b9b137ee87d5a812d6f506efdd37f0affa7ffc310711c06c7f3e097c9447c52ffffffff0100e1f505000000001976a9140389035a9225b3839e2bbf32d826a1e222031fd888ac00000000";
132 BOOST_CHECK_NO_THROW(r =
CallRPC(
string(
"decoderawtransaction ")+rawtx));
135 BOOST_CHECK_THROW(r =
CallRPC(
string(
"decoderawtransaction ")+rawtx+
" extra"), runtime_error);
137 BOOST_CHECK_THROW(
CallRPC(
"signrawtransaction"), runtime_error);
138 BOOST_CHECK_THROW(
CallRPC(
"signrawtransaction null"), runtime_error);
139 BOOST_CHECK_THROW(
CallRPC(
"signrawtransaction ff00"), runtime_error);
140 BOOST_CHECK_NO_THROW(
CallRPC(
string(
"signrawtransaction ")+rawtx));
141 BOOST_CHECK_NO_THROW(
CallRPC(
string(
"signrawtransaction ")+rawtx+
" null null NONE|ANYONECANPAY"));
142 BOOST_CHECK_NO_THROW(
CallRPC(
string(
"signrawtransaction ")+rawtx+
" [] [] NONE|ANYONECANPAY"));
143 BOOST_CHECK_THROW(
CallRPC(
string(
"signrawtransaction ")+rawtx+
" null null badenum"), runtime_error);
146 BOOST_CHECK_THROW(
CallRPC(
"sendrawtransaction"), runtime_error);
147 BOOST_CHECK_THROW(
CallRPC(
"sendrawtransaction null"), runtime_error);
148 BOOST_CHECK_THROW(
CallRPC(
"sendrawtransaction DEADBEEF"), runtime_error);
149 BOOST_CHECK_THROW(
CallRPC(
string(
"sendrawtransaction ")+rawtx+
" extra"), runtime_error);
157 "[{\"txid\":\"b4cc287e58f87cdae59417329f710f3ecd75a4ee1d2872b7248f50977c8493f3\","
158 "\"vout\":1,\"scriptPubKey\":\"a914b10c9df5f7edf436c697f02f1efdba4cf399615187\","
159 "\"redeemScript\":\"512103debedc17b3df2badbcdd86d5feb4562b86fe182e5998abd8bcd4f122c6155b1b21027e940bb73ab8732bfdf7f9216ecefca5b94d6df834e77e108f68e66f126044c052ae\"}]";
160 r =
CallRPC(
string(
"createrawtransaction ")+prevout+
" "+
161 "{\"3HqAe9LtNBjnsfM4CyYaWTnvCaUYT7v4oZ\":11}");
162 string notsigned = r.
get_str();
163 string privkey1 =
"\"T6hoRM7L8u4f9vHd4eGMAmwV6AMCE11PvYi7YjrdegG223kw64r1\"";
164 string privkey2 =
"\"T5Xu6pe5iqQYqXGxhcY2QEFr7NNoVQ5R6A4abpswunCTF9w85g8V\"";
165 r =
CallRPC(
string(
"signrawtransaction ")+notsigned+
" "+prevout+
" "+
"[]");
167 r =
CallRPC(
string(
"signrawtransaction ")+notsigned+
" "+prevout+
" "+
"["+privkey1+
","+privkey2+
"]");
168 BOOST_CHECK(
find_value(r.get_obj(),
"complete").get_bool() ==
true);
171 BOOST_AUTO_TEST_SUITE_END()
const Object & get_obj() const
Config::Object_type Object
const Array & get_array() const
Array RPCConvertValues(const std::string &strMethod, const std::vector< std::string > &strParams)
Convert parameter values for RPC call from strings to command-specific JSON objects.
Object CallRPC(const string &strMethod, const Array ¶ms)
const Object_type::value_type::Value_type & find_value(const Object_type &obj, const String_type &name)
const String_type & get_str() const
json_spirit::Value(* rpcfn_type)(const json_spirit::Array ¶ms, bool fHelp)
BOOST_AUTO_TEST_CASE(rpc_addmultisig)
bool SetString(const char *psz)
std::string get_str(std::string::const_iterator begin, std::string::const_iterator end)