From 61bb241bd350f3df2510cce73549b92a2572c923 Mon Sep 17 00:00:00 2001 From: Dagur Valberg Johannsson Date: Mon, 24 Dec 2018 01:38:48 +0100 Subject: [PATCH 1/2] Improve z_getnewaddress tests --- src/wallet/test/rpc_wallet_tests.cpp | 46 +++++++++++++++++++++------- 1 file changed, 35 insertions(+), 11 deletions(-) diff --git a/src/wallet/test/rpc_wallet_tests.cpp b/src/wallet/test/rpc_wallet_tests.cpp index 28a6c969b..4c31c6315 100644 --- a/src/wallet/test/rpc_wallet_tests.cpp +++ b/src/wallet/test/rpc_wallet_tests.cpp @@ -657,20 +657,44 @@ BOOST_AUTO_TEST_CASE(rpc_wallet_z_importexport) BOOST_CHECK(listaddrs.size() == numAddrs); BOOST_CHECK(myaddrs == listaddrs); - // Add one more address - BOOST_CHECK_NO_THROW(retValue = CallRPC("z_getnewaddress sprout")); - std::string newaddress = retValue.get_str(); - auto address = DecodePaymentAddress(newaddress); - BOOST_CHECK(IsValidPaymentAddress(address)); - BOOST_ASSERT(boost::get(&address) != nullptr); - auto newAddr = boost::get(address); - BOOST_CHECK(pwalletMain->HaveSproutSpendingKey(newAddr)); - - // Check if too many args - BOOST_CHECK_THROW(CallRPC("z_getnewaddress toomanyargs"), runtime_error); } +// Check if address is of given type and spendable from our wallet. +template +void CheckHaveAddr(const libzcash::PaymentAddress& addr) { + BOOST_CHECK(IsValidPaymentAddress(addr)); + auto addr_of_type = boost::get(&addr); + BOOST_ASSERT(addr_of_type != nullptr); + + HaveSpendingKeyForPaymentAddress test(pwalletMain); + BOOST_CHECK(test(*addr_of_type)); +} + +BOOST_AUTO_TEST_CASE(rpc_wallet_z_getnewaddress) { + using namespace libzcash; + UniValue addr; + + if (!pwalletMain->HaveHDSeed()) { + pwalletMain->GenerateNewSeed(); + } + + // No parameter defaults to sapling address + addr = CallRPC("z_getnewaddress"); + CheckHaveAddr(DecodePaymentAddress(addr.get_str())); + + // Passing 'sapling' should also work + addr = CallRPC("z_getnewaddress sapling"); + CheckHaveAddr(DecodePaymentAddress(addr.get_str())); + + // Should also support sprout + addr = CallRPC("z_getnewaddress sprout"); + CheckHaveAddr(DecodePaymentAddress(addr.get_str())); + + + // Should throw on invalid argument + BOOST_CHECK_THROW(CallRPC("z_getnewaddress garbage"), std::runtime_error); +} /** * Test Async RPC operations. From d8eb0b96bca0a9a50ab0e8e3a3d54e49b61d5608 Mon Sep 17 00:00:00 2001 From: Alfredo Garcia Date: Fri, 17 Jan 2020 10:30:14 -0300 Subject: [PATCH 2/2] add additional tests to rpc_wallet_z_getnewaddress --- src/wallet/test/rpc_wallet_tests.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/wallet/test/rpc_wallet_tests.cpp b/src/wallet/test/rpc_wallet_tests.cpp index 4c31c6315..bae2af690 100644 --- a/src/wallet/test/rpc_wallet_tests.cpp +++ b/src/wallet/test/rpc_wallet_tests.cpp @@ -691,9 +691,11 @@ BOOST_AUTO_TEST_CASE(rpc_wallet_z_getnewaddress) { addr = CallRPC("z_getnewaddress sprout"); CheckHaveAddr(DecodePaymentAddress(addr.get_str())); - // Should throw on invalid argument - BOOST_CHECK_THROW(CallRPC("z_getnewaddress garbage"), std::runtime_error); + CheckRPCThrows("z_getnewaddress garbage", "Invalid address type"); + + // Too many arguments will throw with the help + BOOST_CHECK_THROW(CallRPC("z_getnewaddress many args"), runtime_error); } /**