From 4789347b27a9a7b42ef67e789cb85a438e970ca6 Mon Sep 17 00:00:00 2001 From: Ilya Kitaev Date: Wed, 28 Sep 2016 01:36:49 +0300 Subject: libwallet_api: test for create/init wallet on mainnet --- tests/libwallet_api_tests/main.cpp | 53 +++++++++++++++++++++++++++++++++++--- 1 file changed, 50 insertions(+), 3 deletions(-) (limited to 'tests/libwallet_api_tests/main.cpp') diff --git a/tests/libwallet_api_tests/main.cpp b/tests/libwallet_api_tests/main.cpp index 87e0cc935..ad61a1032 100644 --- a/tests/libwallet_api_tests/main.cpp +++ b/tests/libwallet_api_tests/main.cpp @@ -58,6 +58,7 @@ namespace Consts // TODO: get rid of hardcoded paths const char * WALLET_NAME = "testwallet"; +const char * WALLET_NAME_MAINNET = "testwallet_mainnet"; const char * WALLET_NAME_COPY = "testwallet_copy"; const char * WALLET_NAME_WITH_DIR = "walletdir/testwallet_test"; const char * WALLET_NAME_WITH_DIR_NON_WRITABLE = "/var/walletdir/testwallet_test"; @@ -85,6 +86,7 @@ const uint64_t AMOUNT_1XMR = 1000000000000L; const std::string PAYMENT_ID_EMPTY = ""; std::string TESTNET_DAEMON_ADDRESS = "localhost:38081"; +std::string MAINNET_DAEMON_ADDRESS = "localhost:18081"; } @@ -157,6 +159,25 @@ struct WalletManagerTest : public testing::Test }; +struct WalletManagerMainnetTest : public testing::Test +{ + Bitmonero::WalletManager * wmgr; + + + WalletManagerMainnetTest() + { + std::cout << __FUNCTION__ << std::endl; + wmgr = Bitmonero::WalletManagerFactory::getWalletManager(); + Utils::deleteWallet(WALLET_NAME_MAINNET); + } + + + ~WalletManagerMainnetTest() + { + std::cout << __FUNCTION__ << std::endl; + } + +}; struct WalletTest1 : public testing::Test { @@ -871,6 +892,7 @@ TEST_F(WalletTest2, WalletCallBackRefreshedAsync) + TEST_F(WalletTest2, WalletCallbackSent) { @@ -984,17 +1006,42 @@ TEST_F(WalletTest2, WalletCallbackNewBlock) } +TEST_F(WalletManagerMainnetTest, CreateOpenAndRefreshWalletMainNet) +{ + + Bitmonero::Wallet * wallet = wmgr->createWallet(WALLET_NAME_MAINNET, "", WALLET_LANG); + MyWalletListener * wallet_listener = new MyWalletListener(wallet); + std::chrono::seconds wait_for = std::chrono::seconds(30); + std::unique_lock lock (wallet_listener->mutex); + wallet->initAsync(MAINNET_DAEMON_ADDRESS, 0); + std::cerr << "TEST: waiting on refresh lock...\n"; + wallet_listener->cv_refresh.wait_for(lock, wait_for); + std::cerr << "TEST: refresh lock acquired...\n"; + ASSERT_TRUE(wallet_listener->refresh_triggered); + ASSERT_TRUE(wallet->connected()); + ASSERT_TRUE(wallet->blockChainHeight() == wallet->daemonBlockChainHeight()); + std::cerr << "TEST: closing wallet...\n"; + wmgr->closeWallet(wallet); +} + int main(int argc, char** argv) { // we can override default values for "TESTNET_DAEMON_ADDRESS" and "WALLETS_ROOT_DIR" - const char * monero_daemon_addr = std::getenv("TESTNET_DAEMON_ADDRESS"); - if (monero_daemon_addr) { - TESTNET_DAEMON_ADDRESS = monero_daemon_addr; + const char * testnet_daemon_addr = std::getenv("TESTNET_DAEMON_ADDRESS"); + if (testnet_daemon_addr) { + TESTNET_DAEMON_ADDRESS = testnet_daemon_addr; } + const char * mainnet_daemon_addr = std::getenv("MAINNET_DAEMON_ADDRESS"); + if (mainnet_daemon_addr) { + MAINNET_DAEMON_ADDRESS = mainnet_daemon_addr; + } + + + const char * wallets_root_dir = std::getenv("WALLETS_ROOT_DIR"); if (wallets_root_dir) { WALLETS_ROOT_DIR = wallets_root_dir; -- cgit v1.2.3 From 1f73f80c94f2f60990abd2e07f4e75eb59112b30 Mon Sep 17 00:00:00 2001 From: Ilya Kitaev Date: Fri, 30 Sep 2016 02:11:28 +0300 Subject: libwallet_api: fast-refresh for new wallet --- tests/libwallet_api_tests/main.cpp | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) (limited to 'tests/libwallet_api_tests/main.cpp') diff --git a/tests/libwallet_api_tests/main.cpp b/tests/libwallet_api_tests/main.cpp index ad61a1032..42445d53a 100644 --- a/tests/libwallet_api_tests/main.cpp +++ b/tests/libwallet_api_tests/main.cpp @@ -830,8 +830,12 @@ struct MyWalletListener : public Bitmonero::WalletListener virtual void newBlock(uint64_t height) { - std::cout << "wallet: " << wallet->address() - <<", new block received, blockHeight: " << height << std::endl; +// std::cout << "wallet: " << wallet->address() +// <<", new block received, blockHeight: " << height << std::endl; + static int bc_height = wallet->daemonBlockChainHeight(); + std::cout << height + << " / " << bc_height/* 0*/ + << std::endl; newblock_triggered = true; cv_newblock.notify_one(); } @@ -1006,7 +1010,27 @@ TEST_F(WalletTest2, WalletCallbackNewBlock) } -TEST_F(WalletManagerMainnetTest, CreateOpenAndRefreshWalletMainNet) +TEST_F(WalletManagerMainnetTest, CreateOpenAndRefreshWalletMainNetSync) +{ + + Bitmonero::Wallet * wallet = wmgr->createWallet(WALLET_NAME_MAINNET, "", WALLET_LANG); + MyWalletListener * wallet_listener = new MyWalletListener(wallet); + std::chrono::seconds wait_for = std::chrono::seconds(30); + std::unique_lock lock (wallet_listener->mutex); + // wallet->initAsync(MAINNET_DAEMON_ADDRESS, 0); + wallet->init(MAINNET_DAEMON_ADDRESS, 0); + std::cerr << "TEST: waiting on refresh lock...\n"; + //wallet_listener->cv_refresh.wait_for(lock, wait_for); + std::cerr << "TEST: refresh lock acquired...\n"; + ASSERT_TRUE(wallet_listener->refresh_triggered); + ASSERT_TRUE(wallet->connected()); + ASSERT_TRUE(wallet->blockChainHeight() == wallet->daemonBlockChainHeight()); + std::cerr << "TEST: closing wallet...\n"; + wmgr->closeWallet(wallet); +} + + +TEST_F(WalletManagerMainnetTest, CreateOpenAndRefreshWalletMainNetAsync) { Bitmonero::Wallet * wallet = wmgr->createWallet(WALLET_NAME_MAINNET, "", WALLET_LANG); @@ -1014,6 +1038,7 @@ TEST_F(WalletManagerMainnetTest, CreateOpenAndRefreshWalletMainNet) std::chrono::seconds wait_for = std::chrono::seconds(30); std::unique_lock lock (wallet_listener->mutex); wallet->initAsync(MAINNET_DAEMON_ADDRESS, 0); + // wallet->init(MAINNET_DAEMON_ADDRESS, 0); std::cerr << "TEST: waiting on refresh lock...\n"; wallet_listener->cv_refresh.wait_for(lock, wait_for); std::cerr << "TEST: refresh lock acquired...\n"; -- cgit v1.2.3 From 10fe626e13297d9712763a51174cd6437185e53d Mon Sep 17 00:00:00 2001 From: Ilya Kitaev Date: Fri, 30 Sep 2016 22:42:15 +0300 Subject: libwallet_api: fast-refresh in case of opening non-synced wallet --- tests/libwallet_api_tests/main.cpp | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) (limited to 'tests/libwallet_api_tests/main.cpp') diff --git a/tests/libwallet_api_tests/main.cpp b/tests/libwallet_api_tests/main.cpp index 42445d53a..a4b881407 100644 --- a/tests/libwallet_api_tests/main.cpp +++ b/tests/libwallet_api_tests/main.cpp @@ -1030,7 +1030,7 @@ TEST_F(WalletManagerMainnetTest, CreateOpenAndRefreshWalletMainNetSync) } -TEST_F(WalletManagerMainnetTest, CreateOpenAndRefreshWalletMainNetAsync) +TEST_F(WalletManagerMainnetTest, CreateAndRefreshWalletMainNetAsync) { Bitmonero::Wallet * wallet = wmgr->createWallet(WALLET_NAME_MAINNET, "", WALLET_LANG); @@ -1049,6 +1049,30 @@ TEST_F(WalletManagerMainnetTest, CreateOpenAndRefreshWalletMainNetAsync) wmgr->closeWallet(wallet); } +TEST_F(WalletManagerMainnetTest, OpenAndRefreshWalletMainNetAsync) +{ + + Bitmonero::Wallet * wallet = wmgr->createWallet(WALLET_NAME_MAINNET, "", WALLET_LANG); + + wmgr->closeWallet(wallet); + wallet = wmgr->openWallet(WALLET_NAME_MAINNET, ""); + + MyWalletListener * wallet_listener = new MyWalletListener(wallet); + std::chrono::seconds wait_for = std::chrono::seconds(30); + std::unique_lock lock (wallet_listener->mutex); + wallet->initAsync(MAINNET_DAEMON_ADDRESS, 0); + // wallet->init(MAINNET_DAEMON_ADDRESS, 0); + std::cerr << "TEST: waiting on refresh lock...\n"; + wallet_listener->cv_refresh.wait_for(lock, wait_for); + std::cerr << "TEST: refresh lock acquired...\n"; + ASSERT_TRUE(wallet_listener->refresh_triggered); + ASSERT_TRUE(wallet->connected()); + ASSERT_TRUE(wallet->blockChainHeight() == wallet->daemonBlockChainHeight()); + std::cerr << "TEST: closing wallet...\n"; + wmgr->closeWallet(wallet); +} + + int main(int argc, char** argv) -- cgit v1.2.3 From 8b20cbfa7dcdae314ae8090b3fe0bd83deae0116 Mon Sep 17 00:00:00 2001 From: Ilya Kitaev Date: Sat, 1 Oct 2016 21:04:49 +0300 Subject: libwallet_api: do not use fast-refresh on recovery --- tests/libwallet_api_tests/main.cpp | 64 +++++++++++++++++++++++++++++++------- 1 file changed, 53 insertions(+), 11 deletions(-) (limited to 'tests/libwallet_api_tests/main.cpp') diff --git a/tests/libwallet_api_tests/main.cpp b/tests/libwallet_api_tests/main.cpp index a4b881407..45a94b4dd 100644 --- a/tests/libwallet_api_tests/main.cpp +++ b/tests/libwallet_api_tests/main.cpp @@ -950,7 +950,7 @@ TEST_F(WalletTest2, WalletCallbackReceived) ASSERT_TRUE(wallet_dst->refresh()); uint64_t balance = wallet_dst->balance(); std::cout << "** Balance dst1: " << wallet_dst->displayAmount(wallet_dst->balance()) << std::endl; - MyWalletListener * wallet_dst_listener = new MyWalletListener(wallet_dst); + std::unique_ptr wallet_dst_listener (new MyWalletListener(wallet_dst)); uint64_t amount = AMOUNT_1XMR * 5; std::cout << "** Sending " << Bitmonero::Wallet::displayAmount(amount) << " to " << wallet_dst->address(); @@ -994,7 +994,7 @@ TEST_F(WalletTest2, WalletCallbackNewBlock) std::cout << "** Block height: " << bc1 << std::endl; - MyWalletListener * wallet_listener = new MyWalletListener(wallet_src); + std::unique_ptr wallet_listener (new MyWalletListener(wallet_src)); // wait max 4 min for new block std::chrono::seconds wait_for = std::chrono::seconds(60*4); @@ -1014,10 +1014,7 @@ TEST_F(WalletManagerMainnetTest, CreateOpenAndRefreshWalletMainNetSync) { Bitmonero::Wallet * wallet = wmgr->createWallet(WALLET_NAME_MAINNET, "", WALLET_LANG); - MyWalletListener * wallet_listener = new MyWalletListener(wallet); - std::chrono::seconds wait_for = std::chrono::seconds(30); - std::unique_lock lock (wallet_listener->mutex); - // wallet->initAsync(MAINNET_DAEMON_ADDRESS, 0); + std::unique_ptr wallet_listener (new MyWalletListener(wallet)); wallet->init(MAINNET_DAEMON_ADDRESS, 0); std::cerr << "TEST: waiting on refresh lock...\n"; //wallet_listener->cv_refresh.wait_for(lock, wait_for); @@ -1032,16 +1029,20 @@ TEST_F(WalletManagerMainnetTest, CreateOpenAndRefreshWalletMainNetSync) TEST_F(WalletManagerMainnetTest, CreateAndRefreshWalletMainNetAsync) { + // supposing 120 seconds should be enough for fast refresh + int SECONDS_TO_REFRESH = 120; Bitmonero::Wallet * wallet = wmgr->createWallet(WALLET_NAME_MAINNET, "", WALLET_LANG); - MyWalletListener * wallet_listener = new MyWalletListener(wallet); - std::chrono::seconds wait_for = std::chrono::seconds(30); + std::unique_ptr wallet_listener (new MyWalletListener(wallet)); + + std::chrono::seconds wait_for = std::chrono::seconds(SECONDS_TO_REFRESH); std::unique_lock lock (wallet_listener->mutex); wallet->initAsync(MAINNET_DAEMON_ADDRESS, 0); // wallet->init(MAINNET_DAEMON_ADDRESS, 0); std::cerr << "TEST: waiting on refresh lock...\n"; wallet_listener->cv_refresh.wait_for(lock, wait_for); std::cerr << "TEST: refresh lock acquired...\n"; + ASSERT_TRUE(wallet->status() == Bitmonero::Wallet::Status_Ok); ASSERT_TRUE(wallet_listener->refresh_triggered); ASSERT_TRUE(wallet->connected()); ASSERT_TRUE(wallet->blockChainHeight() == wallet->daemonBlockChainHeight()); @@ -1052,26 +1053,67 @@ TEST_F(WalletManagerMainnetTest, CreateAndRefreshWalletMainNetAsync) TEST_F(WalletManagerMainnetTest, OpenAndRefreshWalletMainNetAsync) { + // supposing 120 seconds should be enough for fast refresh + int SECONDS_TO_REFRESH = 120; Bitmonero::Wallet * wallet = wmgr->createWallet(WALLET_NAME_MAINNET, "", WALLET_LANG); - wmgr->closeWallet(wallet); wallet = wmgr->openWallet(WALLET_NAME_MAINNET, ""); - MyWalletListener * wallet_listener = new MyWalletListener(wallet); - std::chrono::seconds wait_for = std::chrono::seconds(30); + std::unique_ptr wallet_listener (new MyWalletListener(wallet)); + + std::chrono::seconds wait_for = std::chrono::seconds(SECONDS_TO_REFRESH); std::unique_lock lock (wallet_listener->mutex); wallet->initAsync(MAINNET_DAEMON_ADDRESS, 0); // wallet->init(MAINNET_DAEMON_ADDRESS, 0); std::cerr << "TEST: waiting on refresh lock...\n"; wallet_listener->cv_refresh.wait_for(lock, wait_for); std::cerr << "TEST: refresh lock acquired...\n"; + ASSERT_TRUE(wallet->status() == Bitmonero::Wallet::Status_Ok); ASSERT_TRUE(wallet_listener->refresh_triggered); ASSERT_TRUE(wallet->connected()); ASSERT_TRUE(wallet->blockChainHeight() == wallet->daemonBlockChainHeight()); std::cerr << "TEST: closing wallet...\n"; wmgr->closeWallet(wallet); + } +TEST_F(WalletManagerMainnetTest, RecoverAndRefreshWalletMainNetAsync) +{ + + // supposing 120 seconds should be enough for fast refresh + int SECONDS_TO_REFRESH = 120; + Bitmonero::Wallet * wallet = wmgr->createWallet(WALLET_NAME_MAINNET, "", WALLET_LANG); + std::string seed = wallet->seed(); + std::string address = wallet->address(); + wmgr->closeWallet(wallet); + + // deleting wallet files + Utils::deleteWallet(WALLET_NAME_MAINNET); + // ..and recovering wallet from seed + + wallet = wmgr->recoveryWallet(WALLET_NAME_MAINNET, seed); + ASSERT_TRUE(wallet->status() == Bitmonero::Wallet::Status_Ok); + ASSERT_TRUE(wallet->address() == address); + std::unique_ptr wallet_listener (new MyWalletListener(wallet)); + std::chrono::seconds wait_for = std::chrono::seconds(SECONDS_TO_REFRESH); + std::unique_lock lock (wallet_listener->mutex); + wallet->initAsync(MAINNET_DAEMON_ADDRESS, 0); + // wallet->init(MAINNET_DAEMON_ADDRESS, 0); + std::cerr << "TEST: waiting on refresh lock...\n"; + + // here we wait for 120 seconds and test if wallet doesn't syncrnonize blockchain completely, + // as it needs much more than 120 seconds for mainnet + + wallet_listener->cv_refresh.wait_for(lock, wait_for); + ASSERT_TRUE(wallet->status() == Bitmonero::Wallet::Status_Ok); + ASSERT_FALSE(wallet_listener->refresh_triggered); + ASSERT_TRUE(wallet->connected()); + ASSERT_FALSE(wallet->blockChainHeight() == wallet->daemonBlockChainHeight()); + std::cerr << "TEST: closing wallet...\n"; + wmgr->closeWallet(wallet); + std::cerr << "TEST: wallet closed\n"; + +} -- cgit v1.2.3