From 0bab947bc5e949655fa9371f81089fa72fc64b44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Per=20Gr=C3=B6n?= Date: Sat, 6 Jan 2018 09:49:57 +0100 Subject: [PATCH] Get rid of implicit hidden dependencies between test .cpp files --- src/Makefile.test.include | 2 + src/test/base58_tests.cpp | 3 +- src/test/rpc_tests.cpp | 39 +----------- src/test/rpc_wallet_tests.cpp | 6 +- src/test/script_tests.cpp | 17 +---- src/test/sighash_tests.cpp | 3 +- src/test/test_util.cpp | 109 +++++++++++++++++++++++++++++++++ src/test/test_util.h | 15 +++++ src/test/transaction_tests.cpp | 55 +---------------- 9 files changed, 133 insertions(+), 116 deletions(-) create mode 100644 src/test/test_util.cpp create mode 100644 src/test/test_util.h diff --git a/src/Makefile.test.include b/src/Makefile.test.include index 582ecb577..7c90e8754 100644 --- a/src/Makefile.test.include +++ b/src/Makefile.test.include @@ -83,6 +83,8 @@ BITCOIN_TESTS =\ test/skiplist_tests.cpp \ test/test_bitcoin.cpp \ test/test_bitcoin.h \ + test/test_util.cpp \ + test/test_util.h \ test/timedata_tests.cpp \ test/torcontrol_tests.cpp \ test/transaction_tests.cpp \ diff --git a/src/test/base58_tests.cpp b/src/test/base58_tests.cpp index 361d8b8ea..ec159ed28 100644 --- a/src/test/base58_tests.cpp +++ b/src/test/base58_tests.cpp @@ -14,14 +14,13 @@ #include "util.h" #include "utilstrencodings.h" #include "test/test_bitcoin.h" +#include "test/test_util.h" #include #include #include -extern UniValue read_json(const std::string& jsondata); - BOOST_FIXTURE_TEST_SUITE(base58_tests, BasicTestingSetup) // Goal: test low-level base58 encoding functionality diff --git a/src/test/rpc_tests.cpp b/src/test/rpc_tests.cpp index c2b29ab67..ebfca760a 100644 --- a/src/test/rpc_tests.cpp +++ b/src/test/rpc_tests.cpp @@ -9,51 +9,14 @@ #include "netbase.h" #include "test/test_bitcoin.h" +#include "test/test_util.h" -#include #include #include using namespace std; -UniValue -createArgs(int nRequired, const char* address1=NULL, const char* address2=NULL) -{ - UniValue result(UniValue::VARR); - result.push_back(nRequired); - UniValue addresses(UniValue::VARR); - if (address1) addresses.push_back(address1); - if (address2) addresses.push_back(address2); - result.push_back(addresses); - return result; -} - -UniValue CallRPC(string args) -{ - vector vArgs; - boost::split(vArgs, args, boost::is_any_of(" \t")); - string strMethod = vArgs[0]; - vArgs.erase(vArgs.begin()); - // Handle empty strings the same way as CLI - for (auto i = 0; i < vArgs.size(); i++) { - if (vArgs[i] == "\"\"") { - vArgs[i] = ""; - } - } - UniValue params = RPCConvertValues(strMethod, vArgs); - - rpcfn_type method = tableRPC[strMethod]->actor; - try { - UniValue result = (*method)(params, false); - return result; - } - catch (const UniValue& objError) { - throw runtime_error(find_value(objError, "message").get_str()); - } -} - - BOOST_FIXTURE_TEST_SUITE(rpc_tests, TestingSetup) BOOST_AUTO_TEST_CASE(rpc_rawparams) diff --git a/src/test/rpc_wallet_tests.cpp b/src/test/rpc_wallet_tests.cpp index e444eb2a5..13ac7de20 100644 --- a/src/test/rpc_wallet_tests.cpp +++ b/src/test/rpc_wallet_tests.cpp @@ -10,10 +10,10 @@ #include "wallet/wallet.h" #include "test/test_bitcoin.h" +#include "test/test_util.h" #include "zcash/Address.hpp" -#include "rpcserver.h" #include "asyncrpcqueue.h" #include "asyncrpcoperation.h" #include "wallet/asyncrpcoperation_sendmany.h" @@ -32,14 +32,12 @@ #include #include #include +#include #include using namespace std; -extern UniValue createArgs(int nRequired, const char* address1 = NULL, const char* address2 = NULL); -extern UniValue CallRPC(string args); - extern CWallet* pwalletMain; bool find_error(const UniValue& objError, const std::string& expected) { diff --git a/src/test/script_tests.cpp b/src/test/script_tests.cpp index 0f3ebe053..b27dfc90a 100644 --- a/src/test/script_tests.cpp +++ b/src/test/script_tests.cpp @@ -14,6 +14,7 @@ #include "script/sign.h" #include "util.h" #include "test/test_bitcoin.h" +#include "test/test_util.h" #if defined(HAVE_CONSENSUS_LIB) #include "script/zcashconsensus.h" @@ -36,22 +37,6 @@ using namespace std; static const unsigned int flags = SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_STRICTENC; -unsigned int ParseScriptFlags(string strFlags); -string FormatScriptFlags(unsigned int flags); - -UniValue -read_json(const std::string& jsondata) -{ - UniValue v; - - if (!v.read(jsondata) || !v.isArray()) - { - BOOST_ERROR("Parse error."); - return UniValue(UniValue::VARR); - } - return v.get_array(); -} - BOOST_FIXTURE_TEST_SUITE(script_tests, BasicTestingSetup) CMutableTransaction BuildCreditingTransaction(const CScript& scriptPubKey) diff --git a/src/test/sighash_tests.cpp b/src/test/sighash_tests.cpp index 989ed7428..a453bc5c5 100644 --- a/src/test/sighash_tests.cpp +++ b/src/test/sighash_tests.cpp @@ -10,6 +10,7 @@ #include "script/script.h" #include "serialize.h" #include "test/test_bitcoin.h" +#include "test/test_util.h" #include "util.h" #include "version.h" #include "sodium.h" @@ -20,8 +21,6 @@ #include -extern UniValue read_json(const std::string& jsondata); - // Old script.cpp SignatureHash function uint256 static SignatureHashOld(CScript scriptCode, const CTransaction& txTo, unsigned int nIn, int nHashType) { diff --git a/src/test/test_util.cpp b/src/test/test_util.cpp new file mode 100644 index 000000000..7cc538352 --- /dev/null +++ b/src/test/test_util.cpp @@ -0,0 +1,109 @@ +#include "test_util.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "script/interpreter.h" +#include "rpcclient.h" +#include "rpcserver.h" + +static std::map mapFlagNames = boost::assign::map_list_of + (std::string("NONE"), (unsigned int)SCRIPT_VERIFY_NONE) + (std::string("P2SH"), (unsigned int)SCRIPT_VERIFY_P2SH) + (std::string("STRICTENC"), (unsigned int)SCRIPT_VERIFY_STRICTENC) + (std::string("LOW_S"), (unsigned int)SCRIPT_VERIFY_LOW_S) + (std::string("SIGPUSHONLY"), (unsigned int)SCRIPT_VERIFY_SIGPUSHONLY) + (std::string("MINIMALDATA"), (unsigned int)SCRIPT_VERIFY_MINIMALDATA) + (std::string("NULLDUMMY"), (unsigned int)SCRIPT_VERIFY_NULLDUMMY) + (std::string("DISCOURAGE_UPGRADABLE_NOPS"), (unsigned int)SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_NOPS) + (std::string("CLEANSTACK"), (unsigned int)SCRIPT_VERIFY_CLEANSTACK) + (std::string("CHECKLOCKTIMEVERIFY"), (unsigned int)SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY); + +UniValue +read_json(const std::string& jsondata) +{ + UniValue v; + + if (!v.read(jsondata) || !v.isArray()) + { + BOOST_ERROR("Parse error."); + return UniValue(UniValue::VARR); + } + return v.get_array(); +} + +unsigned int ParseScriptFlags(std::string strFlags) +{ + if (strFlags.empty()) { + return 0; + } + unsigned int flags = 0; + std::vector words; + boost::algorithm::split(words, strFlags, boost::algorithm::is_any_of(",")); + + BOOST_FOREACH(std::string word, words) + { + if (!mapFlagNames.count(word)) + BOOST_ERROR("Bad test: unknown verification flag '" << word << "'"); + flags |= mapFlagNames[word]; + } + + return flags; +} + +std::string FormatScriptFlags(unsigned int flags) +{ + if (flags == 0) { + return ""; + } + std::string ret; + std::map::const_iterator it = mapFlagNames.begin(); + while (it != mapFlagNames.end()) { + if (flags & it->second) { + ret += it->first + ","; + } + it++; + } + return ret.substr(0, ret.size() - 1); +} + +UniValue +createArgs(int nRequired, const char* address1, const char* address2) +{ + UniValue result(UniValue::VARR); + result.push_back(nRequired); + UniValue addresses(UniValue::VARR); + if (address1) addresses.push_back(address1); + if (address2) addresses.push_back(address2); + result.push_back(addresses); + return result; +} + +UniValue CallRPC(std::string args) +{ + std::vector vArgs; + boost::split(vArgs, args, boost::is_any_of(" \t")); + std::string strMethod = vArgs[0]; + vArgs.erase(vArgs.begin()); + // Handle empty strings the same way as CLI + for (auto i = 0; i < vArgs.size(); i++) { + if (vArgs[i] == "\"\"") { + vArgs[i] = ""; + } + } + UniValue params = RPCConvertValues(strMethod, vArgs); + + rpcfn_type method = tableRPC[strMethod]->actor; + try { + UniValue result = (*method)(params, false); + return result; + } + catch (const UniValue& objError) { + throw std::runtime_error(find_value(objError, "message").get_str()); + } +} diff --git a/src/test/test_util.h b/src/test/test_util.h new file mode 100644 index 000000000..acad077bf --- /dev/null +++ b/src/test/test_util.h @@ -0,0 +1,15 @@ +#ifndef BITCOIN_TEST_TEST_UTIL_H +#define BITCOIN_TEST_TEST_UTIL_H + +#include + +#include + +UniValue read_json(const std::string& jsondata); +unsigned int ParseScriptFlags(std::string strFlags); +std::string FormatScriptFlags(unsigned int flags); +UniValue createArgs(int nRequired, const char* address1 = NULL, const char* address2 = NULL); +UniValue CallRPC(std::string args); + + +#endif diff --git a/src/test/transaction_tests.cpp b/src/test/transaction_tests.cpp index 6b207f643..4768e7604 100644 --- a/src/test/transaction_tests.cpp +++ b/src/test/transaction_tests.cpp @@ -15,6 +15,7 @@ #include "main.h" #include "script/script.h" #include "script/script_error.h" +#include "test/test_util.h" #include "primitives/transaction.h" #include "sodium.h" @@ -22,11 +23,7 @@ #include #include -#include -#include -#include #include -#include #include @@ -36,56 +33,6 @@ using namespace std; -// In script_tests.cpp -extern UniValue read_json(const std::string& jsondata); - -static std::map mapFlagNames = boost::assign::map_list_of - (string("NONE"), (unsigned int)SCRIPT_VERIFY_NONE) - (string("P2SH"), (unsigned int)SCRIPT_VERIFY_P2SH) - (string("STRICTENC"), (unsigned int)SCRIPT_VERIFY_STRICTENC) - (string("LOW_S"), (unsigned int)SCRIPT_VERIFY_LOW_S) - (string("SIGPUSHONLY"), (unsigned int)SCRIPT_VERIFY_SIGPUSHONLY) - (string("MINIMALDATA"), (unsigned int)SCRIPT_VERIFY_MINIMALDATA) - (string("NULLDUMMY"), (unsigned int)SCRIPT_VERIFY_NULLDUMMY) - (string("DISCOURAGE_UPGRADABLE_NOPS"), (unsigned int)SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_NOPS) - (string("CLEANSTACK"), (unsigned int)SCRIPT_VERIFY_CLEANSTACK) - (string("CHECKLOCKTIMEVERIFY"), (unsigned int)SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY); - -unsigned int ParseScriptFlags(string strFlags) -{ - if (strFlags.empty()) { - return 0; - } - unsigned int flags = 0; - vector words; - boost::algorithm::split(words, strFlags, boost::algorithm::is_any_of(",")); - - BOOST_FOREACH(string word, words) - { - if (!mapFlagNames.count(word)) - BOOST_ERROR("Bad test: unknown verification flag '" << word << "'"); - flags |= mapFlagNames[word]; - } - - return flags; -} - -string FormatScriptFlags(unsigned int flags) -{ - if (flags == 0) { - return ""; - } - string ret; - std::map::const_iterator it = mapFlagNames.begin(); - while (it != mapFlagNames.end()) { - if (flags & it->second) { - ret += it->first + ","; - } - it++; - } - return ret.substr(0, ret.size() - 1); -} - BOOST_FIXTURE_TEST_SUITE(transaction_tests, JoinSplitTestingSetup) BOOST_AUTO_TEST_CASE(tx_valid)