Fix failing son_cli tests

This commit is contained in:
serkixenos 2020-12-14 13:13:09 +01:00
parent d428aad312
commit 5cf5b57ace
4 changed files with 54 additions and 43 deletions

View file

@ -201,9 +201,39 @@ cli_fixture::~cli_fixture()
#endif #endif
} }
void cli_fixture::generate_blocks(fc::time_point_sec timestamp, bool miss_intermediate_blocks, uint32_t skip)
{
auto db = app1->chain_database();
if( miss_intermediate_blocks )
{
generate_block(skip);
auto slots_to_miss = db->get_slot_at_time(timestamp);
if( slots_to_miss <= 1 )
return;
--slots_to_miss;
generate_block(skip, fc::ecc::private_key::regenerate(fc::sha256::hash(string("null_key"))), slots_to_miss);
return;
}
while( db->head_block_time() < timestamp )
generate_block(skip);
}
signed_block cli_fixture::generate_block(uint32_t skip, const fc::ecc::private_key& key, int miss_blocks)
{
skip |= database::skip_undo_history_check;
// skip == ~0 will skip checks specified in database::validation_steps
auto db = app1->chain_database();
auto block = db->generate_block(db->get_slot_time(miss_blocks + 1),
db->get_scheduled_witness(miss_blocks + 1),
key, skip);
db->clear_pending();
return block;
}
bool cli_fixture::generate_maintenance_block() { bool cli_fixture::generate_maintenance_block() {
try { try {
fc::ecc::private_key committee_key = fc::ecc::private_key::regenerate(fc::sha256::hash(string("nathan"))); fc::ecc::private_key committee_key = fc::ecc::private_key::regenerate(fc::sha256::hash(string("null_key")));
uint32_t skip = ~database::skip_fork_db; uint32_t skip = ~database::skip_fork_db;
auto db = app1->chain_database(); auto db = app1->chain_database();
auto maint_time = db->get_dynamic_global_properties().next_maintenance_time; auto maint_time = db->get_dynamic_global_properties().next_maintenance_time;
@ -219,27 +249,6 @@ bool cli_fixture::generate_maintenance_block() {
} }
} }
bool cli_fixture::generate_block()
{
graphene::chain::signed_block returned_block;
return generate_block(returned_block);
}
bool cli_fixture::generate_block(graphene::chain::signed_block& returned_block)
{
try {
fc::ecc::private_key committee_key = fc::ecc::private_key::regenerate(fc::sha256::hash(string("nathan")));
auto db = app1->chain_database();
returned_block = db->generate_block( db->get_slot_time(1),
db->get_scheduled_witness(1),
committee_key,
database::skip_nothing );
return true;
} catch (exception &e) {
return false;
}
}
void cli_fixture::init_nathan() void cli_fixture::init_nathan()
{ {
try try
@ -254,7 +263,7 @@ void cli_fixture::init_nathan()
import_txs = con.wallet_api_ptr->import_balance("nathan", nathan_keys, true); import_txs = con.wallet_api_ptr->import_balance("nathan", nathan_keys, true);
nathan_acct_before_upgrade = con.wallet_api_ptr->get_account("nathan"); nathan_acct_before_upgrade = con.wallet_api_ptr->get_account("nathan");
BOOST_CHECK(generate_block()); generate_block();
// upgrade nathan // upgrade nathan
BOOST_TEST_MESSAGE("Upgrading Nathan to LTM"); BOOST_TEST_MESSAGE("Upgrading Nathan to LTM");

View file

@ -60,13 +60,12 @@ struct cli_fixture
cli_fixture(); cli_fixture();
~cli_fixture(); ~cli_fixture();
/////////// signed_block generate_block(uint32_t skip = ~0,
/// Send a block to the db const fc::ecc::private_key& key = fc::ecc::private_key::regenerate(fc::sha256::hash(string("null_key"))),
/// @param returned_block the signed block int miss_blocks = 0);
/// @returns true on success
/////////// void generate_blocks(fc::time_point_sec timestamp, bool miss_intermediate_blocks = true, uint32_t skip = ~0);
bool generate_block(graphene::chain::signed_block& returned_block);
bool generate_block();
/////////// ///////////
/// @brief Skip intermediate blocks, and generate a maintenance block /// @brief Skip intermediate blocks, and generate a maintenance block
/// @returns true on success /// @returns true on success

View file

@ -75,7 +75,7 @@ BOOST_AUTO_TEST_CASE( create_new_account )
BOOST_CHECK(con.wallet_api_ptr->import_key("jmjatlanta", bki.wif_priv_key)); BOOST_CHECK(con.wallet_api_ptr->import_key("jmjatlanta", bki.wif_priv_key));
con.wallet_api_ptr->save_wallet_file(con.wallet_filename); con.wallet_api_ptr->save_wallet_file(con.wallet_filename);
BOOST_CHECK(generate_block()); generate_block();
fc::usleep( fc::seconds(1) ); fc::usleep( fc::seconds(1) );
// attempt to give jmjatlanta some peerplays // attempt to give jmjatlanta some peerplays
@ -112,7 +112,7 @@ BOOST_FIXTURE_TEST_CASE( cli_vote_for_2_witnesses, cli_fixture )
signed_transaction vote_witness1_tx = con.wallet_api_ptr->vote_for_witness("jmjatlanta", "init1", true, true); signed_transaction vote_witness1_tx = con.wallet_api_ptr->vote_for_witness("jmjatlanta", "init1", true, true);
// generate a block to get things started // generate a block to get things started
BOOST_CHECK(generate_block()); generate_block();
// wait for a maintenance interval // wait for a maintenance interval
BOOST_CHECK(generate_maintenance_block()); BOOST_CHECK(generate_maintenance_block());
@ -197,7 +197,7 @@ BOOST_AUTO_TEST_CASE( account_history_pagination )
"1.3.0", "Here are some CORE token for your new account", true); "1.3.0", "Here are some CORE token for your new account", true);
} }
BOOST_CHECK(generate_block()); generate_block();
// now get account history and make sure everything is there (and no duplicates) // now get account history and make sure everything is there (and no duplicates)
std::vector<graphene::wallet::operation_detail> history = con.wallet_api_ptr->get_account_history("jmjatlanta", 300); std::vector<graphene::wallet::operation_detail> history = con.wallet_api_ptr->get_account_history("jmjatlanta", 300);
@ -489,7 +489,7 @@ BOOST_FIXTURE_TEST_CASE( saving_keys_wallet_test, cli_fixture )
graphene::wallet::plain_keys pk = decrypt_keys( "supersecret", wallet.cipher_keys ); graphene::wallet::plain_keys pk = decrypt_keys( "supersecret", wallet.cipher_keys );
BOOST_CHECK( pk.keys.size() == 1 ); // nathan key BOOST_CHECK( pk.keys.size() == 1 ); // nathan key
BOOST_CHECK( generate_block() ); generate_block();
fc::usleep( fc::seconds(1) ); fc::usleep( fc::seconds(1) );
wallet = fc::json::from_file( path ).as<graphene::wallet::wallet_data>( 2 * GRAPHENE_MAX_NESTED_OBJECTS ); wallet = fc::json::from_file( path ).as<graphene::wallet::wallet_data>( 2 * GRAPHENE_MAX_NESTED_OBJECTS );

