diff options
author | Riccardo Spagni <ric@spagni.net> | 2016-07-23 09:17:21 +0200 |
---|---|---|
committer | Riccardo Spagni <ric@spagni.net> | 2016-07-23 09:17:21 +0200 |
commit | b582764bd659372d99144a62be4ded45cc47be2d (patch) | |
tree | ad3ca78a09384e33cee7de4fe5159b0bbde2be6e /tests | |
parent | Merge pull request #910 (diff) | |
parent | refreshing wallet even if error happened (diff) | |
download | monero-b582764bd659372d99144a62be4ded45cc47be2d.tar.xz |
Merge pull request #915
d7597c5 refreshing wallet even if error happened (Ilya Kitaev)
6d32a3d wallet_api: async init, Wallet::connected status, log level (Ilya Kitaev)
193d251 libwallet_api cmake: conditionally creating libwallet_merged2 only for STATIC build (Ilya Kitaev)
10c06dd wallet_api: segfault on refresh fixed (Ilya Kitaev)
9d2cb4f WalletListener functionality (Ilya Kitaev)
d27b883 hack to successfull linking for MSYS2 (Ilya Kitaev)
083380c Transaction fee multiplier aka priority integraged (Ilya Kitaev)
00ed12b Wallet::paymentIdValid (Ilya Kitaev)
Diffstat (limited to 'tests')
-rw-r--r-- | tests/libwallet_api_tests/main.cpp | 220 | ||||
-rwxr-xr-x | tests/libwallet_api_tests/scripts/send_funds.sh | 24 |
2 files changed, 199 insertions, 45 deletions
diff --git a/tests/libwallet_api_tests/main.cpp b/tests/libwallet_api_tests/main.cpp index f6f1b0832..d642534b0 100644 --- a/tests/libwallet_api_tests/main.cpp +++ b/tests/libwallet_api_tests/main.cpp @@ -31,6 +31,7 @@ #include "gtest/gtest.h" #include "wallet/wallet2_api.h" +#include "include_base_utils.h" #include <boost/filesystem.hpp> #include <boost/algorithm/string.hpp> @@ -39,6 +40,8 @@ #include <vector> #include <mutex> #include <thread> +#include <atomic> +#include <condition_variable> using namespace std; @@ -137,6 +140,7 @@ struct WalletManagerTest : public testing::Test { std::cout << __FUNCTION__ << std::endl; wmgr = Bitmonero::WalletManagerFactory::getWalletManager(); + // Bitmonero::WalletManagerFactory::setLogLevel(Bitmonero::WalletManagerFactory::LogLevel_4); Utils::deleteWallet(WALLET_NAME); Utils::deleteDir(boost::filesystem::path(WALLET_NAME_WITH_DIR).parent_path().string()); } @@ -235,7 +239,7 @@ TEST_F(WalletManagerTest, WalletManagerMovesWallet) } -/* + TEST_F(WalletManagerTest, WalletManagerChangesPassword) { Bitmonero::Wallet * wallet1 = wmgr->createWallet(WALLET_NAME, WALLET_PASS, WALLET_LANG); @@ -243,7 +247,7 @@ TEST_F(WalletManagerTest, WalletManagerChangesPassword) ASSERT_TRUE(wallet1->setPassword(WALLET_PASS2)); ASSERT_TRUE(wmgr->closeWallet(wallet1)); Bitmonero::Wallet * wallet2 = wmgr->openWallet(WALLET_NAME, WALLET_PASS2); - ASSERT_TRUE(wallet2->status() == Bitmonero::Wallet::Status_Ok);quint64 + ASSERT_TRUE(wallet2->status() == Bitmonero::Wallet::Status_Ok); ASSERT_TRUE(wallet2->seed() == seed1); ASSERT_TRUE(wmgr->closeWallet(wallet2)); Bitmonero::Wallet * wallet3 = wmgr->openWallet(WALLET_NAME, WALLET_PASS); @@ -343,7 +347,9 @@ TEST_F(WalletManagerTest, WalletManagerStoresWallet4) ASSERT_TRUE(wallet1->address() == address1); ASSERT_TRUE(wmgr->closeWallet(wallet1)); } -*/ + + + TEST_F(WalletManagerTest, WalletManagerFindsWallet) { @@ -415,7 +421,7 @@ TEST_F(WalletTest1, WalletConvertsToString) } -/* + TEST_F(WalletTest1, WalletTransaction) { Bitmonero::Wallet * wallet1 = wmgr->openWallet(CURRENT_SRC_WALLET, TESTNET_WALLET_PASS, true); @@ -429,8 +435,10 @@ TEST_F(WalletTest1, WalletTransaction) wallet1->setDefaultMixin(1); ASSERT_TRUE(wallet1->defaultMixin() == 1); - Bitmonero::PendingTransaction * transaction = wallet1->createTransaction( - recepient_address, AMOUNT_10XMR); + Bitmonero::PendingTransaction * transaction = wallet1->createTransaction(recepient_address, + PAYMENT_ID_EMPTY, + AMOUNT_10XMR, + 1); ASSERT_TRUE(transaction->status() == Bitmonero::PendingTransaction::Status_Ok); wallet1->refresh(); @@ -440,7 +448,6 @@ TEST_F(WalletTest1, WalletTransaction) ASSERT_FALSE(wallet1->balance() == balance); ASSERT_TRUE(wmgr->closeWallet(wallet1)); } -*/ TEST_F(WalletTest1, WalletTransactionWithMixin) { @@ -482,6 +489,48 @@ TEST_F(WalletTest1, WalletTransactionWithMixin) ASSERT_TRUE(wmgr->closeWallet(wallet1)); } +TEST_F(WalletTest1, WalletTransactionWithPriority) +{ + + std::string payment_id = ""; + + Bitmonero::Wallet * wallet1 = wmgr->openWallet(CURRENT_SRC_WALLET, TESTNET_WALLET_PASS, true); + + // make sure testnet daemon is running + ASSERT_TRUE(wallet1->init(TESTNET_DAEMON_ADDRESS, 0)); + ASSERT_TRUE(wallet1->refresh()); + uint64_t balance = wallet1->balance(); + ASSERT_TRUE(wallet1->status() == Bitmonero::PendingTransaction::Status_Ok); + + std::string recepient_address = Utils::get_wallet_address(CURRENT_DST_WALLET, TESTNET_WALLET_PASS); + uint32_t mixin = 2; + uint64_t fee = 0; + + std::vector<Bitmonero::PendingTransaction::Priority> priorities = { + Bitmonero::PendingTransaction::Priority_Low, + Bitmonero::PendingTransaction::Priority_Medium, + Bitmonero::PendingTransaction::Priority_High + }; + + for (auto it = priorities.begin(); it != priorities.end(); ++it) { + std::cerr << "Transaction priority: " << *it << std::endl; + Bitmonero::PendingTransaction * transaction = wallet1->createTransaction( + recepient_address, payment_id, AMOUNT_5XMR, mixin, *it); + std::cerr << "Transaction status: " << transaction->status() << std::endl; + std::cerr << "Transaction fee: " << Bitmonero::Wallet::displayAmount(transaction->fee()) << std::endl; + std::cerr << "Transaction error: " << transaction->errorString() << std::endl; + ASSERT_TRUE(transaction->fee() > fee); + ASSERT_TRUE(transaction->status() == Bitmonero::PendingTransaction::Status_Ok); + fee = transaction->fee(); + wallet1->disposeTransaction(transaction); + } + wallet1->refresh(); + ASSERT_TRUE(wallet1->balance() == balance); + ASSERT_TRUE(wmgr->closeWallet(wallet1)); +} + + + TEST_F(WalletTest1, WalletHistory) { Bitmonero::Wallet * wallet1 = wmgr->openWallet(CURRENT_SRC_WALLET, TESTNET_WALLET_PASS, true); @@ -522,7 +571,7 @@ TEST_F(WalletTest1, WalletTransactionAndHistory) Bitmonero::PendingTransaction * tx = wallet_src->createTransaction(wallet4_addr, PAYMENT_ID_EMPTY, - AMOUNT_10XMR * 5, 0); + AMOUNT_10XMR * 5, 1); ASSERT_TRUE(tx->status() == Bitmonero::PendingTransaction::Status_Ok); ASSERT_TRUE(tx->commit()); @@ -586,100 +635,193 @@ TEST_F(WalletTest1, WalletTransactionWithPaymentId) ASSERT_TRUE(payment_id_in_history); } + struct MyWalletListener : public Bitmonero::WalletListener { Bitmonero::Wallet * wallet; uint64_t total_tx; uint64_t total_rx; - std::timed_mutex guard; + std::mutex mutex; + std::condition_variable cv_send; + std::condition_variable cv_receive; + std::condition_variable cv_update; + std::condition_variable cv_refresh; + bool send_triggered; + bool receive_triggered; + bool update_triggered; + bool refresh_triggered; + + MyWalletListener(Bitmonero::Wallet * wallet) : total_tx(0), total_rx(0) { + reset(); + this->wallet = wallet; this->wallet->setListener(this); } + void reset() + { + send_triggered = receive_triggered = update_triggered = refresh_triggered = false; + } + virtual void moneySpent(const string &txId, uint64_t amount) { - std::cout << "wallet: " << wallet->address() << " just spent money (" + std::cerr << "wallet: " << wallet->address() << "**** just spent money (" << txId << ", " << wallet->displayAmount(amount) << ")" << std::endl; total_tx += amount; - guard.unlock(); + send_triggered = true; + cv_send.notify_one(); } virtual void moneyReceived(const string &txId, uint64_t amount) { - std::cout << "wallet: " << wallet->address() << " just received money (" + std::cout << "wallet: " << wallet->address() << "**** just received money (" << txId << ", " << wallet->displayAmount(amount) << ")" << std::endl; total_rx += amount; - guard.unlock(); + receive_triggered = true; + cv_receive.notify_one(); } + + virtual void updated() + { + std::cout << __FUNCTION__ << "Wallet updated"; + update_triggered = true; + cv_update.notify_one(); + } + + virtual void refreshed() + { + std::cout << __FUNCTION__ << "Wallet refreshed"; + refresh_triggered = true; + cv_refresh.notify_one(); + } + }; -/* + +TEST_F(WalletTest2, WalletCallBackRefreshedSync) +{ + + Bitmonero::Wallet * wallet_src = wmgr->openWallet(CURRENT_SRC_WALLET, TESTNET_WALLET_PASS, true); + MyWalletListener * wallet_src_listener = new MyWalletListener(wallet_src); + ASSERT_TRUE(wallet_src->init(TESTNET_DAEMON_ADDRESS, 0)); + ASSERT_TRUE(wallet_src_listener->refresh_triggered); + ASSERT_TRUE(wallet_src->connected()); +// std::chrono::seconds wait_for = std::chrono::seconds(60*3); +// std::unique_lock<std::mutex> lock (wallet_src_listener->mutex); +// wallet_src_listener->cv_refresh.wait_for(lock, wait_for); + wmgr->closeWallet(wallet_src); +} + + +TEST_F(WalletTest2, WalletCallBackRefreshedAsync) +{ + + Bitmonero::Wallet * wallet_src = wmgr->openWallet(CURRENT_SRC_WALLET, TESTNET_WALLET_PASS, true); + MyWalletListener * wallet_src_listener = new MyWalletListener(wallet_src); + + std::chrono::seconds wait_for = std::chrono::seconds(20); + std::unique_lock<std::mutex> lock (wallet_src_listener->mutex); + wallet_src->initAsync(TESTNET_DAEMON_ADDRESS, 0); + std::cerr << "TEST: waiting on refresh lock...\n"; + wallet_src_listener->cv_refresh.wait_for(lock, wait_for); + std::cerr << "TEST: refresh lock acquired...\n"; + ASSERT_TRUE(wallet_src_listener->refresh_triggered); + ASSERT_TRUE(wallet_src->connected()); + std::cerr << "TEST: closing wallet...\n"; + wmgr->closeWallet(wallet_src); +} + + + TEST_F(WalletTest2, WalletCallbackSent) { - Bitmonero::Wallet * wallet_src = wmgr->openWallet(TESTNET_WALLET3_NAME, TESTNET_WALLET_PASS, true); + Bitmonero::Wallet * wallet_src = wmgr->openWallet(CURRENT_SRC_WALLET, TESTNET_WALLET_PASS, true); // make sure testnet daemon is running ASSERT_TRUE(wallet_src->init(TESTNET_DAEMON_ADDRESS, 0)); ASSERT_TRUE(wallet_src->refresh()); MyWalletListener * wallet_src_listener = new MyWalletListener(wallet_src); + uint64_t balance = wallet_src->balance(); std::cout << "** Balance: " << wallet_src->displayAmount(wallet_src->balance()) << std::endl; + Bitmonero::Wallet * wallet_dst = wmgr->openWallet(CURRENT_DST_WALLET, TESTNET_WALLET_PASS, true); + uint64_t amount = AMOUNT_1XMR * 5; + std::cout << "** Sending " << Bitmonero::Wallet::displayAmount(amount) << " to " << wallet_dst->address(); + + + Bitmonero::PendingTransaction * tx = wallet_src->createTransaction(wallet_dst->address(), + PAYMENT_ID_EMPTY, + amount, 1); + std::cout << "** Committing transaction: " << Bitmonero::Wallet::displayAmount(tx->amount()) + << " with fee: " << Bitmonero::Wallet::displayAmount(tx->fee()); - uint64_t amount = AMOUNT_10XMR * 5; - std::cout << "** Sending " << Bitmonero::Wallet::displayAmount(amount) << " to " << TESTNET_WALLET4_ADDRESS; - Bitmonero::PendingTransaction * tx = wallet_src->createTransaction(TESTNET_WALLET4_ADDRESS, AMOUNT_1XMR * 5); ASSERT_TRUE(tx->status() == Bitmonero::PendingTransaction::Status_Ok); ASSERT_TRUE(tx->commit()); std::chrono::seconds wait_for = std::chrono::seconds(60*3); - - wallet_src_listener->guard.lock(); - wallet_src_listener->guard.try_lock_for(wait_for); - - ASSERT_TRUE(wallet_src_listener->total_tx != 0); + std::unique_lock<std::mutex> lock (wallet_src_listener->mutex); + std::cerr << "TEST: waiting on send lock...\n"; + wallet_src_listener->cv_send.wait_for(lock, wait_for); + std::cerr << "TEST: send lock acquired...\n"; + ASSERT_TRUE(wallet_src_listener->send_triggered); + ASSERT_TRUE(wallet_src_listener->update_triggered); + std::cout << "** Balance: " << wallet_src->displayAmount(wallet_src->balance()) << std::endl; + ASSERT_TRUE(wallet_src->balance() < balance); + wmgr->closeWallet(wallet_src); + wmgr->closeWallet(wallet_dst); } -*/ -/* + TEST_F(WalletTest2, WalletCallbackReceived) { - Bitmonero::Wallet * wallet_src = wmgr->openWallet(TESTNET_WALLET3_NAME, TESTNET_WALLET_PASS, true); + Bitmonero::Wallet * wallet_src = wmgr->openWallet(TESTNET_WALLET5_NAME, TESTNET_WALLET_PASS, true); // make sure testnet daemon is running ASSERT_TRUE(wallet_src->init(TESTNET_DAEMON_ADDRESS, 0)); ASSERT_TRUE(wallet_src->refresh()); std::cout << "** Balance: " << wallet_src->displayAmount(wallet_src->balance()) << std::endl; - Bitmonero::Wallet * wallet_dst = wmgr->openWallet(TESTNET_WALLET4_NAME, TESTNET_WALLET_PASS, true); + Bitmonero::Wallet * wallet_dst = wmgr->openWallet(CURRENT_DST_WALLET, TESTNET_WALLET_PASS, true); ASSERT_TRUE(wallet_dst->init(TESTNET_DAEMON_ADDRESS, 0)); ASSERT_TRUE(wallet_dst->refresh()); + uint64_t balance = wallet_dst->balance(); MyWalletListener * wallet_dst_listener = new MyWalletListener(wallet_dst); - uint64_t amount = AMOUNT_1XMR * 5; - std::cout << "** Sending " << Bitmonero::Wallet::displayAmount(amount) << " to " << TESTNET_WALLET4_ADDRESS; - Bitmonero::PendingTransaction * tx = wallet_src->createTransaction(TESTNET_WALLET4_ADDRESS, AMOUNT_1XMR * 5); + std::cout << "** Sending " << Bitmonero::Wallet::displayAmount(amount) << " to " << wallet_dst->address(); + Bitmonero::PendingTransaction * tx = wallet_src->createTransaction(wallet_dst->address(), + PAYMENT_ID_EMPTY, + amount, 1); + + std::cout << "** Committing transaction: " << Bitmonero::Wallet::displayAmount(tx->amount()) + << " with fee: " << Bitmonero::Wallet::displayAmount(tx->fee()); + ASSERT_TRUE(tx->status() == Bitmonero::PendingTransaction::Status_Ok); ASSERT_TRUE(tx->commit()); std::chrono::seconds wait_for = std::chrono::seconds(60*4); - - wallet_dst_listener->guard.lock(); - wallet_dst_listener->guard.try_lock_for(wait_for); - - ASSERT_TRUE(wallet_dst_listener->total_tx != 0); - + std::unique_lock<std::mutex> lock (wallet_dst_listener->mutex); + std::cerr << "TEST: waiting on receive lock...\n"; + wallet_dst_listener->cv_receive.wait_for(lock, wait_for); + std::cerr << "TEST: receive lock acquired...\n"; + ASSERT_TRUE(wallet_dst_listener->receive_triggered); + ASSERT_TRUE(wallet_dst_listener->update_triggered); + std::cout << "** Balance: " << wallet_dst->displayAmount(wallet_src->balance()) << std::endl; + ASSERT_TRUE(wallet_dst->balance() > balance); + + wmgr->closeWallet(wallet_src); + wmgr->closeWallet(wallet_dst); } -*/ + int main(int argc, char** argv) { - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); } diff --git a/tests/libwallet_api_tests/scripts/send_funds.sh b/tests/libwallet_api_tests/scripts/send_funds.sh index 306b06a40..437e4f240 100755 --- a/tests/libwallet_api_tests/scripts/send_funds.sh +++ b/tests/libwallet_api_tests/scripts/send_funds.sh @@ -12,11 +12,23 @@ function send_funds { } -send_funds 100 wallet_01.bin -send_funds 100 wallet_02.bin -send_funds 100 wallet_03.bin -send_funds 100 wallet_04.bin -send_funds 100 wallet_05.bin -send_funds 100 wallet_06.bin +function seed_wallets { + local amount=$1 + send_funds $amount wallet_01.bin + send_funds $amount wallet_02.bin + send_funds $amount wallet_03.bin + send_funds $amount wallet_04.bin + send_funds $amount wallet_05.bin + send_funds $amount wallet_06.bin +} + +seed_wallets 1 +seed_wallets 2 +seed_wallets 5 +seed_wallets 10 +seed_wallets 20 +seed_wallets 50 +seed_wallets 100 + |