diff --git a/src/test/CMakeLists.txt b/src/test/CMakeLists.txt --- a/src/test/CMakeLists.txt +++ b/src/test/CMakeLists.txt @@ -2,6 +2,8 @@ project(bitcoin-test) +option(TEST_WITH_UPGRADE_ACTIVATED "Run unit tests with the next upgrade activated in addition to regular tests" OFF) + # Process json files. file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/data") @@ -152,6 +154,16 @@ ${JSON_HEADERS} ) +if (TEST_WITH_UPGRADE_ACTIVATED) + add_test( + NAME + "bitcoin-upgrade-activated" + COMMAND + "test_bitcoin" + "-gravitonactivationtime=1573819200" + ) +endif() + target_link_libraries(test_bitcoin rpcclient server) if(TARGET bitcoinconsensus-shared) target_link_libraries(test_bitcoin bitcoinconsensus-shared) diff --git a/src/test/activation_tests.cpp b/src/test/activation_tests.cpp --- a/src/test/activation_tests.cpp +++ b/src/test/activation_tests.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include @@ -26,14 +27,15 @@ CBlockIndex prev; const Consensus::Params ¶ms = Params().GetConsensus(); - const auto activation = params.gravitonActivationTime; - - BOOST_CHECK(!IsGravitonEnabled(params, nullptr)); + const auto activation = + gArgs.GetArg("-gravitonactivationtime", params.gravitonActivationTime); + SetMockTime(activation - 1000000); std::array blocks; for (size_t i = 1; i < blocks.size(); ++i) { blocks[i].pprev = &blocks[i - 1]; } + BOOST_CHECK(!IsGravitonEnabled(params, &blocks.back())); SetMTP(blocks, activation - 1); BOOST_CHECK(!IsGravitonEnabled(params, &blocks.back())); diff --git a/src/test/test_bitcoin_main.cpp b/src/test/test_bitcoin_main.cpp --- a/src/test/test_bitcoin_main.cpp +++ b/src/test/test_bitcoin_main.cpp @@ -3,9 +3,11 @@ // file COPYING or http://www.opensource.org/licenses/mit-license.php. #define BOOST_TEST_MODULE Bitcoin Test Suite +#define BOOST_TEST_NO_MAIN #include #include +#include #include @@ -23,3 +25,21 @@ bool ShutdownRequested() { return false; } + +std::set testArgs = {"-gravitonactivationtime"}; + +int main(int argc, char *argv[]) { + // Additional CLI params supported by test_bitcoin: + // Note: gArgs.ParseParameters() cannot be called here or it will fail to + // parse BOOST runtime params. + for (int i = 1; i < argc; i++) { + std::string key(argv[i]); + std::string value; + if (ParseKeyValue(key, value)) { + if (testArgs.count(key) > 0) { + gArgs.ForceSetArg(key, value); + } + } + } + return boost::unit_test::unit_test_main(&init_unit_test, argc, argv); +}