View file

@ -28,6 +28,7 @@
#include <boost/test/unit_test.hpp> #include <boost/test/unit_test.hpp>
#include <graphene/chain/config.hpp> #include <graphene/chain/config.hpp>
#include <graphene/chain/hardfork.hpp>
class son_test_helper class son_test_helper
{ {
@ -38,6 +39,8 @@ public:
fixture_(fixture) fixture_(fixture)
{ {
fixture_.init_nathan(); fixture_.init_nathan();
fixture_.generate_blocks(HARDFORK_SON_TIME);
fixture_.generate_block();
} }
void create_son(const std::string& account_name, const std::string& son_url, void create_son(const std::string& account_name, const std::string& son_url,
@ -67,7 +70,7 @@ public:
"nathan", account_name, "65000", "1.3.0", "Here are some CORE token for your new account", true "nathan", account_name, "65000", "1.3.0", "Here are some CORE token for your new account", true
); );
BOOST_CHECK(fixture_.generate_block()); fixture_.generate_block();
// upgrade son account // upgrade son account
BOOST_TEST_MESSAGE("Upgrading son account to LTM"); BOOST_TEST_MESSAGE("Upgrading son account to LTM");
@ -77,16 +80,16 @@ public:
// verify that the upgrade was successful // verify that the upgrade was successful
BOOST_CHECK(son_account.is_lifetime_member()); BOOST_CHECK(son_account.is_lifetime_member());
BOOST_CHECK(fixture_.generate_block()); fixture_.generate_block();
// create deposit vesting // create deposit vesting
fixture_.con.wallet_api_ptr->create_vesting_balance(account_name, fixture_.con.wallet_api_ptr->create_vesting_balance(account_name,
"50", "1.3.0", vesting_balance_type::son, true); "50", "1.3.0", vesting_balance_type::son, true);
BOOST_CHECK(fixture_.generate_block()); fixture_.generate_block();
// create pay_vb vesting // create pay_vb vesting
fixture_.con.wallet_api_ptr->create_vesting_balance(account_name, "1", "1.3.0", vesting_balance_type::normal, true); fixture_.con.wallet_api_ptr->create_vesting_balance(account_name, "1", "1.3.0", vesting_balance_type::normal, true);
BOOST_CHECK(fixture_.generate_block()); fixture_.generate_block();
// check deposits are here // check deposits are here
auto deposits = fixture_.con.wallet_api_ptr->get_vesting_balances(account_name); auto deposits = fixture_.con.wallet_api_ptr->get_vesting_balances(account_name);
@ -424,7 +427,7 @@ BOOST_AUTO_TEST_CASE( update_son_votes_test )
con.wallet_api_ptr->create_vesting_balance("nathan", "1000", "1.3.0", vesting_balance_type::gpos, true); con.wallet_api_ptr->create_vesting_balance("nathan", "1000", "1.3.0", vesting_balance_type::gpos, true);
update_votes_tx = con.wallet_api_ptr->update_son_votes("nathan", accepted, update_votes_tx = con.wallet_api_ptr->update_son_votes("nathan", accepted,
rejected, 2, true); rejected, 2, true);
BOOST_CHECK(generate_block()); generate_block();
BOOST_CHECK(generate_maintenance_block()); BOOST_CHECK(generate_maintenance_block());
// Verify the votes // Verify the votes
@ -464,7 +467,7 @@ BOOST_AUTO_TEST_CASE( update_son_votes_test )
rejected.push_back("son1accnt"); rejected.push_back("son1accnt");
BOOST_CHECK_THROW(update_votes_tx = con.wallet_api_ptr->update_son_votes("nathan", accepted, BOOST_CHECK_THROW(update_votes_tx = con.wallet_api_ptr->update_son_votes("nathan", accepted,
rejected, 1, true), fc::exception); rejected, 1, true), fc::exception);
BOOST_CHECK(generate_block()); generate_block();
// Verify the votes // Verify the votes
son1_obj = con.wallet_api_ptr->get_son("son1account"); son1_obj = con.wallet_api_ptr->get_son("son1account");
@ -678,7 +681,7 @@ BOOST_AUTO_TEST_CASE( maintenance_test )
// put SON in maintenance mode // put SON in maintenance mode
con.wallet_api_ptr->request_son_maintenance(name, true); con.wallet_api_ptr->request_son_maintenance(name, true);
BOOST_CHECK(generate_block()); generate_block();
// check SON is in request_maintenance // check SON is in request_maintenance
son_obj = con.wallet_api_ptr->get_son(name); son_obj = con.wallet_api_ptr->get_son(name);
@ -686,7 +689,7 @@ BOOST_AUTO_TEST_CASE( maintenance_test )
// restore SON activity // restore SON activity
con.wallet_api_ptr->cancel_request_son_maintenance(name, true); con.wallet_api_ptr->cancel_request_son_maintenance(name, true);
BOOST_CHECK(generate_block()); generate_block();
// check SON is active // check SON is active
son_obj = con.wallet_api_ptr->get_son(name); son_obj = con.wallet_api_ptr->get_son(name);
@ -694,7 +697,7 @@ BOOST_AUTO_TEST_CASE( maintenance_test )
// put SON in maintenance mode // put SON in maintenance mode
con.wallet_api_ptr->request_son_maintenance(name, true); con.wallet_api_ptr->request_son_maintenance(name, true);
BOOST_CHECK(generate_block()); generate_block();
// check SON is in request_maintenance // check SON is in request_maintenance
son_obj = con.wallet_api_ptr->get_son(name); son_obj = con.wallet_api_ptr->get_son(name);