From da4fec3db4cb78a39e34b07f86a7e8d2c50f0963 Mon Sep 17 00:00:00 2001 From: Valera Cogut Date: Tue, 10 Jul 2018 09:05:20 +0300 Subject: [PATCH] fixed issue #1050 --- .../wallet/include/graphene/wallet/wallet.hpp | 11 ++++++++ libraries/wallet/wallet.cpp | 19 +++++++++++++ tests/cli/main.cpp | 28 +++++++++++++++++++ 3 files changed, 58 insertions(+) diff --git a/libraries/wallet/include/graphene/wallet/wallet.hpp b/libraries/wallet/include/graphene/wallet/wallet.hpp index 85b069c900..459e343c93 100644 --- a/libraries/wallet/include/graphene/wallet/wallet.hpp +++ b/libraries/wallet/include/graphene/wallet/wallet.hpp @@ -632,6 +632,16 @@ class wallet_api */ bool load_wallet_file(string wallet_filename = ""); + /** Exits from BitShares wallet. + * + * @param wallet_filename the filename of the wallet JSON file to load. + * If \c wallet_filename is empty, it reloads the + * existing wallet file + * + * The current wallet will be closed. + */ + void quit(); + /** Saves the current wallet to the given filename. * * @warning This does not change the wallet filename that will be used for future @@ -1815,4 +1825,5 @@ FC_API( graphene::wallet::wallet_api, (blind_history) (receive_blind_transfer) (get_order_book) + (quit) ) diff --git a/libraries/wallet/wallet.cpp b/libraries/wallet/wallet.cpp index 1347a26e8f..463929ae89 100644 --- a/libraries/wallet/wallet.cpp +++ b/libraries/wallet/wallet.cpp @@ -770,6 +770,20 @@ class wallet_api_impl return true; } + + void quit() + { + ilog( "Exiting Wallet ..." ); + + try { + save_wallet_file(); + } catch (...) { + FC_THROW("Got error while saving wallet file in quit command."); + } + + exit(0); + } + void save_wallet_file(string wallet_filename = "") { // @@ -3762,6 +3776,11 @@ bool wallet_api::load_wallet_file( string wallet_filename ) return my->load_wallet_file( wallet_filename ); } +void wallet_api::quit() +{ + my->quit(); +} + void wallet_api::save_wallet_file( string wallet_filename ) { my->save_wallet_file( wallet_filename ); diff --git a/tests/cli/main.cpp b/tests/cli/main.cpp index 53f702aea1..0862c8dae8 100644 --- a/tests/cli/main.cpp +++ b/tests/cli/main.cpp @@ -388,3 +388,31 @@ BOOST_AUTO_TEST_CASE( cli_set_voting_proxy ) } app1->shutdown(); } + +//////////////// +// Start a server and connect using the same calls as the CLI +// Quit wallet and be sure that file was saved correctly +//////////////// +BOOST_AUTO_TEST_CASE( cli_quit ) +{ + using namespace graphene::chain; + using namespace graphene::app; + std::shared_ptr app1; + try { + BOOST_TEST_MESSAGE("Testing wallet connection and quit command."); + + fc::temp_directory app_dir ( graphene::utilities::temp_directory_path() ); + + int server_port_number = 0; + app1 = start_application(app_dir, server_port_number); + + // connect to the server + client_connection con(app1, app_dir, server_port_number); + + BOOST_CHECK_NO_THROW( con.wallet_api_ptr->quit() ); + } catch( fc::exception& e ) { + edump((e.to_detail_string())); + throw; + } + app1->shutdown(); +} \ No newline at end of file