libwallet_api: do not store wallet on close if status is not ok
This commit is contained in:
parent
63ba2447e2
commit
b1a5a937ff
2 changed files with 72 additions and 5 deletions
|
@ -267,16 +267,18 @@ bool WalletImpl::recover(const std::string &path, const std::string &seed)
|
|||
|
||||
bool WalletImpl::close()
|
||||
{
|
||||
clearStatus();
|
||||
|
||||
bool result = false;
|
||||
try {
|
||||
// LOG_PRINT_L0("Calling wallet::store...");
|
||||
m_wallet->store();
|
||||
// do not store wallet with invalid status
|
||||
if (status() == Status_Ok)
|
||||
m_wallet->store();
|
||||
// LOG_PRINT_L0("wallet::store done");
|
||||
// LOG_PRINT_L0("Calling wallet::stop...");
|
||||
m_wallet->stop();
|
||||
// LOG_PRINT_L0("wallet::stop done");
|
||||
result = true;
|
||||
clearStatus();
|
||||
} catch (const std::exception &e) {
|
||||
m_status = Status_Error;
|
||||
m_errorString = e.what();
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
#include "gtest/gtest.h"
|
||||
|
||||
#include "wallet/wallet2_api.h"
|
||||
#include "wallet/wallet2.h"
|
||||
#include "include_base_utils.h"
|
||||
|
||||
#include <boost/filesystem.hpp>
|
||||
|
@ -41,6 +42,7 @@
|
|||
#include <mutex>
|
||||
#include <thread>
|
||||
#include <atomic>
|
||||
#include <functional>
|
||||
#include <condition_variable>
|
||||
|
||||
|
||||
|
@ -140,7 +142,7 @@ struct WalletManagerTest : public testing::Test
|
|||
{
|
||||
std::cout << __FUNCTION__ << std::endl;
|
||||
wmgr = Bitmonero::WalletManagerFactory::getWalletManager();
|
||||
// Bitmonero::WalletManagerFactory::setLogLevel(Bitmonero::WalletManagerFactory::LogLevel_4);
|
||||
Bitmonero::WalletManagerFactory::setLogLevel(Bitmonero::WalletManagerFactory::LogLevel_4);
|
||||
Utils::deleteWallet(WALLET_NAME);
|
||||
Utils::deleteDir(boost::filesystem::path(WALLET_NAME_WITH_DIR).parent_path().string());
|
||||
}
|
||||
|
@ -210,6 +212,69 @@ TEST_F(WalletManagerTest, WalletManagerOpensWallet)
|
|||
std::cout << "** seed: " << wallet2->seed() << std::endl;
|
||||
}
|
||||
|
||||
|
||||
void open_wallet(Bitmonero::WalletManager *wmgr, Bitmonero::Wallet **wallet, const std::string &pass, std::mutex *mutex)
|
||||
{
|
||||
if (mutex)
|
||||
mutex->lock();
|
||||
LOG_PRINT_L3("opening wallet with password '" << pass << "' in thread: " << std::this_thread::get_id());
|
||||
*wallet = wmgr->openWallet(WALLET_NAME, pass, true);
|
||||
LOG_PRINT_L3("wallet address: " << (*wallet)->address());
|
||||
LOG_PRINT_L3("wallet status: " << (*wallet)->status());
|
||||
LOG_PRINT_L3("closing wallet with password '" << pass << "' in thread: " << std::this_thread::get_id());
|
||||
if (mutex)
|
||||
mutex->unlock();
|
||||
}
|
||||
|
||||
//TEST_F(WalletManagerTest, WalletManagerOpensWalletWithPasswordAndReopenMultiThreaded)
|
||||
//{
|
||||
// // create password protected wallet
|
||||
// std::string wallet_pass = "password";
|
||||
// std::string wrong_wallet_pass = "1111";
|
||||
// Bitmonero::Wallet * wallet1 = wmgr->createWallet(WALLET_NAME, wallet_pass, WALLET_LANG, true);
|
||||
// std::string seed1 = wallet1->seed();
|
||||
// ASSERT_TRUE(wmgr->closeWallet(wallet1));
|
||||
|
||||
// Bitmonero::Wallet *wallet2 = nullptr;
|
||||
// Bitmonero::Wallet *wallet3 = nullptr;
|
||||
|
||||
// std::mutex mutex;
|
||||
// std::thread thread1(open_wallet, wmgr, &wallet2, wrong_wallet_pass, &mutex);
|
||||
// thread1.join();
|
||||
// ASSERT_TRUE(wallet2->status() != Bitmonero::Wallet::Status_Ok);
|
||||
// ASSERT_TRUE(wmgr->closeWallet(wallet2));
|
||||
|
||||
// std::thread thread2(open_wallet, wmgr, &wallet3, wallet_pass, &mutex);
|
||||
// thread2.join();
|
||||
|
||||
// ASSERT_TRUE(wallet3->status() == Bitmonero::Wallet::Status_Ok);
|
||||
// ASSERT_TRUE(wmgr->closeWallet(wallet3));
|
||||
//}
|
||||
|
||||
|
||||
TEST_F(WalletManagerTest, WalletManagerOpensWalletWithPasswordAndReopen)
|
||||
{
|
||||
// create password protected wallet
|
||||
std::string wallet_pass = "password";
|
||||
std::string wrong_wallet_pass = "1111";
|
||||
Bitmonero::Wallet * wallet1 = wmgr->createWallet(WALLET_NAME, wallet_pass, WALLET_LANG, true);
|
||||
std::string seed1 = wallet1->seed();
|
||||
ASSERT_TRUE(wmgr->closeWallet(wallet1));
|
||||
|
||||
Bitmonero::Wallet *wallet2 = nullptr;
|
||||
Bitmonero::Wallet *wallet3 = nullptr;
|
||||
std::mutex mutex;
|
||||
|
||||
open_wallet(wmgr, &wallet2, wrong_wallet_pass, nullptr);
|
||||
ASSERT_TRUE(wallet2->status() != Bitmonero::Wallet::Status_Ok);
|
||||
ASSERT_TRUE(wmgr->closeWallet(wallet2));
|
||||
|
||||
open_wallet(wmgr, &wallet3, wallet_pass, nullptr);
|
||||
ASSERT_TRUE(wallet3->status() == Bitmonero::Wallet::Status_Ok);
|
||||
ASSERT_TRUE(wmgr->closeWallet(wallet3));
|
||||
}
|
||||
|
||||
|
||||
TEST_F(WalletManagerTest, WalletManagerStoresWallet)
|
||||
{
|
||||
|
||||
|
@ -239,7 +304,6 @@ TEST_F(WalletManagerTest, WalletManagerMovesWallet)
|
|||
}
|
||||
|
||||
|
||||
|
||||
TEST_F(WalletManagerTest, WalletManagerChangesPassword)
|
||||
{
|
||||
Bitmonero::Wallet * wallet1 = wmgr->createWallet(WALLET_NAME, WALLET_PASS, WALLET_LANG);
|
||||
|
@ -819,6 +883,7 @@ TEST_F(WalletTest2, WalletCallbackReceived)
|
|||
}
|
||||
|
||||
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
|
||||
|
|
Loading…
Reference in a new issue