Adding tests for new RPCs and renaming frontiers_list to wallet_frontiers to better indicate what it's doing.
This commit is contained in:
parent
c52027db96
commit
068b96626b
4 changed files with 144 additions and 45 deletions
|
@ -1741,3 +1741,102 @@ TEST (rpc, bootstrap)
|
|||
ASSERT_GT (200, iterations);
|
||||
}
|
||||
}
|
||||
|
||||
TEST (rpc, account_remove)
|
||||
{
|
||||
rai::system system0 (24000, 1);
|
||||
auto key1 (system0.wallet (0)->deterministic_insert ());
|
||||
ASSERT_TRUE (system0.wallet (0)->exists (key1));
|
||||
rai::rpc rpc (system0.service, *system0.nodes [0], rai::rpc_config (true));
|
||||
rpc.start ();
|
||||
boost::property_tree::ptree request;
|
||||
request.put ("action", "account_remove");
|
||||
request.put ("wallet", system0.nodes [0]->wallets.items.begin ()->first.to_string ());
|
||||
request.put ("account", key1.to_account ());
|
||||
test_response response (request, rpc, system0.service);
|
||||
while (response.status == 0)
|
||||
{
|
||||
system0.poll ();
|
||||
}
|
||||
ASSERT_FALSE (system0.wallet (0)->exists (key1));
|
||||
}
|
||||
|
||||
TEST (rpc, representatives)
|
||||
{
|
||||
rai::system system0 (24000, 1);
|
||||
rai::rpc rpc (system0.service, *system0.nodes [0], rai::rpc_config (true));
|
||||
rpc.start ();
|
||||
boost::property_tree::ptree request;
|
||||
request.put ("action", "representatives");
|
||||
test_response response (request, rpc, system0.service);
|
||||
while (response.status == 0)
|
||||
{
|
||||
system0.poll ();
|
||||
}
|
||||
ASSERT_EQ (200, response.status);
|
||||
auto & representatives_node (response.json.get_child ("representatives"));
|
||||
std::vector <rai::account> representatives;
|
||||
for (auto i (representatives_node.begin ()), n (representatives_node.end ()); i != n; ++i)
|
||||
{
|
||||
rai::account account;
|
||||
ASSERT_FALSE (account.decode_account (i->first));
|
||||
representatives.push_back (account);
|
||||
}
|
||||
ASSERT_EQ (1, representatives.size ());
|
||||
ASSERT_EQ (rai::genesis_account, representatives [0]);
|
||||
}
|
||||
|
||||
TEST (rpc, wallet_change_seed)
|
||||
{
|
||||
rai::system system0 (24000, 1);
|
||||
rai::keypair seed;
|
||||
{
|
||||
rai::transaction transaction (system0.nodes [0]->store.environment, nullptr, false);
|
||||
rai::raw_key seed0;
|
||||
system0.wallet (0)->store.seed (seed0, transaction);
|
||||
ASSERT_NE (seed.pub, seed0.data);
|
||||
}
|
||||
rai::rpc rpc (system0.service, *system0.nodes [0], rai::rpc_config (true));
|
||||
rpc.start ();
|
||||
boost::property_tree::ptree request;
|
||||
request.put ("action", "wallet_change_seed");
|
||||
request.put ("wallet", system0.nodes [0]->wallets.items.begin ()->first.to_string ());
|
||||
request.put ("seed", seed.pub.to_string ());
|
||||
test_response response (request, rpc, system0.service);
|
||||
while (response.status == 0)
|
||||
{
|
||||
system0.poll ();
|
||||
}
|
||||
ASSERT_EQ (200, response.status);
|
||||
{
|
||||
rai::transaction transaction (system0.nodes [0]->store.environment, nullptr, false);
|
||||
rai::raw_key seed0;
|
||||
system0.wallet (0)->store.seed (seed0, transaction);
|
||||
ASSERT_EQ (seed.pub, seed0.data);
|
||||
}
|
||||
}
|
||||
|
||||
TEST (rpc, wallet_frontiers)
|
||||
{
|
||||
rai::system system0 (24000, 1);
|
||||
system0.wallet (0)->insert_adhoc (rai::test_genesis_key.prv);
|
||||
rai::rpc rpc (system0.service, *system0.nodes [0], rai::rpc_config (true));
|
||||
rpc.start ();
|
||||
boost::property_tree::ptree request;
|
||||
request.put ("action", "wallet_frontiers");
|
||||
request.put ("wallet", system0.nodes [0]->wallets.items.begin ()->first.to_string ());
|
||||
test_response response (request, rpc, system0.service);
|
||||
while (response.status == 0)
|
||||
{
|
||||
system0.poll ();
|
||||
}
|
||||
ASSERT_EQ (200, response.status);
|
||||
auto & frontiers_node (response.json.get_child ("frontiers"));
|
||||
std::vector <rai::account> frontiers;
|
||||
for (auto i (frontiers_node.begin ()), n (frontiers_node.end ()); i != n; ++i)
|
||||
{
|
||||
frontiers.push_back (rai::block_hash (i->second.get <std::string> ("")));
|
||||
}
|
||||
ASSERT_EQ (1, frontiers.size ());
|
||||
ASSERT_EQ (system0.nodes [0]->latest (rai::genesis_account), frontiers [0]);
|
||||
}
|
||||
|
|
|
@ -391,7 +391,7 @@ void rai::rpc_handler::account_remove ()
|
|||
auto wallet (existing->second);
|
||||
rai::transaction transaction (node.store.environment, nullptr, true);
|
||||
if (existing->second->store.valid_password (transaction))
|
||||
{
|
||||
{
|
||||
rai::account account_id;
|
||||
auto error (account_id.decode_account (account_text));
|
||||
if (!error)
|
||||
|
@ -714,42 +714,6 @@ void rai::rpc_handler::frontier_count ()
|
|||
response (response_l);
|
||||
}
|
||||
|
||||
void rai::rpc_handler::frontier_list ()
|
||||
{
|
||||
std::string wallet_text (request.get <std::string> ("wallet"));
|
||||
rai::uint256_union wallet;
|
||||
auto error (wallet.decode_hex (wallet_text));
|
||||
if (!error)
|
||||
{
|
||||
auto existing (node.wallets.items.find (wallet));
|
||||
if (existing != node.wallets.items.end ())
|
||||
{
|
||||
boost::property_tree::ptree response_l;
|
||||
boost::property_tree::ptree frontiers;
|
||||
rai::transaction transaction (node.store.environment, nullptr, false);
|
||||
for (auto i (existing->second->store.begin (transaction)), j (existing->second->store.end ()); i != j; ++i)
|
||||
{
|
||||
rai::account account(i->first);
|
||||
auto latest (node.ledger.latest (transaction, account));
|
||||
if (!latest.is_zero ())
|
||||
{
|
||||
frontiers.put (account.to_account (), latest.to_string ());
|
||||
}
|
||||
}
|
||||
response_l.add_child ("frontiers", frontiers);
|
||||
response (response_l);
|
||||
}
|
||||
else
|
||||
{
|
||||
error_response (response, "Wallet not found");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
error_response (response, "Bad wallet number");
|
||||
}
|
||||
}
|
||||
|
||||
namespace
|
||||
{
|
||||
class history_visitor : public rai::block_visitor
|
||||
|
@ -1388,10 +1352,10 @@ void rai::rpc_handler::representatives ()
|
|||
boost::property_tree::ptree response_l;
|
||||
boost::property_tree::ptree representatives;
|
||||
rai::transaction transaction (node.store.environment, nullptr, false);
|
||||
for (auto i(node.store.representation_begin(transaction)), n(node.store.representation_end()); i != n; ++i)
|
||||
for (auto i (node.store.representation_begin (transaction)), n (node.store.representation_end ()); i != n; ++i)
|
||||
{
|
||||
rai::account account(i->first);
|
||||
auto amount (node.store.representation_get(transaction, account));
|
||||
auto amount (node.store.representation_get (transaction, account));
|
||||
representatives.put (account.to_account (), amount.convert_to <std::string> ());
|
||||
}
|
||||
response_l.add_child ("representatives", representatives);
|
||||
|
@ -1745,6 +1709,42 @@ void rai::rpc_handler::wallet_export ()
|
|||
}
|
||||
}
|
||||
|
||||
void rai::rpc_handler::wallet_frontiers ()
|
||||
{
|
||||
std::string wallet_text (request.get <std::string> ("wallet"));
|
||||
rai::uint256_union wallet;
|
||||
auto error (wallet.decode_hex (wallet_text));
|
||||
if (!error)
|
||||
{
|
||||
auto existing (node.wallets.items.find (wallet));
|
||||
if (existing != node.wallets.items.end ())
|
||||
{
|
||||
boost::property_tree::ptree response_l;
|
||||
boost::property_tree::ptree frontiers;
|
||||
rai::transaction transaction (node.store.environment, nullptr, false);
|
||||
for (auto i (existing->second->store.begin (transaction)), n (existing->second->store.end ()); i != n; ++i)
|
||||
{
|
||||
rai::account account(i->first);
|
||||
auto latest (node.ledger.latest (transaction, account));
|
||||
if (!latest.is_zero ())
|
||||
{
|
||||
frontiers.put (account.to_account (), latest.to_string ());
|
||||
}
|
||||
}
|
||||
response_l.add_child ("frontiers", frontiers);
|
||||
response (response_l);
|
||||
}
|
||||
else
|
||||
{
|
||||
error_response (response, "Wallet not found");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
error_response (response, "Bad wallet number");
|
||||
}
|
||||
}
|
||||
|
||||
void rai::rpc_handler::wallet_key_valid ()
|
||||
{
|
||||
std::string wallet_text (request.get <std::string> ("wallet"));
|
||||
|
@ -2054,10 +2054,6 @@ void rai::rpc_handler::process_request ()
|
|||
{
|
||||
frontier_count ();
|
||||
}
|
||||
else if (action == "frontier_list")
|
||||
{
|
||||
frontier_list ();
|
||||
}
|
||||
else if (action == "history")
|
||||
{
|
||||
history ();
|
||||
|
@ -2186,6 +2182,10 @@ void rai::rpc_handler::process_request ()
|
|||
{
|
||||
wallet_export ();
|
||||
}
|
||||
else if (action == "wallet_frontiers")
|
||||
{
|
||||
wallet_frontiers ();
|
||||
}
|
||||
else if (action == "wallet_key_valid")
|
||||
{
|
||||
wallet_key_valid ();
|
||||
|
|
|
@ -107,7 +107,6 @@ public:
|
|||
void chain ();
|
||||
void frontiers ();
|
||||
void frontier_count ();
|
||||
void frontier_list ();
|
||||
void history ();
|
||||
void keepalive ();
|
||||
void key_create ();
|
||||
|
@ -140,6 +139,7 @@ public:
|
|||
void wallet_create ();
|
||||
void wallet_destroy ();
|
||||
void wallet_export ();
|
||||
void wallet_frontiers ();
|
||||
void wallet_key_valid ();
|
||||
void wallet_representative ();
|
||||
void wallet_representative_set ();
|
||||
|
|
|
@ -2299,7 +2299,7 @@ void rai::block_store::representation_put (MDB_txn * transaction_a, rai::account
|
|||
|
||||
rai::store_iterator rai::block_store::representation_begin (MDB_txn * transaction_a)
|
||||
{
|
||||
rai::store_iterator result(transaction_a, representation);
|
||||
rai::store_iterator result (transaction_a, representation);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue