From b109bde46a8730afbc09c107b802a2c321293f4b Mon Sep 17 00:00:00 2001 From: glozow Date: Mon, 5 Apr 2021 09:41:25 -0700 Subject: [PATCH] [test] check that mapFlagNames is up to date There is no way to iterate through all script verification flags, and it's not guaranteed that every power of 2 is used. Just make sure that all flags in STANDARD_SCRIPT_VERIFY_FLAGS are present in mapFlagNames; this covers all consensus and policy flags. If mapFlagNames has more flags than STANDARD_SCRIPT_VERIFY_FLAGS, that's okay. Nonexistent flags will be caught by the compiler. --- src/test/transaction_tests.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/test/transaction_tests.cpp b/src/test/transaction_tests.cpp index 35d8fe129f..a7c0d8b2c0 100644 --- a/src/test/transaction_tests.cpp +++ b/src/test/transaction_tests.cpp @@ -82,6 +82,16 @@ unsigned int ParseScriptFlags(std::string strFlags) return flags; } +// Check that all flags in STANDARD_SCRIPT_VERIFY_FLAGS are present in mapFlagNames. +bool CheckMapFlagNames() +{ + unsigned int standard_flags_missing{STANDARD_SCRIPT_VERIFY_FLAGS}; + for (const auto& pair : mapFlagNames) { + standard_flags_missing &= ~(pair.second); + } + return standard_flags_missing == 0; +} + std::string FormatScriptFlags(unsigned int flags) { if (flags == 0) { @@ -178,6 +188,7 @@ BOOST_FIXTURE_TEST_SUITE(transaction_tests, BasicTestingSetup) BOOST_AUTO_TEST_CASE(tx_valid) { + BOOST_CHECK_MESSAGE(CheckMapFlagNames(), "mapFlagNames is missing a script verification flag"); // Read tests from test/data/tx_valid.json UniValue tests = read_json(std::string(json_tests::tx_valid, json_tests::tx_valid + sizeof(json_tests::tx_valid)));